串联过滤器
来源:互联网 发布:戴森空气净化器 知乎 编辑:程序博客网 时间:2024/04/27 10:32
串联过滤器的简单示例:
第一个过滤器实现对指定iP与用户名的guolv
地隔个过滤器实现对留言部分的内容的部分词语的过滤与替换
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>NoteFilter</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>noteFilter</filter-name> <filter-class>mypack.NoteFilter</filter-class> <init-param> <param-name>blacklist</param-name> <param-value>小调皮</param-value> </init-param> <init-param> <param-name>blockedIP</param-name> <param-value>192.168</param-value> </init-param> </filter> <filter-mapping> <filter-name>noteFilter</filter-name> <url-pattern>/note</url-pattern> </filter-mapping> <filter> <filter-name>note</filter-name> <filter-class>mypack.ReplaceTextFilter</filter-class> <init-param> <param-name>searchStr</param-name> <param-value>暴力</param-value> </init-param> <init-param> <param-name>replaceStr</param-name> <param-value>和平</param-value> </init-param> </filter> <filter-mapping> <filter-name>note</filter-name> <url-pattern>/note</url-pattern> </filter-mapping> <servlet> <servlet-name>note</servlet-name> <servlet-class>mypack.Note</servlet-class> </servlet> <servlet-mapping> <servlet-name>note</servlet-name> <url-pattern>/note</url-pattern> </servlet-mapping></web-app>
NoteFilter.java
package mypack;import java.io.IOException;import java.io.PrintWriter;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;public class NoteFilter implements Filter{private FilterConfig config;private String blacklist;private String blockedIP;@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubSystem.out.println("Filter is servicing!");if(isBlockedAddress(req,resp)) return;if(isBlackList(req,resp)) return;long before = System.currentTimeMillis();config.getServletContext().log("即将进行过滤器调用");chain.doFilter(req, resp);config.getServletContext().log("已经进行了过滤器的调用");long after = System.currentTimeMillis();String name="";if(req instanceof HttpServletRequest)name=((HttpServletRequest) req).getRequestURI();config.getServletContext().log("NoteFilter :"+name+"花费了"+(after-before)+"ms");}private boolean isBlackList(ServletRequest req, ServletResponse resp) throws IOException {// TODO Auto-generated method stubString username = req.getParameter("username");if(username!=null)username=new String(username.getBytes("ISO-8859-1"),"utf-8");if(username!=null&&username.indexOf(blacklist)!=-1){resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("<h1>"+username+"对不起您没有权限留言</h1>");writer.flush();return true;}return false;}private boolean isBlockedAddress(ServletRequest req, ServletResponse resp) throws IOException {// TODO Auto-generated method stubString remoteAddr = req.getRemoteAddr();if(remoteAddr.indexOf(blockedIP)==0){resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("<h1>"+remoteAddr+"对不起您没有权限留言</h1>");writer.flush();return true;}return false;}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubSystem.out.println("Filter init() ");this.config=config;blacklist = config.getInitParameter("blacklist");blockedIP = config.getInitParameter("blockedIP");}@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("Filter is destroyed!");}}
ReplaceTextFilter.java
package mypack;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;public class ReplaceTextFilter implements Filter{private ReplaceTextWrapper textWrapper;private String searchStr;private String replaceStr;private FilterConfig config;@Overridepublic void destroy() {// TODO Auto-generated method stubconfig.getServletContext().log("Replace Text Filter destroy!");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubReplaceTextWrapper textWrapper = new ReplaceTextWrapper(resp, searchStr, replaceStr);config.getServletContext().log("begin text Filter");chain.doFilter(req, textWrapper);config.getServletContext().log("turn next Servlet");textWrapper.getOutputStream().close();}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubthis.config=config;searchStr=config.getInitParameter("searchStr");replaceStr=config.getInitParameter("replaceStr");config.getServletContext().log("Replace Text Filter init()");}}
ReplaceTextWrapper.java
package mypack;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class ReplaceTextWrapper extends HttpServletResponseWrapper{private String searchStr;private String replaceStr;private ReplaceTextStream stream;public ReplaceTextWrapper(ServletResponse response,String searchStr,String replaceStr) throws IOException {super((HttpServletResponse) response); stream=new ReplaceTextStream(response.getOutputStream(),searchStr,replaceStr);}public ServletOutputStream getOutputStream(){return stream;}}
ReplaceTextStream.java
package mypack;import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.WriteListener;public class ReplaceTextStream extends ServletOutputStream{private ServletOutputStream out;private String searchStr;private String replaceStr;private ByteArrayOutputStream buffer=new ByteArrayOutputStream();private boolean closed=false; public ReplaceTextStream(ServletOutputStream out,String searchStr,String replaceStr) {// TODO Auto-generated constructor stub this.out=out; this.searchStr=searchStr; this.replaceStr=replaceStr;} public void close() throws IOException{ if(!closed){ out.write(processStr(buffer.toByteArray())); out.close(); closed=true; } } public void flush() throws IOException{ if(!closed){ out.write(processStr(buffer.toByteArray())); buffer=new ByteArrayOutputStream(); } } public void println(String s) throws IOException{ s=s+"\n"; buffer.write(s.getBytes()); } private byte[] processStr(byte[] bytes) {// TODO Auto-generated method stub String str = new String(bytes); int index= str.indexOf(searchStr); if(index!=-1){ String subStr = str.substring(0, index); String newStr=subStr+replaceStr+str.substring(index+searchStr.length()); return newStr.getBytes(); }else{ return str.getBytes(); }}@Overridepublic boolean isReady() {// TODO Auto-generated method stubreturn out.isReady();}@Overridepublic void setWriteListener(WriteListener listener) {// TODO Auto-generated method stub}@Overridepublic void write(int b) throws IOException {// TODO Auto-generated method stub}}Note.java
package mypack;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Note extends HttpServlet{ @Override public void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html;charset=utf-8");ServletOutputStream out = resp.getOutputStream();out.println("<html><head>留言薄<title></title></head><body>");String username = req.getParameter("username");if(username!=null)username=new String(username.getBytes("ISO-8859-1"),"utf-8");String content = req.getParameter("content");if(content!=null)content=new String(content.getBytes("ISO-8859-1"),"utf-8");if(username!=null)out.println("<p>"+username+"留言为:"+content+"</p>");out.println("<form action="+req.getContextPath()+"/note method='POST'>");out.println("姓名:<input type=text size=10 name=username /><br>");out.println("留言:<textarea name=content rows=5 cols=10></textarea><br><br>");out.println("<input type=submit value='提交'/>");out.println("</form></body></html>"); }}
0 0
- 串联过滤器
- servlet filter的串联过滤器执行原理
- 串联电阻
- 串联电阻
- 筛选 串联
- 知识串联
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- 过滤器
- ShellExecute
- java爬虫爬取的html内容中空格( )变为问号“?”的解决方法
- SpringMVC中静态方法调用非静态方法
- Android中利用NetworkInfo判断网络状态时出现空指针(NullPointerException)问题解决
- 自学笔记①Zmain.c中主函数main:二
- 串联过滤器
- leetcode-41. First Missing Positive
- 20个常用的正则表达式
- GANs学习系列(6):条件生成式对抗网络Conditional Generative Adversarial Networks
- 常用公共js
- 符合需求的润乾报表展示时的等待提示
- sparse data clustering with infinite-norm
- .net发送邮件源码
- jsonp(跨域请求)案例