包装设计模式解决JavaWeb开发中全站中文乱码问题

来源:互联网 发布:mac bash 3.2解除密码 编辑:程序博客网 时间:2024/06/05 00:32

这里借助过滤器来实现一个过滤全站资源的功能

  1. 第一步要在web.xml中配置一点小东东:
<filter>    <filter-name>AllCharacterEncodingFilter</filter-name>    <filter-class>cn.filter.AllCharacterEncodingFilter</filter-class>    <init-param>        <param-name>encoding</param-name>        <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>AllCharacterEncodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

2.写filter类:

import java.io.IOException;import java.io.UnsupportedEncodingException;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;import javax.servlet.http.HttpServletResponse;public class AllCharacterEncodingFilter implements Filter {    private FilterConfig filterConfig;    @Override    public void init(FilterConfig filterConfig) throws ServletException {        this.filterConfig = filterConfig;    }    @Override    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletResponse response = (HttpServletResponse)resp;        HttpServletRequest request = (HttpServletRequest)req;        /*步骤:        1、获取配置的过滤器参数encoding的值:如果没有,给定一个默认值        2、设置POST请求方式的中文请求参数的编码        3、设置响应输出时的编码:字符流和字节流        4、字节流输出时通知客户端的解码码表        5、字节流输出时通知客户端的解码码表;字符流:字符流输出时使用的码表及通知客户端解码用的码表        6、最后别忘了放行*/        String encoding = filterConfig.getInitParameter("encoding");        if(encoding==null)            encoding="UTF-8";        request.setCharacterEncoding(encoding);        response.setCharacterEncoding(encoding);        response.setContentType("text/html;character="+encoding);        chain.doFilter(request, response);    }    @Override    public void destroy() {    }}//HttpServletRequestWrapper是一个实现了HttpServletRequest接口的包装器类class MyHttpServletRequest extends HttpServletRequestWrapper{    public MyHttpServletRequest(HttpServletRequest request){        super(request);    }    //这里只对get请求方式进行改写    public String getParameter(String name){        String value = super.getParameter(name);        if(value==null)            return value;        //得到请求方式        String method = super.getMethod();        if("get".equalsIgnoreCase(method)){            try {                value = new String(value.getBytes("ISO-8859-1"),super.getCharacterEncoding());            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }        }        return value;    }}

3.小结:

  • 包装设计模式的两种编码步骤:
    • 第一种情况
      • 被包装类有实现的接口的情况
      • 1、编写一个类,实现与包装器类相同的接口
      • 2、定义一个变量,记住被包装器对象的引用
      • 3、定义构造方法,注入被包装对象的引用
      • 4、对于要改写的方法,写你的代码
      • 5、对于不需要改写的方法,调用原有对象的对应方法
    • 第二种情况
      • 被包装类没有实现接口的情况(上面例子中的MyHttpServletRequest类就属于此种情况)
      • 1、编写一个类,继承被包装类
      • 2、定义一个变量,记住被包装对象的引用
      • 3、定义构造方法,注入被包装对象的引用
      • 4、对于要改写的二分法,写你的代码
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝设置登录密码原密码忘了怎么办 斑马智行淘宝号换没法登录了怎么办 淘宝卖家手机版显示宝贝不全怎么办 在电脑上登的淘宝账号退不了怎么办 淘宝买家退款不退货写假货怎么办 淘宝卖家已发布商品没货了怎么办 京东换货附近没有京东自提点怎么办 一直显示手机淘宝已停止运行怎么办 唯品会买了不可以退货的衣服怎么办 淘宝店卖东西邮费太贵怎么办 支付宝登录上去必须手机验证怎么办 支付宝里的钱被盗了怎么办 淘宝绑定的支付宝账号忘记了怎么办 支付宝绑定的微博账号忘记了怎么办 怎么知道自己的淘宝密码忘了怎么办 更换扣扣头像图片太大放不下怎么办 每次登入淘宝都要手机验证码怎么办 手机停机收不到唯品会验证码怎么办 魅蓝手机账户密码忘了怎么办 支付宝登录失败请稍后再试怎么办 万王之王3d限制注册了怎么办 绑定手机号无法登陆以前微信怎么办 手机号注册了淘宝如果不用了怎么办 淘宝网登陆要手机验证码怎么办 手机清理了微信图片打不开了怎么办 到淘宝网买东西卖家拒绝退货怎么办 淘宝店铺检测出他人认证图片怎么办 文件过大无法复制到u盘怎么办 淘宝账号上不去总说网络不好怎么办 手机上登录微信一直闪退怎么办 京东账号手机号换了登陆不了怎么办 对方账号停止收款我们汇了款怎么办 淘宝店铺严重违规被扣12分怎么办 中国网银登陆不会自动弹出怎么办 高考报考的时候页面无法显示怎么办 如果卖家收到货不退款怎么办 淘宝退货卖家收到货不退款怎么办 手机号码淘宝被注册跟换绑定怎么办 微信发送ppt显示文件太大怎么办 微信手机号丢了微信登不了钱怎么办 新买的号码注册过支付宝怎么办