文章目录
1、SpringMVC简介
1、概述
SpringMVC是一种基于Java实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已融合在Spring Web Flow中
SpringMVC已经成为最主流的MVC框架之一,通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口,同时还支持RESTful编程风格的请求
2、开发步骤
- 导入SpringMVC相关依赖
- 配置SpringMVC核心控制器DispatcherServlet
- 创建Controller类和页面视图
- 使用注解配置Controller类中业务方法的映射地址:@RequestMapping("/pattern")
- 配置SpringMVC核心文件spring-mvc.xml
- 客户端发起请求测试
1、pom.xml导入SpringMVC相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
2、web.xml配置SpringMVC核心控制器DispatcherServlet、及spring-mvc.xml位置
<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:spring-mvc.xml</param-value>
</init-param>
<!-- 应用启动时就加载Servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3、创建Controller类和页面视图
@Controller
public class UserController {
//4、使用注解配置Controller类中业务方法的映射地址
@RequestMapping("/quick")
public String save(){
System.out.println("Controller save running...");
return "success.jsp";
}
}
success.jsp
<h1>Success!</h1>
5、配置SpringMVC核心文件spring-mvc.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">
<!-- Controller组件扫描-->
<context:component-scan base-package="com.heima.controller"/>
</beans>
2、SpringMVC相关组件、注解
- 前端控制器:DispatcherServlet
- 处理器映射器:HandlerMapping
- 处理器适配器:HandlerAdapter
- 处理器:Handler
- 视图解析器:ViewResolver
- 视图:View
1、SpringMVC执行流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有),一并返回给DispatcherServlet
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
- Controller执行完后返回ModelAndView
- HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewResolver视图解析器
- ViewResolver解析后返回具体View
- DispatcherServlet根据View进行渲染视图(即将数据模型填充至视图中),响应用户
2、SpringMVC注解解析
-
@RequestMapping:用于建立请求url和处理请求方法之间的对应关系
- 类上:请求url的第一级访问目录,此处如果不写则相当于应用根目录
- 方法上:请求url的第二级访问目录,与类上的使用**@RequestMappin**g标注的一级目录一起组成访问虚拟路径
属性:
-
value:指定请求的URL,和path属性的作用是一样的
-
method:指定请求的方式,RequestMethod.GET、RequestMethod.POST
-
params:指定限制请求参数的条件,支持简单的表达式,要求请求参数的key和value必须和配置的一模一样。例如:
params = {“accountName”},表示请求参数中必须有accountName
params={“money!100”},表示请求参数中money不能是100
@Controller
@RequestMapping("/user")
public class UserController {
// 请求地址:http://ip:端口号/web工程名/user/quick
@RequestMapping(value = "/quick",method = RequestMethod.GET)
public String save(){
System.out.println("Controller save running...");
return "/success.jsp";
}
}
3、SpringMVC组件扫描
Controller组件扫描可以使用包扫描,spring-mvc.xml下
<context:component-scan base-package="com.heima.controller"/>
也可以使用包下注解类型的扫描,下例为只扫描com.heima包下带有@Controller注解的类,Spring容器
<context:component-scan base-package="com.heima">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
4、SpringMVC的XML配置解析
1、视图解析器
SpringMVC有默认组件配置,默认组件配置在DispatcherServlet.properties配置文件中,org.springframework.web.servlet/DispatcherServlet.properties,该文件配置的默认视图解析器如下
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
查看该解析器源码,可以看到该解析器默认设置如下
public static final String REDIRECT_URL_PREFIX = "redirect:"; //重定向前缀
public static final String FORWARD_URL_PREFIX = "forward:"; //请求转发前缀(默认值)
private String prefix = ""; //视图名称前缀
private String suffix = ""; //视图名称后缀
可以在spring-mvc.xml中配置视图解析器前后缀
<!-- 配置内部资源视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
这样在Controller中return “success”; 视图解析器就会解析并请求转发到 项目名称/jsp/success.jsp 去