博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
get请求乱码问题
阅读量:4036 次
发布时间:2019-05-24

本文共 3299 字,大约阅读时间需要 10 分钟。

全局范围的处理方法:

/**

 * 
 */
package com.hsrj.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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 *
 * @创建日期  2015-1-4
 * 
 */
public class FilertServletEncond extends HttpServlet implements Filter{
Logger logger = LoggerFactory.getLogger(FilertServletEncond.class.getSimpleName());
protected String encoding = "";    
private FilterConfig config;
private String charset = "UTF-8";
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
 String charset = config.getServletContext().getInitParameter("charset");  
       if( charset != null && charset.trim().length() != 0)
       {
        this.charset = charset;
       }
}
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
*  javax.servlet.ServletResponse, javax.servlet.FilterChain)
*  处理页面传值乱码问题
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.err.println("doFilter 拦截器.............." );
HttpServletResponse httpresp=(HttpServletResponse)response;
HttpServletRequest httpreq=(HttpServletRequest)request;
httpresp.setContentType("text/html; charset=UTF-8");
httpresp.setHeader("Cache-Control","no-cache");
httpresp.setHeader("Pragma","no-cache");//向下版本兼容
httpreq.setCharacterEncoding(charset);
httpresp.setCharacterEncoding(charset);
if(httpreq.getMethod().equalsIgnoreCase("get"))  
       {  
httpreq = new GetHttpServletRequestWrapper(httpreq,"UTF-8");  
       }  
         
       System.out.println("----请求被"+config.getFilterName()+"过滤");  
       //传递给目标servlet或jsp的实际上时包装器对象的引用,而不是原始的HttpServletRequest对象  
          chain.doFilter(request, response);
       
          System.out.println("----响应被"+config.getFilterName()+"过滤");
}
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#destroy()
*/
@Override
public void destroy() {
charset = null;
config = null;
        System.out.println(config.getFilterName()+"被销毁");
}
}

/**

 * 
 */
package com.hsrj.filter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
 * @创建日期  2015-1-21
 * 
 * get请求解决乱码
 * 
 */
public class GetHttpServletRequestWrapper extends HttpServletRequestWrapper{
private String charset = "UTF-8";  
 
    public GetHttpServletRequestWrapper(HttpServletRequest request) {  
        super(request);  
    }  
  
    /** 
     * 获得被装饰对象的引用和采用的字符编码 
     * @param request 
     * @param charset 
     */  
    public GetHttpServletRequestWrapper(HttpServletRequest request,  
            String charset) {  
        super(request);  
        this.charset = charset;  
    }  
  
    /** 
     * 实际上就是调用被包装的请求对象的getParameter方法获得参数,然后再进行编码转换 
     */  
    public String getParameter(String name) {  
        String value = super.getParameter(name);  
        value = value == null ? null : convert(value);  
        return value;  
    }  
  
    public String convert(String target) {  
        System.out.println("编码转换之前:" + target);  
        try {  
            return new String(target.trim().getBytes("ISO-8859-1"), charset);  
        } catch (UnsupportedEncodingException e) {  
            return target;  
        }  
    }  
  
}

转载地址:http://pfjdi.baihongyu.com/

你可能感兴趣的文章
yuv420 format
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
arm-linux开机读取硬件时钟,设置系统时钟。
查看>>
交叉编译在x86上调试好的qt程序
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
opencv test code-1
查看>>
eclipse 导入先前存在的项目
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>