【SpringMVC 笔记】3、获取请求参数

1.如何获取请求参数

 * 默认方式:给方法参数写一个和请求参数名相同的变量,这个变量就用来接收请求参数的值
            <a href="handle01?username=tomcat">参数请求1</a></br>
            ===>  public String handle01(String username)

* @RequestParam:
      public String handle02(@RequestParam("user") String username)
      * 等价于 username=request.getParameter("user")

  @RequestParam的属性: 
  * value:指定要获取的参数的key
  * required:这个参数是否是必须的
  * defaultValue:给参数设置默认值

  @RequestParam与@PathVariable("id")的区别:
  * @PathVariable是路径中的占位符: @RequestMapping("/hello/{id}")
  * @RequestParam获取的是?后面参数的值

*@RequestHeader:获取请求头中某个key的值
            @RequestHeader("User-Agent") String head
            * 等价于head=request.getHeader("User-Agent")

    @RequestHeader的属性和@RequestParam一致!!

* @CookieValue:获取某个Cookie的值
           @CookieValue("JSESSIONID")
           * 等价于Cookie[] cookies=request.getCookies();
                  for(Cookie c:cookies){
                    if(c.getName().equals("JSESSIONID")){
                       c.getValue();
                    }
                  }
@RequestMapping("/handle01")
public String handle01(String username, @RequestHeader("User-Agent") String head, @CookieValue("JSESSIONID") String cookie){
    System.out.println("参数:"+username);
    System.out.println("请求头:"+head);
    System.out.println("cookie:"+cookie);
    return "success";
}

@RequestMapping("/handle02")
public String handle02(@RequestParam(value="user",defaultValue = "请求没有带参数") String username){
    System.out.println("参数:"+username);
    return "success";
}
@RequestMapping("/handle03")
public String handle03(@RequestParam(value="user",required = false,defaultValue = "请求没有带参数") String username){
    System.out.println("参数:"+username);
    return "success";
}

2.如何从页面发起PUT、DELETE请求(浏览器只支持POST、GET请求),SpringMVC提供了对REST风格的支持

  • SpringMVC中有一个HiddenHttpMethodFilter:把普通的请求转化为规定形式的请求
  • 如何发送其他形式的请求?
    创建一个post表单,设置参数_method的值为delete或者put,即设置想要转化的请求
注意:在高版本的tomcat中,REST支持会出现异常

解决方案:在跳转页面jsp中加入isErrorPage="true"
        <%@page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8" isErrorPage="true"%>
<filter>
  <filter-name>hiddenHttpMethodFilter</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>hiddenHttpMethodFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

3.乱码解决:CharacterEncodingFilter

  • 在web.xml配置一个字符编码的Filter:CharacterEncodingFilter
 <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <!--encoding:指定解决POST请求乱码-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>

    <!--解决响应乱码-->
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
注意:
多个filter的情况下,按filter配置顺序进行拦截,所以一般将字符编码filter放在其他filter前面,否则会失效。
(characterEncodingFilter在第一次获取参数时有效)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值