1、什么是Spring mvc?
Spring MVC: 它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。
SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。
2、Spring MVC的组件:
1、 前端控制器 DispatcherServlet
作用: 接收请求、响应结果 相当于转发器
有了DispatcherServlet 就减少了其它组件之间的耦合度
2、 处理器映射器HandlerMapping
作用: 根据请求的URL来查找Handler
3、 处理器适配器HandlerAdapter
作用: 按照特定的规则(HandlerAdapter要求的规则)去执行Handler
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler
4、 处理器Handler
5、 视图解析器 View Resolver
作用: 进行视图的解析 根据视图逻辑名解析成真正的视图(view)
6、 视图View
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf。。。)
3、SpringMVC工作流程原理图:
SpringMVC流程:
1、 用户发送请求至前端控制器 DispatcherServlet。
2、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3、 处理器映射器 HandlerMapping 找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
4、 DispatcherServlet 调用 HandlerAdapter 处理器适配器。
5、 HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回 ModelAndView。
7、 HandlerAdapter 将controller执行结果 ModelAndView 返回给 DispatcherServlet。
8、 DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
9、 ViewReslover 解析后返回具体View。
10、DispatcherServlet 根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet 响应用户。
4、案例
1、导入相关jar包:
2、web.xml文件配置
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-servlet.xml
springmvc
/
3、创建配置文件spring-servlet.xml文件,名称可以自定义。并配置处理器和映射器。
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.xsd">
4、创建自定义Controller
/**
* 自定义控制器
* 必须实现Controller接口
* @author 叶小陌
*
*/
public class UserController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("本方法被调用了...");
ModelAndView view = new ModelAndView();
view.setViewName("/index.jsp");
return view;
}
}
5、测试效果
------------------------------------------------华丽分割线------------------------------------------------
5、使用注解方式
1、修改配置文件开启注解
2、配置如下
在spring-servlet.xml文件中配置:
3、Controller中使用注解:
@Controller
public class HelloController {
@RequestMapping("/h1")
@ResponseBody
public void hello(Integer id, String name, String address, String[] hobby) {
for (String string : hobby) {
System.out.println(string);
}
}
@RequestMapping("/h2")
@ResponseBody
public void user(User user) {
System.out.println(user);
}
}