1、列举SpringMVC的常用注解及作用
@Controller
该注解用于标记在一个类上,使用它标记的类就是一个SpringMVC的Controller对象。用于分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解。@Controller 注解只是定义了一个控制器类,而使用 @RequstMapping 注解的方法才是真正处理请求的处理器。
@RequestMapping
该注解是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有方法的请求都是以该地址作为父路径的。
@Resource 和 @Autowired
这两个注解都是做 bean 的注入时使用的,实际上 @Resource 并不是 Spring 的注解,它的包是 javax.annontation.Resource,需要导入;但是Spring支持该注解的注入。
@PathVariable
该注解用于将请求 URL 中的模板变量映射到功能处理方法的参数上,即取出 url 模板中的变量作为参数。
@CookieValue
该注解用于获取Cookie 中的值;该注解有以下属性:value:参数名称;required:是否必须;defaultValue:默认值。
@RequestParam
该注解用于将请求参数区的数据映射到功能处理方法的参数上。
@ResponseBody
该注解用于将 Controller 的方法返回的对象通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区。使用在,返回的数据不是 html 标签的页面,而是某种格式的数据,例如 json、xml 等。
@RequestBody
该注解用于获取请求体的内容
2、SpringMVC 的流程
1.客户端请求提交到DispatcherServlet
2.DispatcherServlet接收到请求后、将提交的信息交给处理器映射器(HandlerMapping)
3.HandlerMapping根据用户的url请求、匹配该url的Handler(Controller),并返回一个执行链
4.DispatcherServlet调用HandlerAdapter(处理器适配器)
5.HandlerAdapter经过适配调用具体的处理器(Controller)扫描
6.Controller扫描完成后返回一个ModelAndView
7.HandlerAdapter将Controller扫描结果(ModelAndView)返回给DispatcherServlet
8.DispatcherServlet将ModelAndView请求试图解析器(ViewReslover)进行解析
9.ViewReslover解析后返回具体的View给前端控制器DispatcherServlet
10.DispatcherServlet将view进行渲染试图(即将模型数据填充到视图中)
11.DispatcherServlet将页面响应给个用户
3、@RestController 和 @Controller的区别
区别:
- @Controller标识是一个Spring类是Spring MVC controller处理器。
- @RestConroller是@Controller+ @ResponseBody的结合直接添加在类的上面,表示返回一个String类型的对象
4、如何解决 POST 请求和 GET 请求中文乱码问题
解决post请求乱码问题:
在Servlet中调用request.getParameter()方法,执行下面代码
1、解决post中文乱码,将tomcat解析HTTP协议body体编码设置为UTF-8
2、request.setCharacterEncoding("UTF-8");
3、response.setCharacterEncoding("UTF-8");
解决get请求乱码问题:
GET提交时,参数是采用HTTP协议head传递,因此request.setCharacterEncoding()对get无效。需要手动编码转换。
1、String name = request.getParameter("name");
2、//将name采用UTF-8转码
3、name = new String(name,getBytes("ISO-8859-1"),"UTF-8");