一.SpringMVC简介
1. SpringMVC框架就是Spring framework的子框架. 2. SpringMVC是一个MVC框架.主要关注点在Controller 2.1 在学习SpringMVC其实主要编写控制层代码. 3. SpringMVC是基于Front设计模式完成,是对Servlet的封装.4. 自己编写Front设计模式完成请求统一分发
@WebServlet("/demo") public class DemoServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse arg1) throws ServletException, IOException { String page = req.getParameter("page"); //分发请求. switch (page) { case "login": login(req,arg1); break; case "register": register(req,arg1); break; } } public void login(HttpServletRequest req, HttpServletResponse arg1){ } public void register(HttpServletRequest req, HttpServletResponse arg1){ } }
<a href="demo?page=login">登录</a> <a href="demo?page=register">注册</a>
文件上传解析,如果请求类型是multipart(多部分的、多重部分)将通过MultipartResolver(附件解析器)进行文件上传解析。
5. SpringMVC执行流程图
5.1 已经写好了Servlet分发器.DispatcherServlet,(类似于Front中的service方法)
如果配置DispatcherServlet的url-pattern为/时会匹配除了jsp所有请求.
5.1.1 搭建SPringMVC时需要把DispatcherServlet配置在web.xml 5.1.2 如果Servlet的url-pattern配置成/时表示除了jsp都执行该servlet http://localhost:8080/demo23/main 拦不住(要进 Servlet,方法会执行)http://localhost:8080/demo23/main.jsp 被拦住(不进Servlet)
5.2 HandlerMapping:接口,负责帮助解析请求.
例如请求为http://localhost:8080/demo23/abc,把请求最终解析为abc
5.2.1 该类没有默认值,需要手动配置下.如果SpringMVC的环境是基于注解实现需要配置DefaultAnnotationHandlerMapping的<bean>
5.3 HandlerAdapter:接口.负责根据HandlerMapping解析的结果,再去实际调用对用的方法.
(找方法上@RequestMapping(“abc”)),如果找到方法,就执行这个方法,如果没有找到方法会报404 @RequestMapping(“abc”) //解析的时候会自动加上 ‘/’ public void login(HttpServletRequest req, HttpServletResponse arg1){ } 5.3.1 如果希望HandlerAdapter生效且是基于注解实现需要配置AnnotationMethodHandlerAdapter的<bean>
5.4.1 方法返回值内容就是要跳转的资源名称.
5.5 ViewResovler:视图解析器.负责解析HandlerMethod返回值,根据返回值内容去寻找要跳转的资源.
5.5.1 不是必须配置的,SpringMVC中有默认的视图解析器,也可以手动配置.