Java web开发中的listener和filter

原创|其它|编辑:郝浩|2010-02-08 10:35:56.000|阅读 886 次

概述:jsp开发中的监听器和过滤器,这两个东西要说起来,很大,很繁。今天我想用一个现实的例子,来说明这两个东东的作用。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  今天在公司看到有同事在写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...{
  publicstaticHashMapbag;//村民的东西就放在这个袋子里
  }

  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();
  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>


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP