java—过虑器基础(47)
在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>
第三步:测试执行
ilter的filter-mapping中的url-pattern的设置
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>
7、配置过虑器的初始化参数
在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类中获取值:
private FilterConfig conf;
//此方法只会在tomcat在启动时执行一次
public void init(FilterConfig conf) throws ServletException {
this.conf=conf;
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);
}
}
java—过虑器基础(47)的更多相关文章
- Java基础-类加载机制与自定义类Java类加载器(ClassLoader)
Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...
- Java基于Servlet过虑器
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- java安全管理器SecurityManager入门
table { margin-left: 30px; width: 95%; border: 1px; border-collapse: collapse } img { border: 1px so ...
- [Java类加载器]Java中classLoader浅析.
本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.l ...
- 过虑器 ThreadLocal 权限 监听器 观察者模式
数据的压缩 GzipOutputStream - > > ByteArrayOutputStream. 以下是在某个servlet中对指定的数据进行压缩 package cn.itcast ...
- 高性能Java解析器实现过程详解
如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...
- 师兄写的一个JAVA播放器的源代码(转)
师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...
随机推荐
- _kbhit() for linux
传送门:http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html #include <stdio.h> #in ...
- 13 MySQL--存储过程
1.存储过程的介绍 对于存储过程,可以接收参数,其参数有三类: in 仅用于传入参数用 out 仅用于返回值用 inout 既可以传入又可以当作返回值 存储过程包含了一系列可执行的sql语句,存储过程 ...
- ubuntu apt-get 代理
# cat /etc/apt/apt.conf Acquire::http::Proxy "http://109.105.4.17:8119"; Acquire::https::P ...
- 滑动窗口的最大值 · sliding-window-maximum
[抄题]: Given an array nums, there is a sliding window of size k which is moving from the very left of ...
- 5- 如何把MyEclipse中的web项目导入到Eclipse中运行
from: 如何把MyEclipse中的web项目导入到Eclipse中运行 2016年09月12日 20:57:51 dancheren 阅读数:35329 标签: eclipse 更多 个人分类: ...
- C语言命令行处理
一.简介 getopt()函数是一个标准库调用,可允许您使用直接的 while/switch 语句方便地逐个处理命令行参数和检测选项(带或不带附加的参数).与其类似的getopt_long()允许在几 ...
- JAVA定时关机小程序
大一刚学java时候做的小程序.由于当时迅雷还没有下载完成关机,晚上要下很多学习资料.只有自己算时间然后通过shutdown命令设置时间关机. 当时通过shutwodn命令,想到能否通过java做一个 ...
- kaggle-泰坦尼克号Titanic-2
下面我们再来看看各种舱级别情况下各性别的获救情况 fig = plt.figure() fig.set(alpha=0.5) plt.title(u"根据舱等级和性别的获救情况", ...
- CoreImage
[CoreImage] CIContext is an object through which Core Image draws the results produced by a filter. ...
- deploy: [mkdir] Created dir: C:\Program Files\Java\apache-cxf-2.4.2\samples\java_first_pojo\build [loadfile] Do not set property srcbuild.classpath as its length is 0.
使用CXF的错误,错误是说我的路径有错误,因为路径错误所以无法运行程序 (1)原因,我将其放入了Program Files文件夹下,所以,其不好使 分析原因: 目录路径错误,目录中不能有空格,否则其解 ...