文章目录
1 SpringMVC开发步骤
SpringMVC开发步骤
1,导入SpringMVC相关jar包
2,配置SpringMVC核心控制器DispathcerServlet(前端控制器)
每个来自浏览器的请求都会先经过核心控制器
3,编写Controller类和视图页面
4,将Controller使用注解配置到Spring容器中
使用RequestMapping注解配置方法映射
5,建立SpringMVC的核心配置文件spring-mvc.xml并配置组件扫描
1,导入SpringMVC相关jar包
<!-- spring-webmvc核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
2,配置SpringMVC核心控制器DispathcerServlet
<!-- 配置Spring-MVC的前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 标明spring-mvc.xml的位置 -->
<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类和视图页面
4,将Controller使用注解配置到Spring容器中
@Controller
public class UserController {
// 被调用后 通过返回值可以直接跳转到success.jsp页面
@RequestMapping("/start")
public String save() {
System.out.println("Controller -- save");
return "success.jsp";
}
}
5,建立SpringMVC的核心配置文件spring-mvc.xml并配置组件扫描
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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.coisini.controller"></context:component-scan>
</beans>
在浏览器地址栏输入/start后:
控制台打印了相关数据:
成功跳转到了success.jsp页面:
整个过程经过的阶段:
在地址栏输入/start后,Tomcat接收到请求后,将先将请求交给前端控制器,前端控制器查找拥有/start的Controller,将请求交给该Controller,/start映射的方法是save(),执行目标Controller中的save()方法,完成业务并返回页面
2 SpringMVC的组件解析
2.1 SpringMVC的执行流程
1,用户发送请求到前端控制器DispatcherServlet
2,DispatcherServelt收到请求调用HandleMapping处理器映射器
3,处理器映射器找到具体的处理器(可以根据xml配置,注解进行查找)
生成处理器对象以及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
4,DispatcherServlet调用HandlerAdapter处理器适配器
5,HandlerAdapter经过适配调用具体的处理器(Controller,也称后端控制器)
6,Controller执行完后返回ModelAndView
7,HandlerAdapter将ModelAndView返回给DispatcherServlet
8,DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9,ViewReslover解析具体View
10,DispatcherServlet根据View进行渲染视图(将模型数据填充到视图中)
11,DispatcherServelt相应用户
2.2 SpringMVC中的注解
SpringMVC中首先用到的注解:@Controller和@RequestMapping
1,@Controller即该类将被创建成一个Bean存储在Spring容器中,与@Component功能相同,只是在语义上拥有@Controller注解的类意味着该类是用于Web层的Bean
2,@RequestMapping的作用是建立请求URL和处理请求方法之间的对应关系,如在浏览器中输入了/start,某个方法MethodA拥有@RequestMapping("/start")注解,则该请求最终将由MethodA处理
@RequestMapping注解不但可以作用于方法上,还可以作用于类上,上述代码直接作用到了方法上,即该方法对应的请求地址就是http://localhost:8080/start,即在浏览器地址输入http://localhost:8080/start就能请求到该方法
如果在类上增加@RequestMapping注解,值为xxx,则该方法对应的请求地址就是http://localhost:8080/xxx/start,即浏览器地址输入http://localhost:8080/xxx/start就能请求到该方法,注意返回资源的路径问题
这样作的意义就是当/start有多个时,通过更详细的url来准确定位,如xxx可以是user,product,address等
此外,@RequestMapping注解还有几个属性:
1,value: 用于指定请求的URL,只有一个属性可以省略
2,method: 用于指定请求的方式GET/POST
3,params: 用于指定限制请求参数的条件,支持简单的表达式
要求请求参数的key和value必须和配置的一样
如params = {"accountName"} 表示请求参数必须有accountName
params = {"moeny!100"} 表示请求参数中money不能是100
@RequestMapping使用示例:
@Controller
@RequestMapping(value = "user")
public class UserController {
// 被调用后 通过返回值可以直接跳转到success.jsp页面
@RequestMapping(value = "/start", method = RequestMethod.GET, params = {"userName"})
public String save() {
System.out.println("Controller -- save");
return "/success.jsp";
}
}
2.3 SpringMVC的组件扫描
SpringMVC需要和Spring一起使用,在xml文件中使用标签配置组件扫描的包,Spring的配置文件applicationContext.xml和SpringMVC的spring-mvc.xml各自独立,Spring扫描除Web层外的所有Bean,SpringMVC扫描所有Controller类:
2.4 spring-mvc.xml的配置
SpringMVC用到了很多组件,有些组件有默认设置可以不配置直接使用,但也可以在spring-mvc.xml文件中重新配置一些组件,使得项目的开发和维护更简单
如现在将success.jsp页面放到了新的目录jsp下,此时就需要修改返回值,新的url需要定位到项目下的jsp目录下的success.jsp页面:
现在可以在spring-mvc.xml文件中配置一个内部资源视图解析器,简化返回值的写法:
有了默认的前缀和后缀,返回视图时,返回值会变为"/jsp/" + success + “.jsp”: