在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)的更多相关文章

  1. Java基础-类加载机制与自定义类Java类加载器(ClassLoader)

    Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...

  2. Java基于Servlet过虑器

  3. Java学习---面试基础知识点总结

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...

  4. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  5. java安全管理器SecurityManager入门

    table { margin-left: 30px; width: 95%; border: 1px; border-collapse: collapse } img { border: 1px so ...

  6. [Java类加载器]Java中classLoader浅析.

    本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.l ...

  7. 过虑器 ThreadLocal 权限 监听器 观察者模式

    数据的压缩 GzipOutputStream - > > ByteArrayOutputStream. 以下是在某个servlet中对指定的数据进行压缩 package cn.itcast ...

  8. 高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  9. 师兄写的一个JAVA播放器的源代码(转)

    师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...

随机推荐

  1. Lazy JSF Primefaces Datatable Pagination

    http://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable.html

  2. android手机 ping 虚拟机ubuntu的ip地址

    今天使用android手机往虚拟机上ubuntu 上搭建的nginx 和rtmp服务器推送东西的时候,怎么都推不上去. 后来在windows下的cmd里: # adb shell # ping 192 ...

  3. Java Reference & ReferenceQueue一览

    Overview The java.lang.ref package provides more flexible types of references than are otherwise ava ...

  4. 服务级别协议(SLA)与运行水平协议(OLA)

    服务级别协议(SLA)与运行水平协议(OLA): 服务级别管理和服务级别协议在国内已被广泛接受并成用.本文试图讨论服务级别协议(SLA)和运行水平协议(OLA)的异同. 1. SLA a.定义 服务级 ...

  5. gorm中自己写sql的方法实现

    type Result struct { Total int } var result Result //当天修改作业的总时间:分钟 dao.DB(dao.HomeworkTable).Raw(&qu ...

  6. loadrunner12: Error -27492: "HttpSendRequest" failed, Windows error code=8

    这个问题我在网上看到有这样的解释:1.timeout时间超时设置问题2.Run-Time Settings -> Preferences -> Advanced. 确定此选项未被选中:&q ...

  7. [.NET] GC垃圾回收机制

    前言: 在.NET程序开发中,为了将开发人员从繁琐的内存管理中解脱出来,将更多的精力花费在业务逻辑上,CLR提供了自动执行垃圾回收的机制来进行内存管理.开发人员甚至感觉不到这一过程的存在.CLR执行垃 ...

  8. C#进阶系列——WebApi 异常处理解决方案(转)

    出处:http://www.cnblogs.com/landeanfen/p/5363846.html 阅读目录 一.使用异常筛选器捕获所有异常 二.HttpResponseException自定义异 ...

  9. 6 scrapy框架之分布式操作

    分布式爬虫 一.redis简单回顾 1.启动redis: mac/linux:   redis-server redis.conf windows: redis-server.exe redis-wi ...

  10. Ansible 笔记 (1) - 安装和配置

    本文参考 <Ansible 自动化运维和最佳实践>,这两天刚读这本书,写写总结.主控机环境是 centos 7,被控机均是 centos 6.8 . 确保 python 版本大于 2.6 ...