包装设计模式解决JavaWeb开发中全站中文乱码问题
来源:互联网 发布:mac bash 3.2解除密码 编辑:程序博客网 时间:2024/06/05 00:32
这里借助过滤器来实现一个过滤全站资源的功能
- 第一步要在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
- 包装设计模式解决JavaWeb开发中全站中文乱码问题
- javaWeb解决中文乱码问题
- javaWeb解决中文乱码问题
- 巧妙解决JavaWeb开发中中文乱码问题
- javaweb开发中的中文乱码问题,使用Filter过滤器解决
- javaweb开发中文乱码问题
- javaWeb利用Filter解决中文乱码问题
- javaWeb中解决中文乱码问题
- 八.javaweb之解决中文乱码问题
- JavaWeb 04 解决中文乱码问题
- JavaWeb 解决超链接参数中文乱码问题
- 解决JavaWeb项目中文乱码问题
- javaweb解决中文乱码
- JavaWeb开发中的中文乱码问题
- JavaWeb中文乱码问题
- javaWeb中文乱码问题
- javaweb 中文乱码问题
- javaweb中文乱码问题
- ORACLE IMPDP导入提示ORA-01918:user‘XX’ does not exist
- effective java观后感(3)-------第八章
- Java基础--标识符号
- awk 计算 uv
- listview
- 包装设计模式解决JavaWeb开发中全站中文乱码问题
- zxing扫描添加闪光灯和自定义扫描识别框,修改识别区域
- 日期格式转换
- react 前端开发 list表缺少分割线的解决方法
- Ubuntu使用出现的问题汇总
- 三种数据库连接池的配置及使用(For JDBC)
- activemq的HA架构(master/slave)
- matlab-SVM学习记1
- swift3 实现键盘弹出视图上移