Request获取请求数据

Request 获取请求数据

// 请求行部分
String getMethod()								// 获取请求方式
String getContextPath()							// 获取项目访问路径				/request-demo
StringBuffer getRequestURL()					// 获取 URL 统一资源定位符		http://localhost:8080/request-demo/req1
String getRequestURI()							// 获取 URI 统一资源标识符		/request-demo/req1
String getQueryString()							// 获取请求参数(Get 方式)		username=zhangsan&password=123

// 请求头部分
String getHeader(String name)		// 根据请求头名称, 获取值

// 请求体部分 (Post 才有)
// 通过 流读取 来获取 Post请求的参数
ServletInputStream getInputStream()		// 字节输入流
BufferedReader getReader()				// 字符输入流

对于 请求参数,Get 和 Post 的获取方式不同

Request通用方式获取请求参数

Request对象里封装好了一个 Map集合,Map集合里放的就是所有的参数
在这里插入图片描述

Map<String,String[]> getParameterMap()					// 返回这个 Map 集合
String[] getParameterValues(String name)				// 根据 键名 获取值
String getParameter(String name)						// 根据 键名 获取值
        Map<String, String[]> map = req.getParameterMap();
        for(String key : map.keySet()){
            System.out.print(key + ":");

            String[] values = map.get(key);
            for(String value : values){
                System.out.print(value + " ");
            }

            System.out.println();
        }

关于 中文乱码问题

在这里插入图片描述
表单通过 get 提交时,参数直接体现在 url 中,此时没有发生乱码

        String name = req.getParameter("username");
        System.out.println(name);						// 小城市堵车

表单通过 post 提交时,参数在请求体中,此时发生了乱码

        String name = req.getParameter("username");
        System.out.println(name);						// å°åŸŽå¸‚å µè½¦

post获取参数乱码解决

由于 post 底层是通过 BufferedReader getReader() 来获取参数的,所以解决 post 乱码,可以通过
设置字符输入流的编码集:
用指定的编码集去覆盖request对象中默认的"ISO-8859-1"编码集,这样就会用新的编码集去解码这些字节

req.setCharacterEncoding("UTF-8")			

另,如果是 getReader 这种方式,则需要 使用 URLDecoder.decode

        BufferedReader reader = req.getReader();
        String s = reader.readLine();
        String s1 = URLDecoder.decode(s, "utf8");
        System.out.println(s1);			// username=张三
// 如果不用 URLDecoder的话, 返回的是 username=%E5%BC%A0%E4%B8%89
// 原因不详

request的setCharacterEncoding问题
getReader读取Post请求体乱码问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值