论坛首页 入门技术论坛

Servlet资料辅导(5)

浏览 1173 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-04  


Servlet过滤器和监听器

 

Servlet过滤器(Filter)

 

过滤器是用于过滤Servlet的请求和响应,过滤器是存在于请求和被请求资源之间的。
过滤器就像当于一个中间件,请求要经过过滤器,然后过滤器才去掉用Servlet,Servlet的响应也会被过滤器截获并作相应的处理。

Filter是一个接口,要写一个自己的Filter就只能实现Filter接口。
Filter也有自己的生命周期,他的生命周期和Servlet比较相似,也是会先调用init()方法,然后再调用核心的处理过滤的方法doFilter(),这个方法中可定义了过滤规则,然后是destory()方法销毁Filter对象。

dofilter(ServletRequest request,ServletResponse response,FilterChain chain)
这个是过滤的核心方法,FilterChain的方法doFilter(ServletRequest request, ServletResponse response)也就是用过滤后的请求调用资源的方法,如果不写这个方法,也就算不会去调用相应的资源。
 
Filter的配置

 

Filter的配置和Servlet相似。
 <filter>
  <filter-name>SessionFilter</filter-name>
  <filter-class>alan.filter.SessionFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>SessionFilter</filter-name>
  <url-pattern>/protected/*</url-pattern>
  <!--这里的url-pattern就是要过滤的Servlet的url-pattern-->
  <dispatcher>request</dispatcher>
  <dispatcher>forward</dispatcher>
  <dispatcher>include</dispatcher>
  <!--上面的三个是过滤的范围-->
 </filter-mapping>


CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter对象,也就实现了向内存输出。CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。


注意:CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且这个字符数组是会自动增长的。

 

Servlet监听器

 

以下是3个Listener接口。
ServletRequestListener
HttpSessionListener
ServletContextListener


这三个监听器接口,分别监听Servlet中3种比较中要的对象的创建和销毁。这三个接口中分别有监听该对象创建和销毁事件的方法,服务器本身就是事件源。

 

listener的配置


<listener>
 <listener-class>alan.servlet.listener.AlanContextListener</listener-class>
        <!--listener-class也就是实现Listener接口的类-->
</listener>

Servlet中的重要对象(只针对应用)


                                              数量                生命周期             是否线程安全
ServletContext                        1                   全局的                不安全
                                                        只有在应用关闭时才销毁     需要加同步访问

HttpSession                      和用户的                局部的                不安全
                                         数量相同         只在有效时间内存在         需要加同步访问

ServletRequest                      多个                   局部的               线程安全


(HttpServletRequest)             只在servic()和doGet()             doPost()中存在

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics