1、MVC
模型(dao、service)、视图(jsp)、控制器(servlet)
2、SpringMVC
基于java实现的MVC轻量级Web框架
DispatcherServlet执行原理(狂神说java笔记):
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
简要分析执行流程
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
- 我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
- 如上url拆分成三部分:
- http://localhost:8080服务器域名
- SpringMVC部署在服务器上的web站点
- hello表示控制器
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
-
HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
-
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
-
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
-
Handler让具体的Controller执行。
-
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
-
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
-
视图解析器将解析的逻辑视图名传给DispatcherServlet。
-
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
-
最终视图呈现给用户。
使用注解开发
annotationDrivern(封装了处理器映射器、处理器适配器)、视图解析器
- 配置DispatcherServlet,映射spring配置文件
- spring配置文件配置:
- <context:component-scan base-package=“com.yangs.controller” /> 扫描包
- <mvc:default-servlet-handler /> 处理器
- <mvc:annotation-driven /> 注解驱动
- spring配置文件中配置视图解析器:
- InternalResourceViewResolver
- 前缀 prefix:/WEB-INF/jsp/
- 后缀 suffix:.jsp
- 使用注解@Controller 声明控制器,配置@RequestMapping(“/hello”)映射访问路径,如果返回的类型是String(return “hello”),且存在对应界面文件(hello.jsp),j就会被视图解析器解析,跳转具体页面。
@ResponseBody 不会返回视图解析器,直接返回String
RestFul风格
资源定位及资源操作风格
优点:
- 简洁:http://localhost:8080/add/1/2(原来的:http://localhost:8080/add?a=1&b=2)
- 高效:支持缓存
- 安全:不会暴露参数变量名
@PathVariable 将参数映射到URL中
@PostMapping
@GetMapping
重定向和转发
- 无需视图解析器
转发:
return “/WEB-INF/jsp/test.jsp”
return “forward:/WEB-INF/jsp/test.jsp”
重定向:
return “redirect:/WEB-INF/jsp/test.jsp” - 有视图解析器
转发:return “test”
重定向:return “redirect:/test”
数据处理
- 提交的参数名和方法中定义用于接收前端的参数名一致时
http://localhost:8080/user/t1?name=xxx - 提交的参数名和接收前端的参数名不一致时,使用@RequestParam(“tname”)
- 前端接收的是一个对象
- 对象属性和表单提交的一致时,可以直接使用
乱码问题解决
配置SpringMVC过滤器Filter
JSON
Jackson
- 导包
- 配置乱码处理 annotation-driven
- 创建一个ObjectMapper对象
- 调用writeValueAsString,返回字符串
FastJson
- 导包
- JSON对象的方法使用
Ajax技术
实现前后端分离,JQuery
拦截器
- 编写拦截器,实现HandlerInterceptor接口
- 配置拦截器<mvc:interceptor />