Java学习日记3(过滤器)
2017-03-12 17:42
141 查看
过滤器
访问Servlet之前和之后,可以增加一些我们的业务程序,就是过滤器。执行顺序:
如何实现Filter:
编写Filter类实现javax.servlet.Filter接口
配置Filter过滤哪些Servlet
在xml配置中,哪个Filter配置在前面就先执行哪个
Xml配置:
<filter> <filter-name>logger</filter-name> <filter-class>com.oracle.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>logger</filter-name> <url-pattern>/admin/*</url-pattern>//意思是过滤admin文件夹下所有的页面 </filter-mapping>
也可以用Annotation配置,不过xml可以保证Filter的顺序。
@WebFilter("/admin/*")
一个简单的Filter:
package com.oracle; 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 FirstFilter implements Filter { FilterConfig fc; @Override public void destroy() { System.out.println("FirstFilter......destroy..........."); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("FirstFilter......dofilter..........."); System.out.println("执行目标Servlet之前。。。。。。。。。。。。。。。。。"); arg2.doFilter(arg0, arg1);//把当前请求响应交给下一个目标,这里执行下一个Filter或者是目标Servlet。 System.out.println("执行目标Servlet之后。。。。。。。。。。。。。。。。。。"); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("FirstFilter......init..........."); this.fc=arg0; } }
再写另一个过滤器。。
package com.oracle; 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; import javax.servlet.annotation.WebFilter; //@WebFilter("/admin/*") public class LoggerFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("Logger....前日志。。。。。。。"); arg2.doFilter(arg0, arg1); System.out.println("Logger....后日志..........."); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
在控制台的显示:
Logger....前日志。。。。。。。 FirstFilter......dofilter........... 执行目标Servlet之前。。。。。。。。。。。。。。。。。 HelloServlet.....service...... 执行目标Servlet之后。。。。。。。。。。。。。。。。。。 Logger....后日志...........
如果想重写Request和Response中的方法,那么就可以继承以下4个包装类:
ServletRequestWrapper
ServletResponseWrapper
HttpServletRequestWrapper
HttpServletResponseWrapper
用过滤器我们可以实现:
过滤IP
图片防外链(只能从自己的网站上看到正确图片,从别的网站请求看到的是不同的图片)
重写一个好看的404页面,对用户友善一些
这里就这些啦~
相关文章推荐
- 黑马程序员_java学习日记_交通灯管理系统
- java学习日记_25:面向对象之static关键字
- Java学习日记-3 Character和字符串
- java学习日记
- 黑马程序员--Java学习日记之集合(collection类和map类代码)
- java学习日记_27:面向对象之main方法格式详细解释
- Java学习日记(九)Collection、泛型、Map集合、Collections&Arrays、增强for语句、可变参数、静态导入
- Java学习日记4(Servlet监听器)
- java学习日记_85:集合框架之set接口
- java学习日记_47:链式编程
- JAVA基础第五天学习日记_面向对象开发思想、匿名对象、封装、私有、构造函数
- Java学习日记----反射
- 黑马程序员_Java学习日记第四天-线程、Java1.5的新特性
- javaee学习日记之java基础之集合类
- java菜鸟学习日记1 java类加载器体系结构
- java学习日记(线程)
- Java和Scala学习日记1
- java&nbsp;学习日记1
- 黑马程序员Java基础加强33-40学习日记
- Java学习日记9-异常