1.是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架
(1)即使用了MVC架构模式的思想,将web层进行职责解耦
(2)基于请求驱动指的就是使用请求-响应模型
<1>与之相反的是基于组件的、事件驱动的Web框架,如Tapestry、JSF等
<2>在Web应用中充当控制层(Controller)的角色,对请求进行分发处理
(3)框架的目的就是帮助简化开发
2.SpringMVC组件及作用:
(1)前端控制器DispatcherServlet(不需要程序员开发)
<1>接收请求,响应结果,相当于转发器,中央处理器
<2>有了DispatcherServlet减少了其它组件之间的耦合度
(2)处理器映射器HandlerMapping(不需要程序员开发)
<1>根据请求的url查找Handler
(3) 处理器适配器HandlerAdapter(不需要程序员开发)
<1>按照特定规则(HandlerAdapter要求的规则)去执行Handler
(4)处理器Handler(需要程序员开发)
<1>编写Handler时按照HandlerAdapter的要求去做
<2>这样适配器才可以去正确执行Handler
(5)视图解析器ViewResolver(不需要程序员开发)
<1>进行视图解析,根据逻辑视图名解析成真正的视图(view)
(6) 视图View(需要程序员开发jsp)
<1>View是一个接口,实现类支持不同的View类型(jsp、freemarker)
注意事项:
(1):不需要程序员开发的,需要程序员自己做一下配置即可
(2)需要开发的工作只有处理器 Handler的编写以及视图比如JSP页面的编写
3.SpringMVC组件的配置与使用
(1)配置前端控制器(DispatcherServlet)
<1>在web project的web.xml中配置
(2)配置处理器映射器(HandlerMapping)
<1>在 springmvc.xml 文件中配置
<2>就是请求的 URL 怎么能被 SpringMVC 识别,从而去执行编写好的Handler
(3)配置处理器适配器(HandlerAdapter)
<1>在 springmvc.xml 文件中配置
<2>用来约束所需要编码的Handler类
(4)开发处理器(Handler,即我们的Controller)
<1>在 springmvc.xml 文件中配置
<2>就是请求的URL到这里所编写的Handler类的某个方法进行一些业务逻辑处理
<3>在上面讲解了两个处理器适配器来约束Handler,那么就通过上面两种配置分别编写两个Handler
3.1.实现Controller 接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelView = new ModelAndView();
modelView.setViewName("/WEB-INF/jsp/index.jsp");
return modelView;}}
3.2.实现 HttpRequestHandler 接口
public class HelloController2 implements HttpRequestHandler {
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("name", "harvey");
request.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(request, response);}}
3.3.通常使用第一种方式来编写 Handler
(5)配置视图解析器(ViewResolver)
<1>在 springmvc.xml 文件中配置
(6)DispatcherServlet.properties
<1>SpringMVC 给提供了一个 DispatcherServlet.properties 文件
<2>系统会首先加载这里面的配置,如果没有配置,那么就默认使用这个文件的配置
<3>如果我们配置了,那么就优先使用我们手动配置的
<4>DispatcherServlet.properties中默认配置如下:
①、处理器适配器默认:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
②、处理器映射器默认:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
③、视图解析器默认:org.springframework.web.servlet.view.InternalResourceViewResolver
4.SpringMVC工作流程
(1)用户发送请求至前端控制器DispatcherServlet
(2)DispatcherServlet收到请求调用HandlerMapping处理器映射器
(3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)
(4)生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
(5)DispatcherServlet调用HandlerAdapter处理器适配器
(6)HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
(7)Controller执行完成返回ModelAndView
(8)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
(9)DispatcherServlet将ModelAndView传给ViewReslover视图解析器
(10)ViewReslover解析后返回具体View
(11)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
(12)DispatcherServlet响应用户
5.SpringMVC常用注解及其作用
(1)@Controller:标识这个类是一个控制器
(2)@RequestMapping:给控制器方法绑定一个uri
(3)@ResponseBody:将java对象转成json,并且发送给客户端
(4)@RequestBody:将客户端请求过来的json转成java对象
(5)@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射
(6)@PathVarible:用于获取uri中的参数,比如user/1中1的值
6.Rest风格的新api
(1)@RestController相当于@Controller+ @ResponseBody
(2)@GetMapping@DeleteMapping@PostMapping@PutMapping
7.其他注解
(1)@SessionAttribute:声明将什么模型数据存入session
(2)@CookieValue:获取cookie值
(3)@ModelAttribute:将方法返回值存入model中
(4)@HeaderValue:获取请求头中的值
8.注意事项
(1)SpringMVC集成了Ajax
(2)支持Restful风格
(3)springmvc是单例模式的框架,但它是线程安全的
<1>springmvc没有成员变量,所有参数的封装都是基于方法的
<2>属于当前线程的私有变量
<3>是线程安全的框架,所以效率高