`
tianyalinfeng
  • 浏览: 444347 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Servlet取A标签传递的中文参数乱码

 
阅读更多

重写request对象

public class CustomHttpServletRequest extends HttpServletRequestWrapper {
 protected Logger logger = Logger.getLogger(CustomHttpServletRequest.class);

 private static final String ENCODED = "UTF-8", DECODE = "ISO8859-1";

 public CustomHttpServletRequest(HttpServletRequest request) {
  super(request);
 }

 @Override
 public String getQueryString() {
  String queryString = super.getQueryString();
  if (queryString != null) {
   try {
    return new String(queryString.getBytes(DECODE), ENCODED);
   } catch (UnsupportedEncodingException e) {
    logger.info(e.getMessage(), e);
   }
  }
  return queryString;
 }

 @Override
 public String getParameter(String name) {
  String value = super.getParameter(name);
  if (value != null) {
   try {
    return new String(value.getBytes(DECODE), ENCODED);
   } catch (UnsupportedEncodingException e) {
    logger.info(e.getMessage(), e);
   }
  }
  return value;
 }

 @SuppressWarnings("unchecked")
 @Override
 public Map getParameterMap() {
  Map<String, String[]> values = super.getParameterMap();
  Map<String, String[]> valuesMap = new HashMap<String, String[]>();
  Set<String> names = values.keySet();
  for (Iterator<String> iter = names.iterator(); iter.hasNext();) {
   String name = iter.next();
   String[] v = values.get(name);
   if (v != null) {
    String[] valuesCopy = new String[v.length];
    for (int i = 0; i < v.length; i++) {
     try {
      valuesCopy[i] = new String(v[i].getBytes(DECODE),
        ENCODED);
     } catch (UnsupportedEncodingException e) {
      logger.info(e.getMessage(), e);
     }
    }
    valuesMap.put(name, valuesCopy);// 向新Map放入转码过的值
   }
  }
  return valuesMap;// 返回是副本
 }

 @Override
 public String[] getParameterValues(String name) {
  String[] values = super.getParameterValues(name);
  if (values != null) {
   String[] valuesCopy = new String[values.length];// 原数组是只读的,不能修改
   for (int i = 0; i < values.length; i++) {
    try {
     valuesCopy[i] = new String(values[i].getBytes(DECODE),
       ENCODED);
    } catch (UnsupportedEncodingException e) {
     logger.info(e.getMessage(), e);
    }
   }
   return valuesCopy;
  }
  return values;
 }
}

 

servlet里使用

H2WHttpServletRequest request = new H2WHttpServletRequest(req);

分享到:
评论

相关推荐

    servlet url传递中文参数

    当我们需要通过URL传递参数时,经常会遇到中文参数的问题。这是因为URL本身是基于ASCII编码的,不支持直接传输非ASCII字符,如中文。本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码...

    JSP页面中文乱码几个解决办法

    4. **GET方式表单传递和URI方式传递参数乱码**: 对于GET请求或URL中的中文参数乱码,需要修改Tomcat服务器的配置。在`server.xml`文件中的`&lt;Connector&gt;`标签中添加`URIEncoding="GBK"`属性,比如: ``` ...

    解决Servlet中文乱码问题.docx

    在开发Java Web应用程序时,尤其是使用Servlet技术时,经常遇到的一个问题是中文乱码问题。这是因为浏览器和服务器之间编码不一致导致的。以下是一份详细的指南,涵盖了如何解决Servlet中的中文乱码问题。 **一、...

    jsp传参 servlet接收中文乱码问题的解决方法

    尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我将详细介绍如何解决JSP向Servlet传参中文乱码的问题。 1. 确保项目文件编码统一 首先,...

    Servlet中文乱码问题解决方案解析

    request乱码是指从浏览器向Servlet传递参数时出现的乱码问题。解决方法是: request.setCharacterEncoding("UTF-8"); String username=request.getParameter("username"); username=new String(username.getBytes(...

    JSP_利用Filter解决Servlet输出中文乱码的问题.docx

    JSP_利用Filter解决Servlet输出中文乱码的问题主要涉及以下几个核心知识点: 1. **Filter接口**:`javax.servlet.Filter`是Java Servlet API中的一部分,它提供了一种在请求到达目标Servlet或JSP之前对其进行拦截并...

    STRUTS ActionForm乱码,servlet全局过滤器转义编码。

    其次,**传递参数中文乱码**的问题常见于HTTP请求中。例如,在Struts应用的登录界面,如果用户名或密码包含中文,未经处理,接收时可能会出现乱码。解决方案有两个方面: 1. 修改Tomcat服务器配置:在`server.xml`...

    处理中文乱码

    #### 三、传递参数中文乱码 在Web应用程序中,用户通过表单提交的数据经常需要传递到后台进行处理,如果表单数据中包含中文字符,则容易出现乱码问题。 **解决方法**: 1. **修改Tomcat配置**:在Tomcat的`conf/...

    JSP页面传参出现中文乱码的解决方案

    在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到的一个问题是中文字符在传递过程中出现乱码。这个问题主要是由于字符编码不一致导致的。在本文中,我们将深入探讨JSP页面传参出现中文乱码的原因,并提供...

    java中文乱码.pdf

    2. **Servlet接收Form/Request传递的参数乱码**: 当Servlet通过`HttpServletRequest`的`getParameter()`方法获取表单数据时,如果未设置字符编码,可能会出现乱码。解决方法是在处理请求之前调用`request.set...

    Filter中文乱码问题.doc

    这样,通过ActionForm传递的中文参数就可以正常接收和处理了,有效解决了中文乱码问题。 总之,Java Web应用中的Filter是解决乱码问题的强大工具,通过对请求和响应进行适当的编码设置,可以确保数据在传输过程中的...

    中文乱码解决方案.pdf

    当Tomcat的URIEncoding为非UTF-8(如ISO-8859-1)时,如果URL中的中文参数被浏览器以UTF-8编码,Servlet容器将以ISO-8859-1解码,造成乱码。可以通过Java代码手动转换,如`new String(变量值.getBytes("UTF-8"),...

    JSP中文乱码问题完全处理方案.docx

    其次,**URL传递中文参数乱码**。URL本身遵循ASCII编码,不支持非ASCII字符如中文。为了解决这个问题,需要修改服务器配置。对于Tomcat,需要编辑`conf/server.xml`,在对应的HTTP Connector标签(如`...

    基于servlet的文件下载代码

    - 对`filename`进行了编码转换,这是因为浏览器传递过来的文件名可能包含中文或其他非英文字符,需要正确地解码和编码以避免乱码问题。 5. **文件下载逻辑**: ```java @SuppressWarnings("deprecation") ...

    解决url中文乱码.doc

    在Java Web开发中,URL中文乱码问题是一个常见的困扰,主要出现在传递含有中文字符的参数时。本案例中,我们将探讨如何解决这个问题,涉及到的主要知识点包括URL编码、字符集转换以及在Java Servlet、JSP和Struts2...

    java web开发解决乱码问题

    ##### 3.4 JSP页面中参数传递的乱码问题 - **解决方法**:在JSP页面中,可以通过设置请求的字符集编码来解决乱码问题:`("GBK"); %&gt;` ##### 3.5 其他特殊场景下的乱码问题 - **在表单头部设置编码**:可以在表单...

    jsp-servlet

    在JSP和Servlet之间传递参数,通常通过`HttpServletRequest`对象的`getParameter()`方法获取请求参数。如果请求参数包含非ASCII字符(如中文),不正确地处理字符编码可能导致乱码问题。在Servlet中,可以通过设置`...

Global site tag (gtag.js) - Google Analytics