简介
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。
简单使用
注意:以下步骤及编写的内容不全,只为说明框架相关的步骤,内容作为参考,请勿直接CV,实际内容以自己项目中为准(例如XML的版本、Spring的版本等)
1.导入相关依赖
<!-- Spring的版本 -->
<properties>
<spring.version>4.3.20.RELEASE</spring.version>
</properties>
<!-- SpringMVC的依赖 -->
<dependencies>
<dependency>
<!-- 属于SpringFrameWork项目 -->
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<!-- 与properties中的Spring的版本一致 -->
<version>${spring.version}</version>
</dependency>
</dependencies>
2.配置web.xml,目的是为了让Tomcat实例化SpringMVC的入口
<?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">
<!-- 编码处理过滤器 -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 配置SpringMVC入口servlet -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 初始化字段 使得SpringMVC可以找到配置文件 -->
<param-name>contextConfigLocation</param-name>
<!-- 通过classpath下的springMVC.xml文件配置SpringMVC相关配置 -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!-- 让Tomcat在启动后就加载这个servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置servlet-mapping -->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!-- 让所有请求都先进入这个servlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.配置springMVC.xml,在SpringMVC的入口servlet加载后会通过这个配置文件内的内容进行相应配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
<!-- 开启自动包扫描,将bean交给Spring来管理 -->
<context:component-scan base-package="com.springmvc"/>
<!-- 将视图解析器交给Spring做管理,初始化两个字段分别为视图文件位置以及视图文件后缀名 -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀,我们的视图文件应该放到/WEB-INF/views/目录下,这里我们需要在WEB-INF下面创建view文件夹 -->
<property name="prefix" value="/WEB-INF/views/" />
<!-- 设置后缀为.jsp -->
<property name="suffix" value=".jsp" />
</bean>
<!-- 开启SpringMVC框架对注解的支持 -->
<mvc:annotation-driven />
</beans>
4.编写首页测试类
@Controller//标识这是一个控制器,实例对象将由Spring管理
public class IndexController {
@RequestMapping("/hello")//将"/hello"这个uri映射到hello这个方法
public String hello() {
return "index";//最终将相应index.jsp的内容
}
}
流程
名词解释
SpringMVC是基于组件的,以下每一个器其实就是一个组件
配置了 <mvc:annotation-driven />后,会自动加载处理器映射器HandlerMapping和处理器适配器HandlerAdapter
(1) 前端控制器DispatcherServlet
作用:核心流程控制,接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
(2) 处理器映射器HandlerMapping
作用:根据请求的url查找Handler,即根据url找到具体需要执行的那个方法。
默认:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
(3) 处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
默认:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
(4) 处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
(5) 视图解析器ViewResolver。
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
默认:org.springframework.web.servlet.view.InternalResourceViewResolver
(6) 视图View(需要程序员开发jsp)。
注意:View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
执行流程
1.Tomcat启动时加载、实例org.springframework.web.servlet.DispatcherServlet类,并指定其中contextConfigLocation字段,使其可以找到SpringMVC相关配置的配置文件
2.DispatcherServlet对象读取springMVC.xml,并进行配置文件中指定的配置,例如将视图解析器交给Spring管理
3.用户发送请求,DispatcherServlet对象先接收到请求
4.DispatcherServlet对象请求HandlerMapping做handler映射查找handler(可以根据xml配置、注解进行查找)
5.HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,以及多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略
6.DispatcherServlet对象请求处理器适配器HandlerAdapter执行handler
7.处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
8.HandlerAdapter调用handler处理器(平常叫做controller)执行controller方法
9.handler处理器返回给HandlerAdapter一个ModelAndView对象(ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
10.HandlerAdapter将ModelAndView对象返回给DispatcherServlet对象
11.DispatcherServlet对象请求ViewResolver(视图解析器)去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
12.ViewResolver向DispatcherServlet返回View
13.DispatcherServlet进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
14.DispatcherServlet响应结果
来源:CSDN
作者:啦啦啦·
链接:https://blog.csdn.net/qq_41769785/article/details/103826884