文档章节

过滤器和监听器

c
 chuiyuan
发布于 2014/06/21 11:07
字数 871
阅读 13
收藏 0

一。为什么要过滤 器

   前面 的内容 中,我们知道 

request.setCharacterEncoding("gb2312");

这是将 request 内的数据编码设置成 gb2312 ,在以 post 方式请求时,如果 目标页面没有这句 , tomcat 服务器将会把中文参数 显示为乱码。

然而 一个大的工程中,如果 这样 会要写很多这样的内容 。

在请求被 处理前,有一个公共的模块,专门负责进行编码的转换,这样 对于编码工作就不用反复编写了。

这可以用过滤 器实现 。

二。编写 过滤 器

先写两个jsp 文件,一个接收输入 ,一个得到结果 。

query.jsp

<b>查询学生数据库</b>
    <form action="queryResult.jsp"  method ="post">
    请输入学生的帐号:<input type ="text"  name ="account">
    <input  type ="submit"  value="查询">
    </form>

queryResult.jsp

 查询的关键字为:<%=request.getParameter("account") %>

传统方法要在 queryResult中解决乱码问题,过滤器可以只要在 web.xml 文件中配置,能够对 JSP ,HTML ,Servlet 进行过滤 ,编写 一个过滤 器要两个步骤 。

(1)实现 Filter接口

(2)实现 三个方法

初始化方法:  

public void init(FilterConfig config);

消亡方法:

public void destroy();

过滤方法:过滤器过滤 时的动作

public void doFilter(ServletRequest request ,ServletResponse pesponse, FilterChain chain);

上面 的三个方法都 在实现 ,因为他们是定义 在Filter 接口中的。

public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws IOException, ServletException {
 // TODO Auto-generated method stub
 request.setCharacterEncoding("gb2312");
 chain.doFilter(request, response);
 }

第二名是将请求请求传递,如果 没有这句 ,过滤 器在收到请求处理后,不会传递给目标页面。

(3) 过滤 器的配置

要想让系统 能够 识别 ,还要在 web.xml 中进行配置。

<filter>
  <filter-name>EncodingFilter</filter-name>
  <filter-class>filter.EncodingFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>EncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

其中,url-pattern 是配置过滤 器的映射,用于指定过滤 器折过滤模式。有三种:

a。过滤所有的 文件

<filter-mapping>
  <filter-name>EncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

b. 过滤 一个or 多个Servlet (JSP )文件

<filter-mapping>
  <filter-name>FilterName</filter-name>
  <url-pattern>/PATH1/ServletName1(JSPName1)</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>FilterName</filter-name>
  <url-pattern>/PATH2/ServletName2/(JSPName2)</url-pattern>
 </filter-mapping>

c. 过滤 一个或者 多个文件目录

<filter-mapping>
  <filter-name>FilterName</filter-name>
  <url-pattern>/PATH1/*</url-pattern>
 </filter-mapping>

注意,

 过滤 器的初始化是在服务器运行的时候自动进行的。 doFilter()是在每次提交 被 处理前被调用 的。

大项目中会用到很多过滤 器,但是如果每一个过滤 器如果都在服务器中实例 化,会有很大的开销,所以如果 不是核心的安全功能 ,我们放在客户端完成 。


三。过滤 器的其它应用

1. 检查 session

session查检有两个方面的意思 ,一是没有登录的用户不能访问受限的页面。二是已经登录的用户不能访问登录页面。

这里只要用一个 session检查就可以了,在访问任何页面前,检查session 中是否有 account 的信息。进行session 检查呢,可以 在过滤 器中完成 。

2. cookie检查

在访问页面前,过滤 器中读取Cookie的值 ,将cookie中的帐号的密码 ,用 DAO进行验证,如果 成功,直接 跳转到登录成功的页面。

3. 权限检查


四,监听 器

当用户登录,信息存入  session中时,要将登录时间保存在日志中,退出时,也是的,这就是一些 额外 的工作,将额外 的工作与业务逻辑分开,这就是servlet容器的监听器的作用。



© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 92
码字总数 40993
作品 0
海淀
Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解

过滤器 1、Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求...

长平狐
2012/11/12
99
0
spring boot(7)监听器、过滤器和拦截器

1 监听器、过滤器和拦截器 1.1 监听器 监听器Listener,它是实现了javax.servlet.XXXListener接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要...

刘胜球
2017/10/29
0
0
CAS之5.2x版本之Jira单点登录-yellowcong

将Cas和jira搞一起,他们都是一家公司的产品。将Jira和cas整合在一起,主要有一下几步骤:1、配置web.xml,需要注意的是过滤器和监听器的位置,是得放在指定的地方。2、配置seraph-config.xml...

yelllowcong
04/13
0
0
《Genesis-3D游戏引擎系列教程-高级篇》1:后期效果

注:本系列进阶教程仅针对引擎编辑器:v1.2.2及以下版本 音频处理 素材资源 工程文件 声音是游戏中非常重要的组成部分,Genesis-3D提供了多样的声音特效处理方式,方便用户制作丰富多彩的声音...

Genesis-3D
2014/01/24
0
0
Java面试题之JavaWeb高级

一、Filter和Listener Filter:从J2EE1.3开始,Servlet2.3规范中加入对Filter的支持。Filter就称之为过滤器,它是Servlet技术中最激动人心的技术WEB开发人员通过Filter技术可以对web服务器管理...

年轻诠释我们的梦想_705b
06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

what f,,

anlve
37分钟前
0
0
初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
9
0
现场看路演了!

HiBlock
昨天
19
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
13
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部