SpringMVC框架的核心内容
1. SpringMVC概述
- Spring 为
展现层
提供的基于MVC 设计理念
的优秀的Web 框架
,是目前最主流的 MVC 框架之一。- Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
- Spring MVC 通过一套 MVC 注解,让
POJO
成为处理请求的控制器,而无须实现任何接口。- 支持
REST 风格
的 URL 请求。- 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
2. SpringMVC能干什么
- 天生与Spring框架集成,如:(IOC,AOP)
- 支持Restful风格
- 进行更简洁的Web层开发
- 支持灵活的URL到页面控制器的映射
- 非常容易与其他视图技术集成,如:Velocity、FreeMarker等等。
- 因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
- 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API
- 更加简单、强大的异常处理
- 对静态资源的支持
- 支持灵活的本地化、主题等解析
3. SpringMVC主要组件
DispatcherServlet
:前端控制器Controller
:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器
了,用于对请求进行处理HandlerMapping
:请求映射到处理器,找谁来处理,如果映射成功返回一个HandlerExecutiongChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器对象)ViewResolver
: 视图解析器,找谁来处理返回的页面。把逻辑视图解析为具体的View,进行这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为JSP视图LocalResolver
:本地化、国际化MultipartResolver
:文件上传解析器HandlerExceptionResolver
:异常处理器
4. SpringMVC的HelloWorld
4.1 导包
4.2 配置web.xml
4.2.1 配置SpringMVC的前端控制器(Servlet)
<!-- 1. SpringMVC 的servlet -->
<!-- SpringMVC 的思想是有一个前端控制器拦截所有请求, 并能智能派发
这个前端控制器就是一个Servlet,要在web.xml文件中配置这个Servlet来拦截所有请求
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- Servlet的初始化参数-->
<init-param>
<!-- 指定SpringMVC配置文件位置-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc-context.xml</param-value>
</init-param>
<!-- servlet 默认在用户第一次访问的时候创建并初始化, 但是如果有这个标签, 会在服务器启动的时候创建并初始化,用户访问的时候执行service方法-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 什么样的请求走这个servlet -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4.2.2 配置字符集
4.2.3 配置支持REST风格的过滤器
4.3 加入SpringMVC的配置文件
springmvc-context.xml
<!-- 扫描所有组件 -->
<context:component-scan base-package="com.lz"></context:component-scan>
<!-- 配置视图解析器, 自动拼接页面地址-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
4.4 创建一个入口页面
<a href="${pageContext.request.contextPath }/helloworld">Hello World</a>
4.5 编写处理请求的处理器
package com.lz.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @ClassName MyFirstController
* @Description: TODO
* @Author MAlone
* @Date 2020/2/10
* @Version V1.0
**/
@Controller
public class MyFirstController {
// /表示从当前项目下开始; 也可以省略,默认从当前项目开始
@RequestMapping("/hello")
public String myFirstRequest() {
//return "/WEB-INF/pages/success.jsp";
return "success";
}
}
5. HelloWorld解析
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
- DispatcherServlet将请求提交到Controller(也称为Handler)
- Controller调用业务逻辑处理后,返回ModelAndView
- DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户端