文章目录
简介
1.Listener用于监听JavaWeb程序中的事件,当事件被触发时,***中的指定方法将会被调用。
2.***的内部机制是接口回调
什么是接口回调(理解)
通过安卓开发中,按钮的点击监听来理解
- MainActivity
public class MainActivity extends AppCompatActivity {
private Button bu_test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bu_test=findViewById(R.id.bu_test);
//采用匿名实现类的方式
// bu_test.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
//
// }
// });
//设置按钮的点击监听
/* 对于设计者来说,设计者并不知道我们开发者点击这个按钮要做什么操作,所以设计者在点击监听方法中设置一个参数, 这个参数是一个接口,作为开发者,我们要传递这个接口的实现类过去,当点击按钮的时候, 实际执行的是实现类(MyOnClickListener)的方法(onClick)。 */
bu_test.setOnClickListener(new MyOnClickListener());
}
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View view) {
Log.e("onClick","MyOnClickListener 点击");
}
}
}
- OnClickListener接口
public interface OnClickListener {
void onClick(View v);
}
***的分类及使用
1.监听三个作用域创建和销毁
-
ServletContextListener
作用:监听ServletContext对象的创建与销毁
扩展:
servletcontext创建:启动服务器的时候
servletContext销毁:关闭服务器. 从服务器移除项目 -
ServletRequestListener
作用:监听ServletRequest对象的创建与销毁
扩展:
request创建:访问服务器上的任意资源都会有请求出现。也就是说访问 html, jsp, servlet等都会创建。
request销毁:服务器已经对这次请求作出了响应。 -
HttpSessionListener
作用:监听HttpSession对象的创建与销毁
扩展:
session的创建:调用getSession就会创建
session的销毁:1.session超时 2.服务器非正常关闭时销毁 3.正常关闭服务器(会把session保存到硬盘中(序列化))
三个作用域创建与销毁***的使用:
以ServletContextListener为例(其他两个***和该***使用方法一样)
- 创建ServletContextListener的实现类
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("创建ServletContext了");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("销毁ServletContext了");
}
}
- 在web.xml文件中注册***
<listener>
<listener-class>mycode.MyServletContextListener</listener-class>
</listener>
由于ServletContext对象在服务器启动时创建,关闭时销毁。所以启动服务器时contextInitialized()方法被调用,关闭服务器时contextDestroyed()方法被调用。
这类***的作用
-
ServletContextListener
利用它来,在servletcontext创建的时候, 可以执行一些初始化工作或执行自定义任务调度(执行某一个任务)。
-
HttpSessionListener
可以用来统计在线人数.
2. 监听三个作用域属性属性变化
- ServletContextAttributeListener
- HttpSessionAttributeListener
- ServletRequestAttributeListener
三个作用域属性属性变化***的使用
request属性***为例(其他两个***和该***使用方法一样)
- 创建ServletRequestAttributeListener的实现类
public class MyRequestAttributeListener implements ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request域中添加一个属性"+srae.getName()+"="+srae.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request域中移除一个属性"+srae.getName()+"="+srae.getValue());
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request域中一个属性被修改了"+srae.getName()+"="+srae.getValue());
}
}
- 在web.xml文件中注册***
<listener>
<listener-class>mycode.MyRequestAttributeListener</listener-class>
</listener>
操作request域中的属性时,对应方法将会被调用。
3. 监听Session内的对象
- HttpSessionBindingListener
作用:监听某个对象在session域中的创建与移除(绑定和解除绑定)。
使用:要监听哪一个类,直接使该类实现HttpSessionBindingListener接口。
public class Student implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("对象被绑定进来了");
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("对象被解除绑定");
}
}
- HttpSessionActivationListener
作用:监听某个对象在session中的序列化(钝化)与反序列化(活化 )。
扩展:
钝化 (序列化) : Session在一段时间内没有被使用时,把内存中Session对象存储到硬盘上
活化 (反序列化):Session被钝化后,服务器再次调用Session对象时,把硬盘中的Session对象读取到内存中。
使用:要监听哪一个类,直接使该类实现HttpSessionActivationListener接口。
//这里为了是Student对象可以正常序列化到硬盘上,还需要让类实现java.io.Serializable接口
//如果Student对象中还包含其他对象的引用,则被关联的对象也必须支持序列化
public class Student implements HttpSessionActivationListener , Serializable {
private static final long serialVersionUID = 1L;
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
}
扩展:Session的活化和钝化
让session的在一定时间内钝化.
1. 在tomcat文件目录里面 conf/context.xml 里面配置,则对所有的运行在这个服务器的项目生效
2. 在tomcat文件目录的conf/Catalina/localhost/context.xml 配置,则只对localhost域名生效(如访问: localhost:8080)。
3. 在IDE中配置
在web工程项目中的 META-INF/context.xml,则只对当前的工程生效。
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="9">
<Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
</Manager>
</Context>
说明:
maxIdleSwap :设置session的闲置时间,超过之后会自动钝化到硬盘中,单位分钟。(如下:9分钟不用就钝化)
directory : 钝化后的那个文件存放的目录位置。