SpringMVC执行流程及基本配置

1、Spring MVC 简介

什么是Spring MVC?

  1. MVC框架,它解决WEB开发中常见的问题(参数接收、页面跳转 、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。(替代servlet层
  2. Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 (更安全,性能更好,更简单)。
  3. 支持 RESTful风格的 URL 请求 。
  4. 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离------>责任分离。
在这里插入图片描述

2、Spring MVC 执行流程

在这里插入图片描述

2.1 SpringMVC流程:

01、用户发送出请求到前端控制器DispatcherServlet。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的控制器(可查找xml配置或注解配置),生成处理器对象的执行链(如果有),再一起返回给DispatcherServlet。

04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(controller)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

08、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
09、ViewReslover解析后返回具体View(视图)。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。

2.2 涉及组件分析:(1、4、6)

1、前端控制器DispatcherServlet需要配置),由框架提供,在web.xml中配置。
作用:接收请求,响应结果,相当于转发器,中央处理器。

2、处理器映射器HandlerMapping(不需要程序员开发),由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。

3、处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Controller。

4、控制器Controller(需要工程师开发---->Handler处理器)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

5、视图解析器ViewResolver(不需要程序员开发),由框架提供
作用:进行视图解析,把逻辑视图名解析成真正的物理视图。
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、pdfView等。

6、视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)

3、Spring MVC 基础配置—>xml实现

3.1 添加依赖

  1. 添加Spring的核心包
    spring-core-x.x.x.RELEASE.jar
    spring-beans-x.x.x.RELEASE.jar
    spring-context-x.x.x.RELEASE.jar (导入此依赖,其他依赖会自动导入)
    spring-expression-x.x.x.RELEASE.jar
    spring-aop-x.x.x.RELEASE.jar
  2. 添加SpringMVC的核心包
    spring-web-x.x.x.RELEASE.jar spring 对web项目的支持
    spring-webmvc-x.x.x.RELEASE.jar spring mvc核心包。
  3. 添加jstl核心包、servlet-api包
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.20</version>
      <scope>provided</scope>
    </dependency>

    <!--spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${project.spring.version}</version>
    </dependency>

    <!--SpringMVC依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${project.spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${project.spring.version}</version>
    </dependency>

    <!--Spring MVC底层是基于servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!--jsp页面需要用到jstl标签库-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!--Json依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

3.2 配置前端控制器:DispatcherServlet

Front Controller模式要求在WEB应用系统的前端(Front)设置一个入口控制器(Controller),所有的request请求都被发往该控制器统一处理,处理所有请求共同的操作。MVC框架: 都得先配置前端控制器.
(1)在web.xml配置文件中配置前端控制器(及编码过滤器);
(2)关联springMVC的配置文件SpringMVC.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">


<!--web.xml中配置SpringMVC的前端控制器,拦截所有请求-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联springMVC的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC.xml</param-value>
        </init-param>
        <!--tomcat服务器启动时,完成控制器初始化,正整数即可-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--配置前端控制器的映射文件-->
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--/代表拦截所有静态资源页面,可在mvc.xml中配置放行所有静态资源(SpringMVC无法处理静态页面),
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>


<!--web.xml中配置SpringMVC的编码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--设置编码格式-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <!--设置request、response作用域强制使用此编码格式-->
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <!--配置过滤器映射文件-->
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>

3.3 开发和配置控制器(Handler处理器):

在SpringMVC配置文件中,配置控制器;当浏览器输入http://localhost:8080/test01时,就会执行TestContro01类

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置控制器-->
    <bean name="/test01" class="com.project.SpringMVC01.controller_xml.TestContro01"/>
    
    <!--放行静态资源页面-->
    <mvc:default-servlet-handler/>
	<!--配置视图解析器,页面路径过于复杂,配置前缀和后缀-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/******"/>
        <property name="suffix" value=".jsp"/>
    </bean>-->

</beans>

3.4 创建Contro类

创建一个Controller类TestContro01,用于处理浏览器请求。

4、Spring MVC 基础配置—>注解实现

4.1 修改SpringMVC配置文件

需要配置IoC注解解析器 和 SPringMVC注解解析器

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 
    <!--  =========================注解方式=================================== -->
    <!-- 配置IoC注解解析器   -->
    <context:component-scan base-package="com.project.SpringMVC01"/>
    <!--配置SPringMVC注解解析器-->
    <mvc:annotation-driven/>


    <!--配置视图解析器,页面路径过于复杂,配置前缀和后缀-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/******"/>
        <property name="suffix" value=".jsp"/>
    </bean>-->

	 <!--放行静态资源页面-->
    <mvc:default-servlet-handler/>
</beans>

4.2 修改Contro类

@Controller   //IoC注解
@RequestMapping("/test")    //mvc注解,在类上加注解是为了防止多个类命名冲突,访问方式为http:localhost:8080/test/run
public class TestContro02 {

    //@RequestMapping(value = "/test/run",method = RequestMethod.POST)  可以指定请求方式
    @RequestMapping("/run")    //设置Controller方法的访问URL,不能重名.
    public ModelAndView run(){
      
        ModelAndView mv = new ModelAndView();
        /*设置数据*/
        mv.addObject("info","天王");
        /*跳转页面*/
        mv.setViewName("/index.jsp");

        /*必须返回modelandview对象*/
        return mv;
    }
}

在这里插入图片描述
1.使用注解开发SpringMVC必须首先要配置mvc的注解解析器和IoC的注解解析器
2.@RequestMapping注解用于指定对应的url请求路径,value的值表示路径,路径通常以"/“开头,”/“可以省略.
3.@RequestMapping可以标注在类中,用于窄化请求映射.此时访问资源的路径为:”/类的路径/方法的路径"
4.@RequestMapping可以添加method属性,用于限定请求请求后台资源的方法.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值