package com.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;
/**
* 前端设置request编码
* @
*/
public class EncodingFilter implements Filter
{
static org.apache.log4j.Logger logger=Logger.getLogger(EncodingFilter.class);
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig pArg0) throws ServletException
{
}
public void doFilter(ServletRequest pRequest,ServletResponse response,FilterChain pArg2) throws IOException,ServletException
{
logger.info("前端设置request编码");
HttpServletRequest request=(HttpServletRequest)pRequest;
String queryString=request.getQueryString();
String encoding=getParameter(queryString,SYSConstant.ENCODING_PARAM_NAME);
if(encoding==null)
{
encoding="UTF-8";
}
pRequest.setCharacterEncoding(encoding);
logger.debug("encoding:"+encoding);
pArg2.doFilter(request,response);
}
/**
* 从request中读出param的值,不考虑编码问题
* @param request
* @param pParamName
* @param pEncoding
* @return
*/
public String getParameter(String queryString,String pParamName)
{
logger.info("从request中读出param的值,不考虑编码问题");
String[] paramPairs=StringHelper.split(queryString, '&');
for(int i=0;i<paramPairs.length;i++)
{
int indexEquals=paramPairs[i].indexOf('=');
if(indexEquals!=-1)
{
String name=paramPairs[i].substring(0,indexEquals);
if(name.equalsIgnoreCase(pParamName))
{
String value=paramPairs[i].substring(indexEquals+1);
return value;
}
}
}
return null;
}
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy()
{
}
}
分享到:
相关推荐
JavaEE Filter全局编码过滤器是Java企业版(JavaEE)中的一个重要组件,它在Web应用程序中扮演着数据处理和预处理的角色。Filter是Java Servlet规范的一部分,允许开发者在请求到达Servlet之前或者响应离开Servlet...
在Java代码中,我们可以自定义过滤器类继承`javax.servlet.Filter`,然后在`doFilter`方法中设置请求的字符编码。例如: ```java public void doFilter(ServletRequest request, ServletResponse response, ...
在上面的JSP页面中,我们设置了页面的字符编码为GB2312,并使用request.getParameter()方法读取参数。如果过滤器正确地设置了字符编码,那么中文字符将被正确地读取。 使用过滤器解决request中文乱码问题是JSP中...
创建一个名为`Filtercode`的过滤器,该过滤器会设置请求和响应的编码为UTF-8。过滤器代码如下: ```java package com.jin.servlet; import java.io.IOException; import javax.servlet.Filter; import javax....
标题和描述中提到的问题——"JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题",是由于对HTTP协议的理解不足以及不正确的编码设置导致的。下面将详细解释这个问题...
在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...
例如,登录验证、字符编码转换、权限控制等任务都可以在过滤器中完成。以下是一个简单的过滤器实现示例: ```java public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest...
本项目"javaWeb项目 filter练习"主要关注了两个核心的应用场景:编码过滤和登录过滤。下面将详细介绍这两个方面的内容。 **编码过滤** 在Web应用中,数据从客户端传输到服务器时,可能会遇到编码不一致的问题,导致...
在Java Web开发中,字符编码过滤器(Character Encoding Filter)起着至关重要的作用。它确保了请求和响应数据在处理过程中使用一致的字符编码,从而避免乱码问题。本篇文章将详细探讨Java过滤器(Filter)的概念,...
在Web开发中,编码过滤器(Encoding Filter)是一种常见的技术,用于处理HTTP请求中的编码问题,确保数据在传输过程中的正确性。标题“编码过滤器”直指这一关键概念,而描述“配置在web.xml中的过滤器,支持过滤GET...
基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法 在基于tomcat8 的Web应用程序中,字符编码问题是常见的问题之一。特别是在处理POST请求时,中文字符可能会出现乱码的情况。为了解决这个问题,我们可以...
### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...
这段代码展示了如何通过Filter设置字符编码。首先尝试从Filter配置中获取字符集参数,如果没有则使用默认值。接着设置请求和响应的字符集,并将请求传递下去。 #### 2. 控制浏览器缓存 有时候,我们需要控制浏览器...
- **字符编码转换**:统一处理请求和响应的编码问题。 - **日志记录**:记录请求信息,便于调试和分析。 - **缓存处理**:对静态资源进行缓存,减少服务器压力。 - **GZIP压缩**:压缩HTTP响应,减少网络传输的数据...
总结来说,使用Filter解决中文乱码问题是一种有效的方法,通过在请求处理链的早期设定合适的字符编码,可以避免因为编码不一致而导致的乱码问题。`CharacterEncodingFilter`的实现及其在`web.xml`中的配置是实现这一...
JavaWeb中的Filter接口是实现编码过滤的关键。Filter是Servlet API的一部分,可以拦截HTTP请求和响应,进行预处理和后处理。在创建编码过滤器时,我们需要实现Filter接口并重写doFilter方法。在这个方法中,我们可以...
- **Servlet中设置请求编码**:通过`request.setCharacterEncoding("gb2312")`设置请求编码。 - **Servlet响应设置**:通过`response.setContentType("text/html;charset=gb2312")`设置响应编码。 - **HTML头部...
编码过滤器的实现通常基于`javax.servlet.Filter`接口。下面,我们来看一个简单的`EncodingFilter`的实现: ```java import javax.servlet.*; import java.io.IOException; public class EncodingFilter ...
在处理请求时,Filter可以通过调用`chain.doFilter(request, response)`来将控制权传递给下一个Filter或目标资源。如果Filter选择不继续处理,可以直接修改响应并返回给客户端,或者使用`RequestDispatcher`或`...