码迷,mamicode.com
首页 > 其他好文 > 详细

过滤器和包装类设计模式的应用

时间:2014-06-27 08:59:35      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:java   过滤器   包装类设计模式   

1.中文乱码过滤器。get和set中文字体的设置

public class AllCharacterEncodingFilter implements Filter {
	private FilterConfig filterConfig;
	
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
	}
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		//获取配置的过滤器参数encoding的值:如果没有,给定一个默认值
		String encoding = filterConfig.getInitParameter("encoding");
		if(encoding==null)
			encoding = "UTF-8";
		//设置POST请求方式的中文请求参数的编码
		request.setCharacterEncoding(encoding);
		//设置响应输出时的编码:字符流和字节流
		response.setCharacterEncoding(encoding);//字节流输出时通知客户端的解码码表
		response.setContentType("text/html;charset="+encoding);//字节流输出时通知客户端的解码码表;字符流:字符流输出时使用的码表及通知客户端解码用的码表
		
		MyHttpServletRequest mrequest = new MyHttpServletRequest(request);
		//放行
		chain.doFilter(mrequest, response);
	}

	public void destroy() {

	}
}
//使用包装类设计模式
//HttpServletRequestWrapper内部的代码与连接池原理中那个默认适配器一样
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;
	}	
}

2.脏话过滤器

public class DirtyWordsFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		DirtyWordsHttpServletRequest drequest = new DirtyWordsHttpServletRequest(request);
		chain.doFilter(drequest, response);
		
	}

	public void init(FilterConfig filterConfig) throws ServletException {

	}
}
class DirtyWordsHttpServletRequest extends HttpServletRequestWrapper{
	private String words[] = {"傻B","畜生","禽兽"};
	public DirtyWordsHttpServletRequest(HttpServletRequest request){
		super(request);
	}
	@Override
	public String getParameter(String name) {
		String value = super.getParameter(name);
		if(value==null)
			return "木有";
		for(String dword:words){
			if(value.contains(dword)){//判断用户输入的内容中包含脏话
				value = value.replace(dword, "**");
			}
		}
		return value;
	}	
}


3.  HTML特殊标记过滤器

//HTML标记过滤器:<   <
public class HtmlFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		HtmlHttpServletRequest hrequest = new HtmlHttpServletRequest(request);
		chain.doFilter(hrequest, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {

	}

}
class HtmlHttpServletRequest extends HttpServletRequestWrapper{
	public HtmlHttpServletRequest(HttpServletRequest request){
		super(request);
	}

	@Override
	public String getParameter(String name) {
		String value = super.getParameter(name);
		if(value==null)
			return value;
		value = htmlFilter(value);//完成标记过滤
		return value;
	}

	private String htmlFilter(String message) {
		if (message == null)
            return (null);

        char content[] = new char[message.length()];
        message.getChars(0, message.length(), content, 0);
        StringBuffer result = new StringBuffer(content.length + 50);
        for (int i = 0; i < content.length; i++) {
            switch (content[i]) {
            case '<':
                result.append("<");
                break;
            case '>':
                result.append(">");
                break;
            case '&':
                result.append("&");
                break;
            case '"':
                result.append(""");
                break;
            default:
                result.append(content[i]);
            }
        }
        return (result.toString());
	}
	
}


web.xml中配置

<filter>
		<filter-name>AllCharacterEncodingFilter</filter-name>
		<filter-class>cn.itcast.filter.AllCharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>GBK</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>AllCharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter>
		<filter-name>DirtyWordsFilter</filter-name>
		<filter-class>cn.itcast.filter.DirtyWordsFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>DirtyWordsFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>HtmlFilter</filter-name>
		<filter-class>cn.itcast.filter.HtmlFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>HtmlFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter>

过滤器和包装类设计模式的应用,布布扣,bubuko.com

过滤器和包装类设计模式的应用

标签:java   过滤器   包装类设计模式   

原文地址:http://blog.csdn.net/ankeyuan/article/details/34980233

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!