第四章 请求数据传入 Filter顺序

SpringMVC 模型数据概述

输入数据模型

利用下面的代码从网页传递username到客户端 因为是get请求 接受也是get请求 ?又符合get请求
默认方式获取请求参数:

  • 直接给方法入参上写一个和请求参数名相同的变量,这个变量就来接受请求参数的值 带:有值 不带:没值null

@RequestParam("username") --> ?user=admin

  • value("username") 也就是key
  • required =false
  • defaultValue 也就是?后没有值 没有值默认为defaultValue指定的 也就是value

@PathVariable("username") 路径/{username} 获取路径中的值

《a href="requ?username=tomcat" >点击《/a>
@RequestMapping("requ")
    public String getBook(String username ) {
        System.out.println("getusername:"+username);
        return "hello";
    }
    public String getBook(@RequestParam("username")String user ) {
//user = request.getParameter("username")
          System.out.println("getusername:"+username);
        return "hello";
    }

图片说明

@RequestHeader:获取请求头中某个key的值

  • request.getHeader("User-Agent");
  • required = false 可以不带
  • defaultValue 可以传入默认值
    @RequestMapping("requ")
    //User-Agent 需要是http请求的关键词 如果没找到就会报错
      public String getBook(@RequestHeader("User-Agent") String userAgent) {
          System.out.println("userAgent:"+userAgent);
          return "hello";
          //userAgent:Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko
      }

Cookie 能带key-Value对

  • 旧方式获取
    request.getCookies()//获取所有Cookies
    for(Cookie c:cookies){
     ... equal("JSONID")
    }
  • 新方式 @CookieValue
    required = false 可以不带
    defaultValue 可以传入默认值
    @Controller
    public class MyController {
      @RequestMapping("requ")
      public String getBook(@CookieValue(value = "JSESSIONID" ,required = false,defaultValue = "空值") String cookie) {
          System.out.println("cookie:"+cookie);
          return "hello";
      }
    }

使用POJO-Spring

  • 如果我们请求参数是一个POJO
    将POJO种的每一个属性,从request参数种尝试获取出来,并封***r>还可以级联封装 属性的属性
    《%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8" isErrorPage="true" %>
      《% %>
    《html>
    《body>
    《h2>Hello World!《/h2>
    《/body>
    《form action="pojo">
      《input type="text" name="bookName" value="javaee">
      《input type="text" name="bookValue" value="98.9">
      《input type="text" name="person.name" value="cznczai">
      《input type="text" name="person.age" value="12">
      《input type="submit" name="提交">
    《/form>
    《/html>
    @RequestMapping("/pojo")
      public String getBook(Book book) {
          System.out.println("book:"+book);
          return "hello";
      }
    public class Book {
      private Person person;
      private String bookName;
      private Double bookValue;
    }
    public class Person {
      private String name;
      private Integer age;
    }
    图片说明

传入原生API

  • httpSession (以前是通过request获取)
  • HttpServletRequest
  • HttpServletResponse
    @RequestMapping("requ")
      public String getBook(HttpSession session , HttpServletRequest request,HttpServletResponse response) {
          session.setAttribute("session", "我是session");
          request.setAttribute("request","我是request");
          return "hello";
      }
    jsp:
    ${requestScope.request}
    ${sessionScope.session}
    图片说明
    request.getInputStream(); 请求流
    response.geteOutputStream()
    request.getReader();
    response.getWriter();

乱码

  • 需要看看是请求乱码还是响应乱码
    请求:
    • get请求 改server.xml tomcat8.0以上 处理了get请求的编码
      <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
      图片说明
    • POST:在第一次获取请求参数之前设置 request.setCharacterEncoding("UTF-8")
    • 利用filter 需要springmvc的包 底层也是request.setCharacterEncoding("UTF-8")
      <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
      <!--forceEncoding 默认是false 顺手解决响应编码-->
            <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>
      图片说明

响应:response.setContentType("text/html;charset=utf-8")

Filter同时配置配置的时候
理由 设置编码后才获取参数 如果先获取参数在设置编码 没法解决编码问题

  • 编码(CharacterEncodingFilter 编码的) 先
    图片说明
  • Rest(HiddenHttpMethodFilter 编码的) 后
    获取参数
    图片说明
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务