解决Servlet中处理GET请求乱码问题
来源:互联网 发布:js通过标签名获取元素 编辑:程序博客网 时间:2024/05/02 01:16
一、乱码原因
①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。
②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)
二、解决办法
方法一 每次传输都手动设置编码(GET方式传输数据) 传输方
String name = URLEncoder.encode("张三","UTF-8"); String path = "http://localhost:8008/xyWeb/xyServlet?name=" + name;
接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
若传输方默认采用UTF-8编码就没有必要每次写,但接收方每次都写太烦,可考虑过滤器。
方法二(过滤器)
/** - 编码过滤器 - - @author xy - */ public class EncodingFilter implements Filter { private String encoding; public void init(FilterConfig fConfig) throws ServletException { encoding = fConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception { HttpServletRequest httprequest = (HttpServletRequest) request; if ("GET".equals(httprequest.getMethod())) { // 将httpRequest进行包装 EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httprequest, encoding); chain.doFilter(wrapper, response); } else { request.setCharacterEncoding(encoding); response.setContentType("text/html;charset=" + encoding); chain.doFilter(request, response); } } public void destroy() { } } /** - httpRequest进行包装类 - - @author xy - */ public class EncodingHttpServletRequest extends HttpServletRequestWrapper { private HttpServletRequest request; private String encoding; public EncodingHttpServletRequest(HttpServletRequest request) { super(request); this.request = request; } public EncodingHttpServletRequest(HttpServletRequest request,String encoding) { super(request); this.request = request; this.encoding = encoding; } @Override public String getParameter(String name) { String value = request.getParameter(name); if (null != value) { try { // tomcat默认以ISO8859-1处理GET传来的参数。把tomcat上的值用ISO8859-1获取字节流,再转换成UTF-8字符串 value = new String(value.getBytes("ISO8859-1"), encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return value; } }
<filter> <display-name>EncodingFilter</display-name> <filter-name>EncodingFilter</filter-name> <filter-class>cn.xy.filter.EncodingFilter</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>
方法三:修改Tomcat容器的编码
默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:<
Connector port=”8080” protocol=”HTTP/1.1” connectionTimeout=”20000”
redirectPort=”8443” /> 这段代码规定了Tomcat监听HTTP请求的端口号等信息。
可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。
修改完成后:< Connector port=”8080” protocol=”HTTP/1.1”
connectionTimeout=”20000” redirectPort=”8443” URIEncoding=”UTF-8” />
0 0
- 解决Servlet中处理GET请求乱码问题
- Servlet处理get请求中文乱码问题
- servlet处理get请求时的中文乱码问题
- Servlet处理get请求时中文乱码问题
- Java中解决Servlet获取请求(GET/POST)数据时数据乱码问题
- servlet中post与get请求中文乱码解决
- servlet中post和get请求乱码问题
- 解决Servlet中get或post中文乱码问题
- 解决Get和Post请求中中文乱码问题
- 解决Get和post请求中中文乱码问题
- 解决Sping Mvc中post、get请求中文乱码问题
- 解决springMVC中Get请求乱码的问题
- 解决servlet中文乱码问题及get、post请求方式的讲解
- get请求传递中文,解决乱码问题
- 解决Get请求中文乱码的问题
- GET请求中文乱码问题--已解决
- 如何解决GET请求中文乱码问题?
- 解决get请求中文乱码问题
- 对于父类的私有属性,子类是从哪里访问到的?
- Android Art Hook 技术方案
- nginx php问题集
- 折半查找(二分法)
- 使用游标更新和删除数据
- 解决Servlet中处理GET请求乱码问题
- ffmpeg AVRational结构体介绍
- Linq查询的简单使用
- java与xml之DOM创建和解析XML文档
- hibernate中criteria的用法
- 构造方法探析
- HTML基础课程笔记
- python 实现 knn分类算法 (Iris 数据集)
- 配置python tab键自动补全