- 浏览: 1479189 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
今天在公司看到有同事在写filter,晚上一个人在家无聊,就想聊聊这个东西。
jsp开发中的监听器和过滤器,这两个东西要说起来,很大,很繁。今天我想用一个现实的例子,来说明这两个东东的作用。
案例描述
假设你平时生活在北京,有天你去一个很边远很贫穷的山村体验生活,到了那个山村后,你想要什么东西,村长都会同意,然后安排村民送给你,但是有一点例外的是,一旦你问他们要钱,村长坚决不给,还会带领村民把你打回北京去。
你为了从村民那里带走尽量多的东西,所以你在出发前准备了一个大袋子,希望把村民给的东西都放到袋子里;然后你在回到城市后,这个袋子就没用了,你就把这个袋子给扔了。
代码模拟
恩,我想用如下简单代码来模拟以上案例,大家可以想一下监听器扮演者什么角色?过滤器扮演什么角色?
1. 新建一个java web project;
2. 默认的index.jsp页面上加上两个链接,模拟要村民要红薯和要钱,如下:
<html>
<body>
<h1>欢迎掉入无名村,哈哈</h1><br>
<ahref="hongshu.jsp">给红薯</a><br/>
<ahref="money.jsp">给钱</a><br/>
</body>
</html>
3. 新建一个大布袋类:BigBag.java,如下:
packagechb.demo.web;
importjava.util.HashMap;
publicclassBigBag...{
publicstaticHashMap<String,Integer>bag;//村民的东西就放在这个袋子里
}
4. 新建一个监听器:MyListener.java,如下:
packagechb.demo.web;
importjava.util.HashMap;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassMyListenerimplementsServletContextListener...{
publicvoidcontextDestroyed(ServletContextEventarg0)...{
BigBag.bag=null;
System.out.println("回城了,让掉烂袋子吧");
}
publicvoidcontextInitialized(ServletContextEventarg0)...{
BigBag.bag=newHashMap<String,Integer>();
System.out.println("要进山了,准备好布袋子");
}
}
5. 再新建一个过滤器:MyFilter.java,如下:
packagechb.demo.web;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassMyFilterimplementsFilter...{
publicvoiddestroy()...{
}
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException...{
HttpServletRequestreq=(HttpServletRequest)request;
HttpServletResponsersp=(HttpServletResponse)response;
if(req.getRequestURI().toString().endsWith("money.jsp"))...{
//什么时候有过钱啊?打回北京去
rsp.sendRedirect("gohome.jsp");
System.out.println("什么时候有过钱啊,滚回家去!");
return;
}elseif(req.getRequestURI().toString().endsWith("hongshu.jsp"))...{
if(BigBag.bag.containsKey("hongshu"))...{
intnum=BigBag.bag.get("hongshu")+1;
BigBag.bag.put("hongshu",num);
System.out.println("得到第"+num+"个红薯");
}else...{
BigBag.bag.put("hongshu",1);
System.out.println("得到第1个红薯");
}
//村长同意了,下面就是到村民家中拿了。。
chain.doFilter(request,response);
}else...{
//只要不要钱就行,放行
chain.doFilter(request,response);
}
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException...{
}
}
6. 在web.xml中配置监听器和过滤器,如下所示:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>myFilter</filter-name>
<filter-class>chb.demo.web.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>chb.demo.web.MyListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
好了,大功告成,部署运行,观察结果怎样?
分析结果
我们会观察到如下结果:
当服务启动过程中,控制台输出“要进山了,准备好布袋子”
当点击一下“给红薯”的链接时,控制台会输出“得到第x个红薯”
当点击一下“给钱”的链接时,控制台输出“什么时候有过钱啊,滚回家去!”
怎么样?有点明白了?
其实,监听器就是在服务启动之前做好保证服务正常运行的准备工作,服务结束的时候再善后一下;对应案例中的情况,就是在上路之前把袋子准备好,回来了把袋子扔掉;类似保姆的工作,照顾孩子起床,再照顾孩子睡下。
过滤器就是针对服务器的请求,加以过滤限制;对应案例中的情况,就是村长了,掌握着生杀大权,什么事都得过我这关才行^_^
jsp开发中的监听器和过滤器,这两个东西要说起来,很大,很繁。今天我想用一个现实的例子,来说明这两个东东的作用。
案例描述
假设你平时生活在北京,有天你去一个很边远很贫穷的山村体验生活,到了那个山村后,你想要什么东西,村长都会同意,然后安排村民送给你,但是有一点例外的是,一旦你问他们要钱,村长坚决不给,还会带领村民把你打回北京去。
你为了从村民那里带走尽量多的东西,所以你在出发前准备了一个大袋子,希望把村民给的东西都放到袋子里;然后你在回到城市后,这个袋子就没用了,你就把这个袋子给扔了。
代码模拟
恩,我想用如下简单代码来模拟以上案例,大家可以想一下监听器扮演者什么角色?过滤器扮演什么角色?
1. 新建一个java web project;
2. 默认的index.jsp页面上加上两个链接,模拟要村民要红薯和要钱,如下:
<html>
<body>
<h1>欢迎掉入无名村,哈哈</h1><br>
<ahref="hongshu.jsp">给红薯</a><br/>
<ahref="money.jsp">给钱</a><br/>
</body>
</html>
3. 新建一个大布袋类:BigBag.java,如下:
packagechb.demo.web;
importjava.util.HashMap;
publicclassBigBag...{
publicstaticHashMap<String,Integer>bag;//村民的东西就放在这个袋子里
}
4. 新建一个监听器:MyListener.java,如下:
packagechb.demo.web;
importjava.util.HashMap;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassMyListenerimplementsServletContextListener...{
publicvoidcontextDestroyed(ServletContextEventarg0)...{
BigBag.bag=null;
System.out.println("回城了,让掉烂袋子吧");
}
publicvoidcontextInitialized(ServletContextEventarg0)...{
BigBag.bag=newHashMap<String,Integer>();
System.out.println("要进山了,准备好布袋子");
}
}
5. 再新建一个过滤器:MyFilter.java,如下:
packagechb.demo.web;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassMyFilterimplementsFilter...{
publicvoiddestroy()...{
}
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException...{
HttpServletRequestreq=(HttpServletRequest)request;
HttpServletResponsersp=(HttpServletResponse)response;
if(req.getRequestURI().toString().endsWith("money.jsp"))...{
//什么时候有过钱啊?打回北京去
rsp.sendRedirect("gohome.jsp");
System.out.println("什么时候有过钱啊,滚回家去!");
return;
}elseif(req.getRequestURI().toString().endsWith("hongshu.jsp"))...{
if(BigBag.bag.containsKey("hongshu"))...{
intnum=BigBag.bag.get("hongshu")+1;
BigBag.bag.put("hongshu",num);
System.out.println("得到第"+num+"个红薯");
}else...{
BigBag.bag.put("hongshu",1);
System.out.println("得到第1个红薯");
}
//村长同意了,下面就是到村民家中拿了。。
chain.doFilter(request,response);
}else...{
//只要不要钱就行,放行
chain.doFilter(request,response);
}
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException...{
}
}
6. 在web.xml中配置监听器和过滤器,如下所示:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>myFilter</filter-name>
<filter-class>chb.demo.web.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>chb.demo.web.MyListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
好了,大功告成,部署运行,观察结果怎样?
分析结果
我们会观察到如下结果:
当服务启动过程中,控制台输出“要进山了,准备好布袋子”
当点击一下“给红薯”的链接时,控制台会输出“得到第x个红薯”
当点击一下“给钱”的链接时,控制台输出“什么时候有过钱啊,滚回家去!”
怎么样?有点明白了?
其实,监听器就是在服务启动之前做好保证服务正常运行的准备工作,服务结束的时候再善后一下;对应案例中的情况,就是在上路之前把袋子准备好,回来了把袋子扔掉;类似保姆的工作,照顾孩子起床,再照顾孩子睡下。
过滤器就是针对服务器的请求,加以过滤限制;对应案例中的情况,就是村长了,掌握着生杀大权,什么事都得过我这关才行^_^
发表评论
-
ServletContext接口
2011-08-03 19:57 13201. 获取web应用(tomcat的Context ... -
ServletConfig接口
2011-08-03 19:41 13481. ServletConfig接口用于描述Ser ... -
HttpServletResponse
2011-08-03 19:31 17921. 控制消息头 add ... -
基于AOP设计思想的拦截器(Interceptor)与传统拦截器(Filter)的区别
2011-07-11 11:46 9373现在AOP的设计开发理念在软件开发中用的越来越广泛,在我们开发 ... -
HttpSessionListener用法
2010-12-02 20:46 1481继上次说到Listener的功效,这里就不得不说说另外一个接口 ... -
一个简单jsp-servlet例子
2010-10-15 11:17 5444以下的简单 jsp-servlet 例子流程为: inde ... -
过滤器(filter)在web 中的应用(二)
2010-06-25 16:42 1086Filters是在请求资源(Servl ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解(2)
2010-06-25 13:56 160022、配置Struts <dis ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解(1)
2010-06-25 13:46 2833在项目中总会遇到一 ... -
web.xml中context-param,listener,filter,servlet加载顺序
2010-06-25 13:35 1867不同类别加载顺序:先 context-param 然后 lis ... -
过滤器(filter)在web 中的应用(一)
2010-06-22 17:38 2064过滤器(Filter)在Web开发中的应用: Filter是 ... -
javax.servlet基本类和接口
2010-06-19 21:25 2118基本类和接口一、javax.servlet.Servlet ... -
Session机制详解(jsp-servlet 技术)
2010-06-17 20:51 1451虽然session机制在web应用程序中被采用已经很长时间 ... -
servlet中配置文件web.xml中的参数context-param和init-param区
2010-06-17 09:56 1822web.xml里面可以定义两种参数:(1)applicatio ... -
优化Servlet配置为web.xml瘦身
2010-06-17 09:46 1723本文介绍优化Servlet配置为web.xml瘦身,web.x ... -
Java中用Servlet Listener实现定时监听
2010-06-12 13:50 1510分两步走: (1)实现 javax.servlet. ... -
谈谈Listener Servlet的应用
2010-06-12 10:53 1230... -
web中的listener简介
2010-06-12 10:42 1309... -
利用HttpSessionListener实现网站在线人数统计功能
2010-06-12 10:17 2032在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录 ...
相关推荐
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java Web整合...
web.xml 中的listener、 filter、servlet 加载顺序及其详解
Java WEB 篇九 Java servlet、filter、listener、interceptor 之间的区别和联系?
梁胜彬等编著的《java web应用开发与实践》结合作者多年的教学与软件开发经验,依据教学大纲,面向技术发展方向,选取主流的java web开发技术和开发工具,内容涵盖了jsp基础、jdbc、setvlet、filter、listener、mvc...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java Web整合...
, 《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。, 《Java Web整合...
JAVA WEB开发技术 Listener监听器 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会涉及几个重要组成部分: 事件(Event) 事件源 事件处理器 事件监听器(Listener) 用户的一个操作,如点击一个按钮、...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。 第1篇为入门篇,内容包括Java Web开发概述等; ...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java Web整合...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java Web整合...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇...
主要介绍了Java web三件套listener、filter、servelt原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第 1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟 踪、过滤器...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java ...
通常JavaWeb项目启动时我们需要... 下面代码是模拟初始化的一个示例,可以在控制台看到程序的输出,和Listener、Filter、Servlet的启动先后顺序,强烈建议跟我一样喜欢动手的Coder操作一下,废话不多说,直接上代码了。
本书全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第 1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟 踪、过滤器...