文档章节

过滤器和监听器

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring-boot | 日志

引言 好久不见,都还好吗? 大家都知道,我一般都是带来实用的东西,这次也一样,我们来试试项目开发中的日志处理。 理论知识 1、为什么要用日志?你是否因为项目出现问题,查找日志文件定位...

成都_小冯同学
17分钟前
0
0
dubbo下的补偿实现(一)

背景 由于前面几篇文章涉及的问题 分布式事务的思考 在我们微服务的场景下 各种本地事务都没有办法控制的很好。 A服务调用B服务 当B服务成功提交之后 A发生了异常 这种情况下要如何处理呢??...

Mr_Qi
26分钟前
2
0
HTML显示json字符串并且进行格式化

通过pre标签进行格式化展示,使用JSON.stringify()方法转换。 代码如下:   <html> <head> <title>HTML显示json字符串并且进行格式化</title> </head> <body> <p id="show_p">{ "name": "B......

writeademo
47分钟前
0
0
LNMP——php-fpm

php-fpm的pool •vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加include并删除我们之前www池子 • include = etc/php-fpm.d/*.conf • mkdir /usr/local/php/etc/php-fpm.d/ • ......

chencheng-linux
50分钟前
0
0
TensorFlow layers slim 模块搭建cnn对mnist分类,比较bn效果

shape变化 (?, 784)(?, 28, 28, 1)(?, 14, 14, 8)(?, 7, 7, 8)(?, 1, 1, 8)(?, 8)(?, 10) 结果对比,基本上还是有点用的 0.91725457 0.9232 0.9548 0.95530.9177273 0.9234 0....

阿豪boy
53分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部