1.服务器端三层架构
表现层(SpringMVC),业务层(Spring),持久层(Mybatis)
2.MVC模型
Model(JavaBean对象),View(视图,JSP展示),Controller(控制器Servlet)
3.SpringMVC与Struts2框架区别
都是表现层框架,都是MVC模型,底层都是ServletAPI。
Struts2的核心控制器是Filter,SpringMVC核心控制器是Servlet。
SpringMVC基于方法单例,Struts基于类多例。MVC效率高点
Struts的OGNL表达式开发效率更高
4.SpringMVC流程:三大组件:HandlerMapping, HandlerAdapter, ViewResolver
简要分析执行流程
1.DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
如上url拆分成三部分:
http://localhost:8080服务器域名
SpringMVC部署在服务器上的web站点
hello表示控制器
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
2.HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
3.HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
4.HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
5.HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
6.Handler让具体的Controller执行。
7.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
8.HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
10.视图解析器将解析的逻辑视图名传给DispatcherServlet。
11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
12.最终视图呈现给用户。
使用注解:
1.@RequestMapping
作用类:URL一级目录 ,需要以/开头
作用方法:二级目录
属性:
value和path:URL路径,两者效果一样
method:用于指定的请求方式 eg. method = {RequestMethod.POST, RequestMethod.GET}
params: 限制请求行中参数条件 eg. params ={"username"}必须要有username ; params = {"username=hehe"}请求行中必须要有username=hehe;
headers:发送的请求中必须包含的请求头。
等价于对应方法
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
2.请求参数绑定
参数传入:直接在Controller方法中作为参数传入. eg. public int test(String username, String password)
JavaBean传入:先创建util类,直接在Controller中传入该类. eg. public int test(User user). 会自动传入
集合传入:P171
原生ServletAPI对象传入: public int test(HttpServletRequest req, HttpServletResponse res)
3.@RequestParams
如果jsp传入的是name不是username
4.@RequestBody
获取请求体,GET不适用,因为只有POST可用。获取请求体所有内容
5. @PathVarible
基于REST风格URL
@Controller
public class RestFulController {
//映射访问路径
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable int p2, Model model){
int result = p1+p2;
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "结果:"+result);
//返回视图位置
return "test";
}
}
6.@CookieValue
7.@ModelAttribute
放在方法上:会先执行
8.@SessionAttribute
1.post请求的中文乱码问题:
在web.xml中配置filter标签
2.自定义类型转换器
eg. date类无法自动转换2010-11-11,只能自动转换2010/11/11。只能自定义类型转换器实现Converter接口并在xml配置
3.基于HiddentHttpMethodFilter的
https://blog.csdn.net/xiangminlu/article/details/105680357