1.监听器:
事件源
监听器
在事件源上邦定监听器
事件:当事件源发生了变化,触发监听器
2.servlet监听器
servlet会分成三类:监听的是里面域对象的状态servletContext HttpSession,ServletRequest
第一类:监听三个域对象的创建和销毁
servletContext:整个web项目,在服务器启动时创建,服务器关闭时候销毁
第一步:实现一个接口ServletContextListener实现它的方法
contextInitialized(ServletContextEvent sce) :如果域对象创建了,会自动执行这个方法
contextDestroyed(ServletContextEvent sce) :如果域对象销毁了,会自动执行这个方法
第二步操作:在web.xml中进行配置,让服务器知道不是一个普通的java程序,而是一个监听器
<listener>
<listener-class>cn.itcast.listener.TestServletContext</listener-class>
</listener>
servletContext域的应用:因为在服务器启动时候创建,经常用在创建数据库连接池,或者在服务器启动时候加载配置文件
HttpSession一次会话,request.getSeesion创建。三种销毁(1)非正常关闭服务器 (2)默认的过期时间 (3)调用方法
第一步实现:HttpSessionListener接口
访问jsp的时候会创建一个session因为会编译成servlet,jsp里面有内置对象,getSession
访问一个servlet不会创建session只有它访问getSession的时候会创建
访问html的时候不会创建session对象。
第二步配置web.xml
ServletRequest一次请求,请求时创建,请求结束
监听ServletRequestListener有两个方法表示这个域对象创建的时候来执行
访问jsp,servlet,html会创建一个request对象,只要浏览器是一起请求都会创建request对象
第二类:监听三个域对象里面属性的变化(增加,替换,移除)
监听servletcontext域里面的属性的变化
第一步操作:实现ServletContextAttributeListener接口
在接口里面有三个方法
- attributeAdded(ServletContextAttributeEvent event) :向域对象里面增加属性,执行这个方法
- attributeRemoved(ServletContextAttributeEvent event) :从域对象里面移除属性,执行这个方法
- attributeReplaced(ServletContextAttributeEvent event) :替换了域对象里面的属性的值,会执行这个方法
第二步操作
在web.xml进行配置,让服务器知道是一个监听器
监听HttpSession域里面的属性的变化
第一步操作:实现HttpSessionAttributeListener 接口
在接口里面有三个方法
- attributeAdded(HttpSessionBindingEvent event) :向域对象里面增加属性,执行这个方法
- attributeRemoved(HttpSessionBindingEvent event) :从域对象里面移除属性,执行这个方法
- attributeReplaced(HttpSessionBindingEvent event) :替换了域对象里面的属性的值,会执行这个方法
第二步操作
在web.xml进行配置,让服务器知道是一个监听器
监听servletRequest域里面的属性的变化
第一步操作:实现ServletRequestAttributeListener接口
接口里面有三个方法
- attributeAdded(ServletRequestAttributeEvent srae) :向域对象里面增加属性,执行这个方法
- attributeRemoved(ServletRequestAttributeEvent srae) :从域对象里面移除属性,执行这个方法
- attributeReplaced(ServletRequestAttributeEvent srae) :替换了域对象里面的属性的值,会执行这个方法
在servletContext监听器里面如何得到servletContext对象
通过ServletContextEvent里面getServletContext()方法得到
第三类:监听httpSession里面的javabean的状态
第一个接口 HttpSessionBindingListener接口
接口里面有两个方法
- valueBound(HttpSessionBindingEvent event) 绑定:把javabean对象放到session域对象里面
- valueUnbound(HttpSessionBindingEvent event) 解除绑定:把javabean对象从session域里面移除
第二个接口 HttpSessionActivationListener接口
有两个方法
- sessionDidActivate(HttpSessionEvent se)
活化
- sessionWillPassivate(HttpSessionEvent se)
活化:把磁盘上面序列化的session反序列化到项目里面
钝化:把session序列化到磁盘
正常关闭服务器,在work目录里面有序列化的文件
实现接口Serializable 的类才可以序列化,User没有这个接口才出现异常
而map里面有继承序列化
不是servlet不能用getServletContext来获取servletContext
4.分页显示数据
第一种方式:逻辑分页(假分页)
一次性把数据都取出来,每次显示一部分,缺点:数据量大,时间长,
优点:只需要和数据库交互一次、、
第二种方式:物理分页
每次根据显示的页面和数据,到数据库里面去查询
需要多次和数据交互
可以使用masql里面的关键字,limit实现分页,
开始位置如何计算:(当前页数-1)*每页的记录数
开始位置 当前显示的记录数
第一页 0 5
总的页数如何记录:总记录数/每页的记录数
如果总的记录数能够整除,页数就是除的结果
如果总的记录数不能够整除,页数就是除的结果+1
首先创建javabean在把里面的属性