标签:
在web项目中就只有三大组件:
Filter过虑器
监听器.
Servlet
在web中过虑器就是一个类javax.servlet.Filter。
过虑器是用于在执行时,过虑用户的请求(request),或是过虑从请求的资源中返回的响应(response).
1:过虑器只对url(路径)进行过虑。
2:过虑器开发人员来实现。
3:过虑器由于是web的核心组,所以这个filter的实现者也必须要配置到web.xml中。
4:三个生命周期方法:init,destory,doFilter(执行过虑任务)。用户的每次请求,都会执行doFIlter方法,而
Init,destory只会执行一次。
Init方法执行的时间:在项目启动时,直接初始化Filter的对象,所以会在tomcat启动时执行init方法。
第一步:书写一个类实现Filter接口
package cn.hongxin.filter; 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 OneFilter implements Filter { //此方法只会在tomcat在启动时执行一次 public void init(FilterConfig filterConfig) throws ServletException { System.err.println("过虑器初始化了:"+this); } //此方法执行过虑任务 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.err.println("1:正在执行过虑:"+this); //执行下一个过虑器,如果没有下一个过虑器则执行目标的servlet chain.doFilter(request, response); //2: System.err.println("3:目标组件,执行完成了..."); } public void destroy() { System.err.println("过虑器dead.."+this); } }
第二步:在web.xml中配置这个过虑器
<filter> <filter-name>one</filter-name> <filter-class>cn.itcast.filter.OneFilter</filter-class> </filter> <!-- 配置这个过虑器对哪一个url进行过虑 --> <filter-mapping> <filter-name>one</filter-name> <url-pattern>/one </url-pattern> </filter-mapping>
第三步:测试执行
url-pattern的设置:
/* = 对所有url都请求这个servlet。| 都被这个filter过虑.
/ = 只可以给servlet。 - 所有其他的servlet不处理的url都由这个url所指定的servlet处理。默认servlet。
*.jspx = 所有以jspx结束都请求到这个Servlet或是被某个Filter拦截。如http://local:8080/proj/abc.jspx
/jsps/* = 所有路径中以/jsps/开头的都请求到这个servlet或是被某个filter拦截到。
/jsps/*.jspx 错误的:SUN规定*两边不可以同时出现字符。
<filter-mapping> <filter-name>one</filter-name> <!-- 对所有url都拦截过虑任务 --> <url-pattern>/index.jsp</url-pattern> <url-pattern>/jsps/*</url-pattern> <!-- 拦截这个servlet上的所有url设置 --> <servlet-name>OneSerlvet</servlet-name> </filter-mapping>
如果有jsps/abc.jsp这个页面,则显示这个页面有两种方式:
1:在地址栏请求:http://local:8080/project/jsps/abc.jsp -- 可以被拦截到的,因为:路径符合/jsp/abc.jsp
2:req.getRequestDispathcer(“/jsps/abc.jsp”).forward(req,resp); -
Dipatcher属性:
Request – 默认值,只拦截用户的新的请求。
Forward – 对转发进行拦截。
Include – 对include拦截。
Error - 对错误进行拦截。
<!-- 设置对转发拦截 -->
<dispatcher>REQUEST[W1] </dispatcher>
<dispatcher>FORWARD</dispatcher>
在filter类中有一个方法:init(FilterConfig config); 而filtetrConfig中包含了从web.xml中读取初始化参数值。
<filter>
<filter-name>one</filter-name>
<filter-class>cn.itcast.filter.OneFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>张三Jack</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>88</param-value>
</init-param>
</filter>
在filter类中获取值:
//此方法只会在tomcat在启动时执行一次
public void init(FilterConfig conf) throws ServletException {
System.err.println("过虑器初始化了:"+this);
//获取name的值:
String name = conf.getInitParameter("name");
System.err.println("name is:"+name);
System.err.println("----------------------------");
Enumeration<String> en= conf.getInitParameterNames();
while(en.hasMoreElements()){
String paramName = en.nextElement();
String val = conf.getInitParameter(paramName);
System.err.println(paramName+"="+val);
}
}
标签:
原文地址:http://www.cnblogs.com/zhenghongxin/p/4454908.html