JavaWeb监听器
三大组件
Servlet
Listener
Filter
Listener:监听器
1、初次:AWT
2、然后:SAX
监听器
是一个接口,内容由我们来实现
需要注册,例如注册在按钮上
监听器的方法,会在特定事件发生时被调用
观察者
事件源
强盗 button
事件
抢劫 event
监听器
捕快 actionListener
监听器中的方法:抓捕 actionPerformed
JavaWeb中的监听器
事件源:三大域
ServletContext 项目启动时生 关闭死
生命周期监听ServletContextListener:有两个方法,一个在出生时调用,一个在死亡时调用
void contextInitialized(ServletContextEvent sce):创建ServletContext时
void contextDestroyed(ServletContextEvent sce):销毁ServletContext时
属性监听ServletContextAttributeListener:有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用
void attributeAdded(ServletContextAttributeEvent event)添加属性时
void attributeReplaced(ServletContextAttributeEvent event) 替换属性时
void attributeRemoved(ServletContextAttributeEvent event) 移除属性时
HttpSession
生命周期监听HttpSessionListener:有两个方法,一个在出生时调用,一个在死亡时调用
void sessionCreated(HttpSessionEvent e) 创建session时
void sessionDestroyed(HttpSessionEvent e) 销毁ession时
属性监听HttpSessiontAttributeListener:有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用
void attributeAdded(HttpSessionBindingEvent event) 添加属性时
void attributeReplaced(HttpSessionBindingEvent event)替换属性时
void attributeRemoved(HttpSessionBindingEvent event) 删除属性时
ServletRequest
生命周期监听ServletRequestListener:有两个方法,一个在出生时调用,一个在死亡时调用
void requestInitialized(ServletRequestEvent sre):创建request时
void requesDestroyed(ServletRequestEvent sre):销毁request时
属性监听ServletRequestAttributeListener:有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个是在移除属性时调用
void attributeAdded(ServletRequestAttributeEvent srae) 添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae)替换属性时
void attributeRemoved(ServletRequestAttributeEvent srae) 删除属性时
JSP真身=“JSP通过Servlet容器生成Servlet和JSP之间的关系”
javaweb完成编写监听器
写一个监听器类:实现某个监听器接口
注册:在web.xml中完成配置完成
事件对象
ServletContextEvent:ServletContext getServletContext()
HttpSessionEvent:HTTPSession getSession()
ServletRequestEvent
ServletContext getServletContext()
ServletRequest getServletRequest()
ServletContextAttributeEvent
ServletContext getServletContext();
String getName():获取属性名
String getValue():获取属性值
HttpSessionBindingEvent:略
ServletRequestAttributeEvent:略
感知监听(都与HttpSession相关)
用来添加到JavaBean上,而不是添加到三大域上
不需要在web.xml中注册
HttpSessionBindingListener:添加到javabean上,javabean就知道自己是否添加到session中了
HttpSessionActivationListener:Tomcat会在session从时间不被使用时钝化session对象,所谓钝化session,就是把session通过序列化的方式保存到硬盘文件中。
当用户再使用session时,tomcat还会把钝化的对象再活化session,所谓活化就是把硬盘文件中的session再反序列化回内存。
当session被Tomcat钝化时,session中存储的对象也被钝化,当session被活化时,也会把session中存储的对象活化。
如果某个类实现HttpSessionActivationListener接口后,当对象随着session被钝化和活化时。下面两个方法就会被调用
public void sessionWillPassivate(HttpSessionEvent se):当对象感知被活化时调用本方法
public void sessionDidActivate(HttpSessionEvent se)当对象感知被钝化时调用本方法
HttpSessionActivationListener监听器与HttpSessionBindingListener监听器相似,都是感知型的监听器,
如果让Person类实现了HttpSessionActivationListener监听器接口,并把Person对象添加到了session中后,
当Tomcat钝化session时,同时也会钝化session中的Person对象,这时Person对象就会感知到自己被钝化了,
其实就是调用Person对象的sessionWillPassivate()方法,当用户再次使用session时,Tomcat会活化session,
这时Person会感知到自己被活化,其实就是调用Person对象的sessionDidActivate()方法
因为钝化和活化session,其实就是使用序列化和反序列化技术把session从内存保存到硬盘,和把session从硬盘加载到内存。
这说明如果Person类没有实现Serializable接口,那么当session钝化时就不会钝化Person,而是把Person从session中移除再钝化。这说明session活化后,session中不再有Person对象了
需要实现serializable接口才可以和session一起被保存到硬盘
国际化
国际化就是可以把页面中的中文变成英文
/**
* 可以在监听器存放一些在tomcat启动时就要完成的代码
* @author Administrator
*
*/
public class AListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("die");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("born");
}
}
public class BListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("向apllication添加了一个"+event.getName()+",值为:"+event.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println(event.getName()+"=" +event.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
//返回旧值 因为旧值就只有这次了 新值还可以再获取
System.out.println(event.getName()+"="+event.getValue()+","
+event.getServletContext().getAttribute(event.getName()));
}
}
public class Customer implements HttpSessionActivationListener {
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("和session一起活化");
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("和session从内存到硬盘");
}
}
/**
* 写2个配置文件,一个文件中存放中文信息,另一个存放英文信息
* 使用一个类,来通过语言环境,最终识别加载哪一个文件的信息:ResourceBundle
* 什么语言环境:Locale
* zn_CN
* en_US
* new Locale("zh","CN");
* Locale.getDefault();
* @author Administrator
*资源文件名称的格式:基本名称+Locale部分+.properties
*例如res_zh_CN.properties,其中基本名称为res,而zh_CN是Locale部分
*必须所有的资源文件基本名称要相同,不同之处就是Locale部分
*/
public class Demo1 {
@Test
public void fun1(){
Locale locale = Locale.US;
//得到ResourceBundle
//第一个参数是基本名称
//第二个参数是Locale
ResourceBundle rb = ResourceBundle.getBundle("res",locale);
//使用ResourceBundle来获取资源
System.out.println(rb.getString("username"));
System.out.println(rb.getString("password"));
System.out.println(rb.getString("login"));
}
}