2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java web监听器_JavaWeb监听器

java web监听器_JavaWeb监听器

时间:2021-06-30 16:23:22

相关推荐

java web监听器_JavaWeb监听器

三大组件:

Servlet

Listener

Filter

Listener:监听器

* 它是一个接口,内容由我们来实现;

* 它需要注册,例如注册在按钮上!

* 监听器中的方法,会在特殊事件发生时被调用!

观察者:

* 事件源

>小偷

* 事件

>偷东西

* 监听器

>警察

>监听器中的方法:抓捕

JavaWeb中的监听器

* 事件源:三大域!

>ServletContext

<>void contextInitialized(ServletContextEvent sce):创建ServletContext时

<>void contextDestroyed(ServletContextEvent sce):销毁ServletContext时

<> void attributeAdded(ServletContextAttributeEvent event):添加属性时

<> void attributeReplaced(ServletContextAttributeEvent event):替换属性时

<> void attributeRemoved(ServletContextAttributeEvent event):移除属性时

>HttpSession

<>void sessionCreated(HttpSessionEvent se):创建session时

<>void sessionDestroyed(HttpSessionEvent se):销毁session时

<> void attributeAdded(HttpSessionBindingEvent event):添加属性时

<> void attributeReplaced(HttpSessionBindingEvent event):替换属性时

<> void attributeRemoved(HttpSessionBindingEvent event):移除属性时

>ServletRequest

<>void requestInitialized(ServletRequestEvent sre):创建request时

<>void requesDestroyed(ServletRequestEvent sre):销毁request时

<> void attributeAdded(ServletRequestAttributeEvent srae):添加属性时

<> void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时

<> void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时

JavaWeb中完成编写监听器:

* 写一个监听器类:要求必须实现某个监听器接口;

packagecom.xjs.web.listener;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;/*** ServletContext生死监听

*@authorhp

*

*可以在这个监听器存放一些在Tomcat启动时就要完成的代码!*/

public class AListener implementsServletContextListener {

@Overridepublic voidcontextDestroyed(ServletContextEvent arg0) {

System.out.println("哇,我要挂也!");

}

@Overridepublic voidcontextInitialized(ServletContextEvent arg0) {

System.out.println("哇,我来也!");

}

}

* 注册,是在web.xml中配置来完成注册!

com.xjs.web.listener.AListener

事件对象:

* ServletContextEvent:其方法ServletContext getServletContext()

*HttpSessionEvent:其方法HttpSession getSession()

*ServletRequestEvent:两个方法1.ServletRequest getServletRequest() 2.ServletContext getServletContext()

监听器之属性监听器示例:

写一个BListener实现ServletContextAttributeListener接口:

packagecom.xjs.web.listener;importjavax.servlet.ServletContextAttributeEvent;importjavax.servlet.ServletContextAttributeListener;importjavax.servlet.annotation.WebListener;public class BListener implementsServletContextAttributeListener {public voidattributeAdded(ServletContextAttributeEvent scab) {

System.out.println("您向application中添加了一个名为"+scab.getName()+",值为:"+scab.getValue()+"的属性");

}public voidattributeReplaced(ServletContextAttributeEvent scab) {//返回的是旧值

System.out.println(scab.getName()+"="+scab.getValue());//返回的新值

System.out.println(scab.getServletContext().getAttribute("金泰妍"));

}public voidattributeRemoved(ServletContextAttributeEvent scab) {//最后一次相见

System.out.println(scab.getName()+"="+scab.getValue());

}

}

index.jsp:向application域中保存----可以在BListener这个属性监听器中获取其键值。

replace.jsp:替换原有属性

remove.jsp:移除原有属性

感知监听(都与HttpSession相关)

* 它是用来添加到Javabean上,而不是添加到三大域上!

HttpSessionBindingListener:添加到JavaBean上,JavaBean就知道自己是否添加到session中了。

session的序列化(关闭服务器后,再次开启,还有获取到session中的值)

如果在程序中向session中保存了东西,在stop了Tomcat后,会在Tomcat的目录下的work目录下对应的项目中会生成一个SESSIONS.ser文件(是保存的session)。当再次run服务器时,会加载此文件,然后该项目下的SESSIONS.ser文件消失。-------这样就会产生了session的死而复生。

比如:某些用户在某网站上正在浏览信息,突然该网站的服务器关闭,重启。用户短暂掉线,服务器端会把用户的信息保存到session中,然后保存在该项目下的文件中,服务器正常工作后,加载这些文件,不至于登录的用户信息丢失。

注:在Tomcat的目录下的conf目录的context.xml文件中

加上这句话可以废掉session序列化

session的钝化和活化

钝化session:Tomcat会把长时间不被使用的session,钝化session对象。就是把session通过序列化的方式保存到硬盘文件中。

活化session:当用户在使用session时,Tomcat会把钝化的对象在活化session。就是把硬盘文件中的session在反序列化回内存。

当session被Tomcat钝化时,session中存储的对象也被钝化,当session被活化时,也会把session中存储的对象活化。

比如:在网上,用户过于太多,导致session个数猛增,客户没有下线,session增多,从而导致内存压力,服务器会把长时间没人访问的session放在硬盘上,当你在访问该session时,在从硬盘上读取到内存中,然后使用。

配置:

1. 把这个写到Tomcat的web.xml中,所有的项目都生效。2.把它写到具体的项目中,只对该项目生效。

已钝化的session

访问该session时,该session活化,加载到内存,该文件也不会消失,它会一直保存在硬盘上。

HttpSessionActivationListener(监听器)和Serializable接口

已经设置了session的最大不活动时间为1分钟。

创建User类实现这两个接口:

packagecom.xjs;importjava.io.Serializable;importjavax.servlet.http.HttpSessionActivationListener;importjavax.servlet.http.HttpSessionEvent;public class User implementsHttpSessionActivationListener,Serializable{/*** 钝化时调用*/@Overridepublic voidsessionWillPassivate(HttpSessionEvent arg0) {

System.out.println("我同session钝化了,从内存到硬盘");

}/*** 活化时调用*/@Overridepublic voidsessionDidActivate(HttpSessionEvent arg0) {

System.out.println("我同session活化了,从硬盘到内存");

}

}

a.jsp:向session中保存一个User对象

b.jsp:从session中取出User对象

先访问a.jsp后,向session保存User;等一分钟,User对象同session一同钝化。再访问b.jsp,可以得到User对象。

网页的国际化

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。