首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

五-1 Servlet中的监听器、过滤器、JNDI

2013-11-09 
5-1 Servlet中的监听器、过滤器、JNDI1 监听器1.1 监听器作用监听客户端的请求、服务端的操作等,通过监听器,

5-1 Servlet中的监听器、过滤器、JNDI

1 监听器1.1 监听器作用

监听客户端的请求、服务端的操作等,通过监听器,可以自动激发一些操作,在事件发生前或发生后进行一些操作。

1.2 监听器开发与配置

Servlet中有三种监听器,分别为:对上下文事件的监听、对会话事件的监听、对请求事件的监听。下面具体讲解这三类事件的监听器实现。

对Servlet上下文进行监听

可以监听ServletContext对象的创建和删除以及属性的添加、删除和修改等操作,该监听器需要使用到如下两个接口类:

ServletContextAttributeListener监听对ServletContext属性的操作,比如增加/删除/修改;

ServletContextListener监听ServletContext当创建ServletContext时激发contextInitialized(ServletContextEvent sce)方 法 ,当销毁ServletContext时激发contextDestroyed(ServletContextEvent sce)方法。

监听Http会话

可以监听Http会话活动情况、Http会话中属性设置情况,也可以监听Http会话的active、paasivate情况等。该监听器需要使用到如下多个接口类:

 HttpSessionListener监听HttpSession的操作,当创建一个Session时激发session Created(SessionEvent se)方法;当销毁一个Session时激发sessionDestroyed (HttpSessionEvent se)方法。 HttpSessionActivationListener用于监听Http会话active、passivate情况。HttpSessionAttributeListener监听HttpSession中的属性的操作,当在Session增加一个属性时激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时激发attributeReplaced(HttpSessionBindingEvent se)方法。

对客户端请求进行监听

对客户端的请求进行监听是在Servlet2.4规范中新添加的一项技术,使用的接口类如下:

ServletRequestListener接口类 

ServletRequestAttrubuteListener接口类

 

在使用监听器的时候,只要实现相应的接口并实现相应方法即可,例如,要想监听上下文ServletContext对象的属性变化,只要编写java类并实现ServletContextAttributeListener接口,在这个java类中实现相应的监听方法,然后在web.xml文件中加入配置代码,如:

<listener> <listener-class>com.wxq.MyServletContextListener</listener-class> </listener>

 

2 过滤器2.1 过滤器作用

拦截来自客户端的请求和响应信息,从而进行查看、提取或者以对客户端和服务器之间交换的数据信息进行某项特定的操作。

2.2 过滤器开发与配置

使用过滤器:编写java类并实现Filter接口,在这个java类文件中添加init()方法、 doFilter()方法、destroy()方法的具体处理操作;然后在web.xml文件中添加配置代码,例如:

<filter>           <filter-name>MyFilter</filter-name>            <filter-class>com.wxq.SessionFilter</filter-class>  </filter> <filter-mapping>           <filter-name>MyFilter</filter-name>           <url-pattern>/*</url-pattern></filter-mapping> 

注释:MyFilter是给这过滤器起的别名,SessionFilter是自己编写的java类,它实现了Filter接口。”/*“表示上面配置的过滤器会拦截所有的请求并进行过滤,并在doFilter方法中进行相应的处理,处理完后这个请求会被交给其它的过滤器或Servlet进行处理。

注意:在doFilter()方法中一定要执行chain.doFilter(request,response),chain是FilterChain的对象,否则这个请求不会交给其它过滤器或Servlet处理。

3 JNDI3.1 数据源的概念

在实际的开发过程中,访问数据库时,创建与断开链接都会消耗一定的时间、IO资源,尤其是在大量的数据访问时,问题很明显。为了减少创建与断开数据库链接的次数,提出了数据源技术,也称为连接池,即程序不需要直接创建数据库链接,而是向连接池申请一个数据库链接,如果连接池中有空闲的链接,则返回这个链接,否则新建一个链接。并且,在使用完毕后,连接池会收回该数据库链接,交付给其它线程使用。

3.2 JNDI的概念与使用

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。

下面使用JNDI在Tomcat服务器配置文件中获取MySQL数据库链接:

数据源一般实现自javax.sql.DataSource接口,Tomcat中内置了数据源支持,它使用Jakarta-Commons Database Connection Pool作为数据源实现。数据源可以配置在tomcat/conf/server.xml中,也可以配置在tomcat/conf/context.xml中。我这里将数据源配置在tomcat/conf/context.xml中,注意,一定将MySQL驱动放到Tomcat安装的lib目录下,将配置代码加入<Context>和</Context>标签之间,配置代码如下:

<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000"username="root" password="root" driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/db?characterEncoding=utf-8"/>

然后在WEB程序的web.xml中配置数据源引用,这样才能在WEB应用程序中使用这个数据源,在web.xml中添加如下代码:

<resource-ref><descryiption>DB Connection</descryiption><res-ref-name>jdbc/db</res-ref-name><res-type>javax.sql.DataSource </res- type><res-auth>Container </res-auth></resource-ref>

在web应用程序的java代码中使用数据源获取数据库链接,代码如下:

Context initContext = new InitialContext();Context envContext = (Context) initContext.lookup("java:/comp/env");DataSource db = (DataSource)envContext.lookup("jdbc/db");Connection conn = db.getConnection( );Statement stmt = conn.createStatement();

接下来,你懂得,就不继续了。

 

 

交流探讨到我的新浪微博:http://weibo.com/tianrui1990

热点排行