Spring MVC 温故而知新 – 从零开始
视图解析器(View Resolver):解析具体视图,通过 ModelAndView 对象中的 View 信息,将逻辑视图名解析成真正的视图 View
请求流程具体步骤详解:
1:用户发起请求,请求会被前端控制器(DispatcherServlet)拦截
2:前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找 Handler
3:处理器映射器(Handle
rMapping)根据配置找到相应 Handler(可以更具注解或者 XML 配置),可能包含多个 Interceptor 拦截器,返回给前端控制器
4:前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的 Handler
5:适配器交由对应 Handler 处理器执行
6: ?Handler 处理器执行完成后返回 ModelAndView 对象给处理器适配器
7:处理器适配器接受 Handler 处理器的返回结果,并将该结果返回给前端控制器(DispatcherServlet)
8:前端控制器(DispatcherServlet)接收处理器适配器返回的数据和视图信息,请求视图解析器,解析对应的视图
9:视图解析器根据 View 信息匹配的相应的视图结果,反回给前端控制器
10:前端控制器接收具体视图,进行视图渲染,将 Model 数据填充到 View 视图中,生成最终视图
11:前端控制器向用户返回结果
? 从零开始搭建 demo
? 创建工程:
Eclipse 下新建一个动态 Web 项目
工程默认目录结构:
? 添加 jar 包依赖
WebContent > WEB-INF > lib 文件夹下导入相应的 jar 包,其中核心的 jar 包是 spring-webmvc-5.0.0.RELEASE.jar,其他是几个主要是 spring 用于管理上下文和 beande 包、jstl 标签库和一个用于打印日志的 log 包:
? 在 web.xml 中配置前端控制器
前端控制器相当于 Spring MVC 的专有 servlet,用于拦截所有符合条件的请求,交由框架做后续处理
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID"
version="3.1">
<servlet>
<servlet-name>springMvcNext</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMvcNext</servlet-name>
<url-pattern>/</url-pattern> <!--根据 url-pattern 设定的规则拦截用户发来的请求 此处拦截所有请求,包括静态资源 ->
</servlet-mapping>
</web-app>
其中<servlet-mapping>标签中定义 url 匹配规则为符合*.action 的形式,对应的 servlet 名为 springMvcNext,而<servlet>配置的控制器为 org.springframework.web.servlet.DispatchServlet,该控制器为当前 SpringMVC 项目的前端控制器,<init-param>标签为当前控制器依赖的参数,两个参数分别代表上下文参数和参数加载路径。
关于 classpath:代表 web 项目编译后编译后的输出路径
配置 spring MVC 配置
在 java 源代码更目录下添加 applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.sl.controller" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
? 添加控制器 Controller 与视图 View
?
Src 目录下添加包 com.sl.controller,添加控制器代码如下:
package com.sl.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
评论