JavaWeb 中乱码过滤器的代码
来源:互联网 发布:板式床 品牌 知乎 编辑:程序博客网 时间:2024/04/27 17:25
思路:使用装饰类包装request请求
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class EncodeFilter implements Filter {private FilterConfig config = null;private ServletContext context = null;private String encode = null;public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//响应乱码解决response.setCharacterEncoding(encode);response.setContentType("text/html;charset=utf-8");chain.doFilter(new MyHttpServletRequest((HttpServletRequest)request), response);//利用装饰设计模式,改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题}public void init(FilterConfig filterConfig) throws ServletException {this.config = filterConfig;this.context = filterConfig.getServletContext();this.encode = context.getInitParameter("encode");}/** * 装饰者模式 * @author windows * */class MyHttpServletRequest extends HttpServletRequestWrapper{//被装饰者private HttpServletRequest request = null;private boolean isNotEncode = true;public MyHttpServletRequest(HttpServletRequest request) {super(request);this.request = request;}@Overridepublic String getParameter(String name) {return getParameterValues(name)==null?null:getParameterValues(name)[0];}@Overridepublic Map<String, String[]> getParameterMap() {try {if(request.getMethod().equalsIgnoreCase("POST")){request.setCharacterEncoding(encode);return request.getParameterMap();}else if(request.getMethod().equalsIgnoreCase("GET")){Map<String, String[]> map = request.getParameterMap();if (isNotEncode) {for (Map.Entry<String, String[]> entry : map.entrySet()) {String[] vs = entry.getValue();for (int i = 0; i < vs.length; i++) {vs[i] = new String(vs[i].getBytes("iso-8859-1"),encode);}}isNotEncode = false;}return map;}else{return request.getParameterMap();}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}@Overridepublic String[] getParameterValues(String name) {// TODO Auto-generated method stubreturn getParameterMap().get(name);}}}
0 0
- JavaWeb 中乱码过滤器的代码
- javaweb中使用过滤器解决乱码问题
- javaweb 过滤器的应用解决乱码问题
- JavaWeb中使用过滤器来解决中文乱码问题
- javaweb中Filter(过滤器)的常见应用
- JavaWeb中关于过滤器的总结
- javaweb中乱码的问题
- JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
- JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
- JavaWeb---过滤器的配置
- JavaWeb的Filter过滤器
- JavaWeb 过滤器的使用
- Javaweb的过滤器
- Java中乱码的解决方法--过滤器
- javaWeb中BaseServlet的代码
- JavaWeb中常见的乱码处理(亲测)
- JavaWeb中使用PrintWriter乱码的解决方法
- JavaWeb中关于请求乱码的讲解
- 快速开发BACnet产品之二 (关于BACnetLib类结构的说明)
- qt 嵌入 sdl
- 零钱兑换问题
- ZOJ_1204_Additive equations
- bfcache往返缓存
- JavaWeb 中乱码过滤器的代码
- javascript的事件总结
- DIV+CSS中标签dl dt dd常用的用法
- 工厂模式
- DaoUtil
- Maven详解
- 数据库中的左连接(left join)和右连接(right join)区别
- 设置C# Windows 服务与桌面交互
- MD5Util