JavaEE简单示例——SpringMVC的入门程序

简单介绍:

对于SpringMVC的理论知识方面,我们只需要知道这是应用在表现层的,用于接收用户浏览器发送的请求,并将数据相应到浏览器的框架就可以,然后本章我们主要介绍如何搭建一个SpringMVC程序,搭建的步骤以及如何启动我们的SpringMVC的项目

使用方法:

在JavaEE的开发中,经典的三层架构包括表现层,业务层和持久层。三层架构互相配合完成整体的项目,比如持久层负责 与数据库进行交互,使用的比如MyBatis;业务层负责进行业务逻辑需求,比如我们的JavaBean;表现层就是负责接收用户 的请求,并向用户响应数据。 接下来我们要介绍的SpringMVC就是用于表现层的,负责接收客户端的请求并进行响应。 关于SpringMVC的一些理论知识有很多,比如SpringMVC的优点和特点,此处我们并不过多的解释,而是注重于我们 如何去实现他。 首先因为我们的SpringMVC是用于表现层,需要接收和响应用户的请求,那么首先我们需要在我们的项目中添加 web框架:

首先点击文件,点击项目结构:

 然后点击左上角的模块,然后是点击加号:

然后点击最下面的web: 

 

然后我们就能看见web目录出现了,在web框架中,我们需要配置两个地方,第一个是配置描述符,还有一个是配置资源目录: 

 一般情况下,在我们点击确定之后,它会自动帮我们创建webapp文件夹,我们继续进行下一步就可以了。

在添加完框架支持之后,我们就来添加我们的依赖坐标,在pom文件中,我们需要添加spring的web包和tomcat的插件 以及我们的servlet的依赖和jsp页面的依赖,添加完成之后,我们就可以继续进行下一步:

<!--        servlet的依赖坐标-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <!--        jsp的依赖坐标-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
<!--        添加SpringMVC的web包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>

 添加完成框架之后,我们开始配置我们的SpirngMVC的配置文件,先回想一下之前我们学习JavaWeb的时候 我们是如何让一个Java类实现接受用户从浏览器发送的请求的呢?

我们是通过让类去显示servlet接口,重写get或者post方法来将这个类变成可以处理来自浏览器的请求的servlet类 然后通过一个@Servlet注解,设定访问路径,当浏览器访问这个路径的时候,就会将请求拦截到我们自己编写的 servlet类中处理请求,然后将结果响应回去。 这是我们之前javaWeb的内容,但是现在,我们要通过控制反转的方式去获取对象,也就是说我们并不能去新建一个类 去实现接口,那么现在我们怎么让自己创建的类变成一个servlet呢?并且我们在将自己的类变成一个servlet之后要如何设置让他去接收来自某个请求路径的请求呢?

要解决这两个问题,首先我们要认识一个新的东西,叫做前端控制器,使用这个就可以解决刚才我们提出的两个问题 这个前端配置器的作用就是在SpringMVC中用来拦截来自客户端的请求并且进行转发的一个东西。

这个前端控制器 本身也是一个Servlet,所以我们需要在web.xml中进行配置:

<!--    配置前端控制器,因为前端控制器的本质就是一个servlet,所以这里用servlet的配置即可-->
    <servlet>
<!--        配置类名,这个类名可以随意写-->
        <servlet-name>DispatcherServlet</servlet-name>
<!--        配置servlet的类的全路径名-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        配置一些初始参数,因为我们是基于IoC,所以我们的servlet的类的创建是基于spring的配置文件,这里我们需要指定我们的spring容器的配置文件的地址-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            配置我们的servlet类创建的容器的XML配置文件的地址-->
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
<!--        配置在项目启动的时候同时加载前端控制器-->
        <load-on-startup>1</load-on-startup>
    </servlet>

前端控制器的意义在于,之前我们是通过自己创建servlet类,我们可以直接实现接口来将我们自己的类变成一个 servlet来获取请求,即浏览器直直接到servlet,但是现在我们无法直接创建类,所以我们需要一个前端控制器 来将服务器的请求拦截下来,转发到我们通过springMVC规则的注解中配置的路径的类中,之后我们会在代码中 对如何寻找路径进行一个详细的注解说明。

 然后是配置视图解析器,视图解析的作用是将我们的访问页面时候的路径简化。 他会配置一个页面的前缀和后缀,因为我们最终是要给用户展示一个界面,而我们的界面需要一个完整的路径,写起来 会非常的麻烦,就可以通过配置我们的视图解析器来简化我们编写的页面路径,我们可以通过配置一个前缀用来定位页面 所在的包,配置一个后缀来定位这个文件是一个什么类型的文件,这样我们需要自己写的地方就只剩下一个文件名了 极大的简化了我们定位页面时需要编写的大量路径。页面解析器的配置需要在spring的Bean管理XML配置文件中编写

<!--    配置页面解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--        配置页面的前缀,表示定位页面的包-->
        <property name="prefix" value="/SpringMVC/pages"/>
<!--        配置文件的后缀,表示定位页面的类型-->
        <property name="suffix" value=".jdp"/>
    </bean>

 在完成了前端控制器和页面解析器之后,我们还需要配置注解扫描,因为告诉我们的Spring我创建的类是一个 用来处理用户请求的类,并且我还要告诉Spring我要处理来自哪一个路径请求,这些配置全部都是基于注解来完成的。

<!--配置包扫描器,因为我们的SpringMVC的配置主要是基于注解,所以我需要配置一个注解扫描 -->
    <context:component-scan base-package="Semester_4.SpringMVC"/>

 在完成上面的配置之后,我们就可以来创建我们的业务处理类了,就在我们之前注解扫描的包下面创建,我们的业务也是非常的简单,只需要在访问一个url的时候在控制台输出一句话,并跳转到相当的页面即可:

package Semester_4.SpringMVC.GettingStartedProgram;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//这个注解就相当于是继承servlet接口,表示这个类是一个用于处理用户请求的servlet类
@Controller
public class UserServer {
//    这个注解就相当于是servlet注解,后面的路径就是当我访问这个路径时,我的请求就会被转发到这个方法中进行处理
    @RequestMapping("/sayHello")
    public String sayHello(){
//        返回值就是响应的页面,本来因该是全路径,但是因为之前我们配置了页面解析器,所以我们只需要写文件名就可以了
//        如果不写这个返回值,默认会去找跟方法名同名的jsp页面
        return "index";
    }
}

然后我们使用Maven来启动Tomcat的插件,我们需要做一些简单的配置,在使用maven插件的tamcat的时候,需要有几个注意点,主要就是我们的依赖里面的servlet的版本要注意统一 还有就是我们的web框架生成的webapp文件夹要放在我们的main文件夹下,并且在我们的配置文件中一定要注意 这个配置文件的位置,否则会导致tomcat启动不起来的问题:

我们正常在工作界面右击,然后选择Run Maven,然后就可以看到tomcat的运行选项,我们点击这个选项之后,就可以正常的使用Tomcat的插件运行

 

之后我们会在控制台看到一堆的日志,知道最后显示日期或者能看到一个路径,这个路径就是Tomcat的访问路径,我们点击这个网址,就会自动跳转到默认的浏览器:

正常应该是访问不到资源,不用慌,我们打开之前我们编写的业务处理类的方法中的RequestMapping注解后面的值,不要漏掉斜杠,然后粘贴到浏览器的路径后面,然后点击回车访问:

 

如果配置正确,你会看到在浏览器上输出了这句话。那么就表示你的SpringMVC配置正确,并且已经成功启动了。 

代码实现:

我们把完整的web.xml和Bean管理XML配置文件,以及我们整体的文件结构整体的展示一下:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!--    配置前端控制器,因为前端控制器的本质就是一个servlet,所以这里用servlet的配置即可-->
    <servlet>
<!--        配置类名,这个类名可以随意写-->
        <servlet-name>DispatcherServlet</servlet-name>
<!--        配置servlet的类的全路径名-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        配置一些初始参数,因为我们是基于IoC,所以我们的servlet的类的创建是基于spring的配置文件,这里我们需要指定我们的spring容器的配置文件的地址-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            配置我们的servlet类创建的容器的XML配置文件的地址-->
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
<!--        配置在项目启动的时候同时加载前端控制器-->
        <load-on-startup>1</load-on-startup>
    </servlet>
<!--    配置servlet的转发来自什么范围的路径的亲求-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
<!--        只有一个斜杠表示将拦截转发来自所有路径的请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

Bean管理xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--    配置页面解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--        配置页面的前缀,表示定位页面的包-->
        <property name="prefix" value="SpringMVC/pages/"/>
<!--        配置文件的后缀,表示定位页面的类型-->
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    测试复杂数据绑定中的将数据绑定到Java类中的绑定类-->
    <bean id="user" class="SpringMVC.DataBindingAndResponse.user"/>

<!--    添加有关数据绑定的controller类-->
    <bean id="dataBinger" class="SpringMVC.DataBindingAndResponse.textDataBinger"/>

    <!--        配置包扫描器,因为我们的SpringMVC的配置主要是基于注解,所以我需要配置一个注解扫描 -->
    <context:component-scan base-package="SpringMVC.GettingStartedProgram"/>

<!--    添加格式转换工厂类-->
    <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionServiceFactoryBean">
        <property name="converters">
            <array>
<!--                此处配置我们自己编写的格式转换类-->
                <bean class="SpringMVC.DataBindingAndResponse.DataConverter"/>
            </array>
        </property>
    </bean>
<!--    然后装载我们的格式工厂-->
    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>
</beans>

 文件结构:

主要是注意这个webapp文件夹的位置 

注意点:

这一章主要的注意点就是需要注意webapp文件夹的创建和内部文件的编写。还有一个问题是可能出现的,如果出现Tomcat运行之后没有挂起而是直接结束了,需要在pom.xml文件中添加一行配置:

<!--    设置打包方式-->
<packaging>war</packaging>

这句话的意思是指定项目打包成一个war包,然后Tomcat才能进行解析,否则会打包成jar包,直接就结束了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值