Spring MVC 基础配置

1 . Spring MVC是什么?

spring mvc是spring框架提供的一个构建web应用程序全功能mvc模块。使用spring可插入的mvc架构,可以使用spring进行web开发。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试变得更加简单。
Spring MVC主要由DispatcherServlet,处理映射器,控制器,试图解析器,视图组成。

2 . Spring MVC的运行原理:

这里写图片描述

(1) . Http请求:客户端请求提交到DispatcherServlet。
(2) . 寻找处理器:由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller。
(3) . 调用处理器:DispatcherServlet将请求提交到Controller。
(4)和(5) . 调用业务处理和返回结果:Controller调用业务逻辑后,返回ModelAndView。
(6)和(7) . 处理视图映射并返回模型:DispatcherServlet查询一个或者多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(8) . Http响应:视图负责将结果显示到客户端。

3 . Spring MVC重要接口解释

(1) . DispatcherServlet 接口:
Spring提供的前端控制器,所有的请求都经过它来统一分发。在DispatcherServlet请求分发给Spring Controller之前,需要借助Spring提供的HandlerMapping定位到具体的Controller。
使用方式:

(2) . HandlerMapping接口:
能够完成客户请求到Controller映射。顺便说一下Spring MVC有4种映射处理器:
* 根据Controller的name名称来映射寻找Controller
* 根据URL来映射寻找Controller
* 根据Controller的类名来映射寻找Controller
* 使用注解来影射寻找Controller(这是最常用的一种)
这4种影射方式怎么用,这里先不提。

(3) . Controller接口:
需要为并发用户处理上述请求,因此实现Controller接口时,必须保持线程安全并且可重用。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度上考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。

(4) . ViewResolver接口:
Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应的结果渲染给客户。

4 . Spring MCV配置实例:

(1).配置web.xml文件

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <!--把请求交由DispatcherServlet处理(由DispatcherServlet分配任务)-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--init-param 配置是DispatcherServlet的一个初始化参数,即设置SpringMVC配置文件的位置和名称-->
    <!--也就是告诉DispatcherServlet去husin-servlet.xml寻找HandlerMapping-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:husin-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

配置其实有两种方式,其中一种像上述一样;
第二种配置是当你把配置文件放在WEB-INF下时,可以不需要init-param参数,默认为使用SpringMCV的默认配置,但是SpringMVC配置文件的名称是有要求的,必须为
<servlet-name>-servlet.xml

什么意思呢?

比如说我现在servlet名字是: <servlet-name>mvc-dispatcher</servlet-name>
那么你放在WEB-INF下的SpringMCV配置文件名应该是mvc-dispatcher-servlet.xml

关于<load-on-startup>1</load-on-startup>
* load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
* 它的值必须是一个整数,表示servlet应该被载入的顺序
* 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
* 当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
* 正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
* 当值相同时,容器就会自己选择顺序来加载。

(2).配置SpringMCV配置文件(我这里叫husin-servlet.xml)

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

       <! --web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能,Controller都在这个包里面 -->
       <context:component-scan base-package="husin"/>
       <!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 -->
       <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
       <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

</beans>

需要注意:
DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时!
spring 3.1 开始我们用
RequestMappingHandlerMapping 来替换 DefaultAnnotationHandlerMapping,
RequestMappingHandlerAdapter 来替换 AnnotationMethodHandlerAdapter。

小结:
在web.xml中的配置相当于告诉系统这不是传统的web工程,使用SpringMCV方式,把请求转让给SpringMCV的DispatcherServlet处理。
在spring-servlet.xml中配置才是重点,选着什么样的方式处理上述的请求,交给谁处理,都在这里面配置。

附上工程结构:
这里写图片描述

MainController.class

@Controller
@RequestMapping(value = "/")
public class MainController {
    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String welcome(){
        return "husin";
    }
}

Maven依赖

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>

猜你喜欢

转载自blog.csdn.net/huxiny/article/details/80239809