servlet请求参数的编码处理

请求参数的编码处理基本上必须分post与get的情况来说明。

1、post请求参数的编码处理

  如果客户端没有在Content—Type标头中设置字符编码信息(例如浏览器可以设置Content—Type:text/html;chartset=UTF-8),此时可以使用HttpServletRequest的getCharacterEncoding()返回值回事null。在这种情况下,容器默认的编码处理是ISO-8859-1。而客户端使用UTF-8发送非ASCII字符的请求参数,Servlet直接使用getParamets()等方法取得该请求参数,就会是不正确的结果也就是得到乱码。

  可以使用HttpServletRequest的setCharacterEncoding()方法指定取得Post请求参数时使用的编码。例如,若浏览器以UTF-8来发送请求,则接收时也使用UTF-8编码字符串,则可以在取得任何请求值之前,执行以下语句:

  req.setCharacterEncoding("UTF-8");

2、get请求参数的编码处理

  在HttpServletRequest的API文件中,对setCharacterEncoding()的说明清楚提到:Overrides
the name of the character encoding used in the body of this request.

  也就是说,这个方法对于请求Body中的字符编码才有作用,也就是基本上这个方法只对Post产生作用,当请求是用get发送时,则没有定义这个方法是否会影响Web容器处理编码的方式(究其原因,是因为处理URL的是HTTP服务器,而非Web容器)。

  可以使用以下执行语句:

  String name =
req.getParameter("name");

  String name = new String
(name.getBytes("IS0-8859-1"),"UTF-8");

时间: 2024-12-29 23:35:43

servlet请求参数的编码处理的相关文章

请求参数获取+编码问题

参数获取的方法: 如果表单是采用get方法提交,这时候可以使用 1.request.getQueryString();//直接获取到uri后面的所有内容,不方便分离参数. 2.request.getParameter("名称");//通过表单属性的名称来获取值 request.getParameterNames();//获取表单属性中所有的名称 如果表单是采用post方法提交,这时候可以使用 1.request.getInputStream();//直接可以获取到实体内容中的参数,不方

servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">这里不设置成中文编码无法写中文. jsp中的编码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> conte

Java Web应用请求参数编码

我们知道,当拼写要跳转的url中含有中文时,一般地需要转码处理,才能到服务器端正确的接收并处理,这是客户端与服务器端通讯时对数据格式的规约. 一般地,使用encodeURIComponent或者encodeURI来处理中文参数(这两者的区别,以及和escape的区别后面再说),编码后,在客户端,成为ISO-8859-1数据格式,一般表现在URL上为%XX这种形式的. var url = "hello.do?person=" + encodeURIComponent("小明&q

js处理url中的请求参数(编码/解码)

在处理 a 链接跳转其他页面时,总会遇到需要传递一些当前页面的信息到其他页面,然后其他页面利用这些信息进行相关操作.利用 get 请求或 hash 传递是常见的方式. 首先,需要对传递的参数进行编码,保证数据的安全性:之后,将参数拼接到要跳转的url后,并设置为 a 链接中的 href 属性值. var util = { setUrlParam: function (params, targetUrl) { var url = ''; if(params && targetUrl){ //

4、处理方法中获取请求参数、请求头、Cookie及原生的servlet API等

1.请求参数和请求头 使用@RequestParam绑定请求参数,在处理方法的入参处使用该注解可以把请求参数传递给请求方法 —— value :参数名 —— required : 是否必须,默认为true,表示请求参数中必须包含对应的参数,如果不存在,则抛出异常     例如: @RequestMapping(value="/param") public String testParam(@RequestParam(value="name", required=tr

android OkHttpUtils 使用JSON数据作为请求参数

如果就直接将JSON作为请求字符串,服务端会出现中文乱码.所以只需要将请求的整个JSON参数字符串编码一次,然后服务端解码一次.我这里服务端使用的servlet,下面会两段代码贴出. android: String url = customSessionSingleton.getInstance().requestBaseUrl+"AlipayInterface"; try { OkHttpUtils.post().url(url).addParams("masterPara

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量,记住被装饰对象的引用 ③定义构造方法,传入被装饰对象的实例 ④改写要修改的方法 ⑤不需要改写的方法,调用被装饰对象的原来的方法 (2)什么时候使用装饰设计模式 当我们需要对一个类进行增强的时候,增强后的类不再当前类的范畴 例如:现在有一个     Animal类     Cat和Dog都属于动物类

黑马day04 表单请求参数&amp;中文乱码分析

实验: 1.获取post以及get请求方式的参数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>param.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"

tomcat与jetty接收请求参数的区别

[场景]服务端点对点通知.A服务发起请求B服务,B同步返回接收成功:然后B开始处理逻辑:B处理完成后异步通知给A:A接收请求并处理,同步回写响应给B:完成. [先上代码]服务端(接收端)代码: 客户端(请求端)HttpUtil工具类: 客户端测试方法: [测试结论]Tomcat和jetty对于HttpServletRequest.getParameterMap()的处理不同.jetty可以直接获取到请求参数:而Tomcat获取不到.下面是Tomcat的日志: 六月 11, 2019 10:11: