重写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);
分享到:
相关推荐
当我们需要通过URL传递参数时,经常会遇到中文参数的问题。这是因为URL本身是基于ASCII编码的,不支持直接传输非ASCII字符,如中文。本篇将详细介绍如何在Servlet中处理URL传递中文参数的情况。 首先,了解URL编码...
4. **GET方式表单传递和URI方式传递参数乱码**: 对于GET请求或URL中的中文参数乱码,需要修改Tomcat服务器的配置。在`server.xml`文件中的`<Connector>`标签中添加`URIEncoding="GBK"`属性,比如: ``` ...
在开发Java Web应用程序时,尤其是使用Servlet技术时,经常遇到的一个问题是中文乱码问题。这是因为浏览器和服务器之间编码不一致导致的。以下是一份详细的指南,涵盖了如何解决Servlet中的中文乱码问题。 **一、...
尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我将详细介绍如何解决JSP向Servlet传参中文乱码的问题。 1. 确保项目文件编码统一 首先,...
request乱码是指从浏览器向Servlet传递参数时出现的乱码问题。解决方法是: request.setCharacterEncoding("UTF-8"); String username=request.getParameter("username"); username=new String(username.getBytes(...
JSP_利用Filter解决Servlet输出中文乱码的问题主要涉及以下几个核心知识点: 1. **Filter接口**:`javax.servlet.Filter`是Java Servlet API中的一部分,它提供了一种在请求到达目标Servlet或JSP之前对其进行拦截并...
其次,**传递参数中文乱码**的问题常见于HTTP请求中。例如,在Struts应用的登录界面,如果用户名或密码包含中文,未经处理,接收时可能会出现乱码。解决方案有两个方面: 1. 修改Tomcat服务器配置:在`server.xml`...
#### 三、传递参数中文乱码 在Web应用程序中,用户通过表单提交的数据经常需要传递到后台进行处理,如果表单数据中包含中文字符,则容易出现乱码问题。 **解决方法**: 1. **修改Tomcat配置**:在Tomcat的`conf/...
在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到的一个问题是中文字符在传递过程中出现乱码。这个问题主要是由于字符编码不一致导致的。在本文中,我们将深入探讨JSP页面传参出现中文乱码的原因,并提供...
2. **Servlet接收Form/Request传递的参数乱码**: 当Servlet通过`HttpServletRequest`的`getParameter()`方法获取表单数据时,如果未设置字符编码,可能会出现乱码。解决方法是在处理请求之前调用`request.set...
这样,通过ActionForm传递的中文参数就可以正常接收和处理了,有效解决了中文乱码问题。 总之,Java Web应用中的Filter是解决乱码问题的强大工具,通过对请求和响应进行适当的编码设置,可以确保数据在传输过程中的...
当Tomcat的URIEncoding为非UTF-8(如ISO-8859-1)时,如果URL中的中文参数被浏览器以UTF-8编码,Servlet容器将以ISO-8859-1解码,造成乱码。可以通过Java代码手动转换,如`new String(变量值.getBytes("UTF-8"),...
其次,**URL传递中文参数乱码**。URL本身遵循ASCII编码,不支持非ASCII字符如中文。为了解决这个问题,需要修改服务器配置。对于Tomcat,需要编辑`conf/server.xml`,在对应的HTTP Connector标签(如`...
- 对`filename`进行了编码转换,这是因为浏览器传递过来的文件名可能包含中文或其他非英文字符,需要正确地解码和编码以避免乱码问题。 5. **文件下载逻辑**: ```java @SuppressWarnings("deprecation") ...
在Java Web开发中,URL中文乱码问题是一个常见的困扰,主要出现在传递含有中文字符的参数时。本案例中,我们将探讨如何解决这个问题,涉及到的主要知识点包括URL编码、字符集转换以及在Java Servlet、JSP和Struts2...
##### 3.4 JSP页面中参数传递的乱码问题 - **解决方法**:在JSP页面中,可以通过设置请求的字符集编码来解决乱码问题:`("GBK"); %>` ##### 3.5 其他特殊场景下的乱码问题 - **在表单头部设置编码**:可以在表单...
在JSP和Servlet之间传递参数,通常通过`HttpServletRequest`对象的`getParameter()`方法获取请求参数。如果请求参数包含非ASCII字符(如中文),不正确地处理字符编码可能导致乱码问题。在Servlet中,可以通过设置`...