package com.syaccp.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
web.xml 配置
<!-- 字符串过滤器配置 -->
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>
com.syaccp.filter.CharacterFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*/
public class CharacterFilter implements Filter {
//编码格式
private String encoding = null;
public void destroy() {
this.encoding = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
if (httpRequest.getMethod().equals("GET")) {
request = new Request(httpRequest);
}
request.setCharacterEncoding(this.encoding);
response.setContentType("text/html; charset="+this.encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig filterconfig) throws ServletException {
this.encoding = filterconfig.getInitParameter("encoding");
}
/**
* 扩展HttpServletRequestWrapper类
*/
class Request extends HttpServletRequestWrapper {
public Request(HttpServletRequest request) {
super(request);
}
/**
* 转换由表单读取的数据的内码, 从ISO字符转到utf-8
*/
public String toChina(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, encoding);
} catch (Exception ex) {
}
return null;
}
private HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest) super.getRequest();
}
/**
* 读取参数列表,修正了中文问题 重写javax.getParameterValues,截获jsp传过来的参数并用toChina()转成中文
*/
@Override
public String[] getParameterValues(String name) {
String values[] = getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChina(values[i]);
}
}
return values;
}
@Override
public String getParameter(String name) {
// TODO Auto-generated method stub
return toChina(getHttpServletRequest().getParameter(name));
}
}
}
相关推荐
在Spring MVC框架中,字符编码问题是一个常见的挑战,尤其是在处理多国语言或者用户输入的数据时。"MySpringMVC-字符乱码处理.rar"这个压缩包文件很可能包含了关于如何在Spring MVC项目中解决字符乱码问题的相关资料...
"encoding-filter.jar"可能是一个实现了字符编码过滤器功能的Java类库,它可以被添加到J2EE应用中,自动处理字符编码转换。而"使用方法.txt"文件则可能提供了关于如何配置和使用这个过滤器的详细步骤和示例代码,以...
`SetCharacterEncodingFilter`是一个Java Servlet Filter,它的主要作用是在HTTP请求被处理之前设置请求的字符编码。通过这个过滤器,我们可以在服务器端强制设置请求的`contentType`和`characterEncoding`,防止...
源码可能是指Java过滤器(Filter)的实现,这种设计模式常用于处理HTTP请求或响应,其中就包括了字符编码的转换。工具可能指的是用来检测、转换或处理编码的软件,如Notepad++等文本编辑器,它们支持多种字符编码并...
为了确保Struts2应用能够正确处理各种字符编码,可以通过配置Servlet过滤器来统一设置字符编码规则。这种方式具有以下优势: 1. **统一性**:通过在Web应用启动时即设置好字符编码规则,可以避免后续请求处理过程中...
在Java Web开发中,字符编码过滤器(Character Encoding Filter)起着至关重要的作用。它确保了请求和响应数据在处理过程中使用一致的字符编码,从而避免乱码问题。本篇文章将详细探讨Java过滤器(Filter)的概念,...
Java字符集与编码问题在编程实践中经常遇到,尤其是在处理中文字符时。Java系统内部以UTF-8编码进行字符串运算,但字符串的初始编码则取决于操作系统的默认编码。这意味着,如果Java程序的输入、输出以及操作系统三...
字符编码是计算机处理文本的一种方式,它将字符与数字对应起来,常见的如ASCII、GBK、UTF-8等。在Web应用中,请求和响应的数据传输过程中,如果编码和解码的规则不一致,就可能导致乱码。Struts框架默认使用ISO-8859...
为了统一管理Web应用中的字符编码,可以通过自定义过滤器(Filter)来自动设置每个请求的编码。 ```java public class SetCharacterEncodingFilter implements Filter { protected String encoding = null; ...
在软件开发过程中,字符编码问题是一个常见的挑战,尤其是在涉及到多语言和跨平台交互时。`jQuery`是一个广泛使用的JavaScript库,它在与服务器进行异步通信(Ajax)时,可能会遇到编码不匹配的问题,特别是在GBK...
Filter可以帮助我们统一处理字符编码,确保所有的请求都按照预期的编码(如UTF-8)进行解码。我们可以在Filter中设置HttpServletRequest的字符编码,这样在读取请求参数时,会自动使用指定的编码进行转换。 三、...
上述代码中定义了一个名为`CharacterEncodingFilter`的过滤器类,该类实现了`Filter`接口,并在`doFilter`方法中设置了字符编码为`UTF-8`。这样,无论客户端以何种编码格式发送数据,服务器端都能按照指定的编码格式...
在Java Web开发中,中文乱码是一个常见的问题,主要涉及到字符编码的处理。本文将详细探讨如何处理Java中的中文乱码问题,特别是针对JSP页面和表单提交的情况。 首先,JSP页面中显示中文乱码通常是由于编码设置不...
这段配置表明,名为`charsetFilter`的Filter将对所有以`.do`结尾的URL请求进行过滤,对这些请求的字符编码进行设定。 最后,记得在Tomcat服务器重启后,新的Filter配置才会生效。这样,通过ActionForm传递的中文...
基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法 在基于tomcat8 的Web应用程序中,字符编码问题是常见的问题之一。特别是在处理POST请求时,中文字符可能会出现乱码的情况。为了解决这个问题,我们可以...
在这个场景下,"全局编码过滤器"是指一个专门用于处理字符编码问题的Filter,它的目的是确保所有进入和离开服务器的数据都采用统一且正确的字符编码,避免因为编码不一致导致乱码问题。 Filter的工作原理是基于请求...
在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...
当请求到达服务器时,Filter会自动设置请求和响应的字符编码,确保数据在传输过程中不发生乱码。同时,Tomcat服务器配置的`URIEncoding`确保URL中的中文字符也能正确解码。记住,根据实际项目需求,你可能需要调整...
这个功能在软件开发中广泛应用于日志记录、权限控制、数据校验、字符编码转换等多种场景。 在Java Filter的生命周期中,主要有三个关键方法: 1. `init(FilterConfig filterConfig)`: 这是Filter的初始化方法,当...
- **字符编码转换**:解决不同系统之间的编码问题。 - **性能监控**:监控请求处理时间,帮助优化性能。 总之,Filter作为一种灵活且强大的机制,极大地提高了Web应用的可维护性和可扩展性,使得开发者能够轻松地在...