SpringMVC

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的执行流程:

img

(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");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗着,享受着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值