SpringMVC常用注解:
1:@Controller:用于标记控制器类,表示该类是可以处理HTTP请求的。
2:@RequestMapping:用于映射URL和处理方法。可以在类和方法上,类级别的@RequestMapping会对其中所有的方法进行URL映射。参数支持Ant-style路径模式,正则表达式,HTTP请求方法限定等。
3:@RequestParam:用于将请求参数绑定到处理方法的入参上。可以指定参数名,是否必须等参数。示例:@RequestMapping(name = "id",required = true)Long id
4:@PathVariable:用于将请求URL中的占位符参数绑定到处理方法的入参上。
例如:@RequestMapping("/user/{id}")public String getUserById(@PathVariable("id") Long id)
5:@ResponBody:用于将处理方法返回的对象直接作为HTTP响应体返回,常用于JSON或xml的数据。
6:@ModelAttribute:用于将请求参数绑定到模型对象上。只有在@ModelAttribute注解的方法执行完毕后,才会执行处理方法。
示例:@ModelAttribute("uesr")public User getUserById(Long id)
7:@SessionAttributes:用于将模型对象放到session作用域中,可在多个请求中共享数据。
示例:@SessionAttribute("user") public class UserController{}
SpringMVC的执行流程:
(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet; (2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器; (3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler; (4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑; (5)当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;这里的Model是返回的数据对象,View是逻辑上的View。 (6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View) (7)前端控制器DispatcherServlet将具体的视图进行渲染,渲染完成之后响应给用户(浏览器显示)。
@RestController 和 @Controller的区别
@RestController无法返回指定页面,而@Controller可以。 对于Controller, 如果只是使用@RestController注解,则其方法无法返回指定页面,此时配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是 return 里的内容。 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,@RestController自己就可以搞定,这个注解对于返回数据比较方便,因为它会自动将对象实体转换为JSON格式。而@Controller需要在对应的方法加上@ResponseBody注解。
如何解决 POST 请求和 GET 请求中文乱码问题
String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");
1:get请求的参数在请求行上,我们不能像解决post请求那样使用 request.setCharacterEncoding(“UTF-8”);这种方式是修改方法体的编码方式。
所以只能使用以上的方式分别对请求行的汉字进行编码和解码。其实解决get请求中文乱码问题最好的方式是避免使用中文。
2:对于post请求,请求中问乱码的两种解决办法,就喜闻乐见了。一般也不会有post请求参数中文乱码吧,认为任何一个java的web项目因该都配置了字符集过滤器吧。
第一种xml中配置字符集过滤器:
<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
第二种java代码设置编码为utf-8
request.setCharacterEncoding("UTF-8");