1. Servlet程序的监听器
1.1. 当servlet程序运行时,使用监听器在常用的内置对象创建或者销毁的时机进行业务处理
1.2. 监听对象:ServletContext,HttpSession,HttpServletRequest
1.3. 监听内容:以上对象的创建、销毁、属性改变的事件
1.4. 监听作用:可以在以上事件发生之前或之后进行业务处理
1.5. 使用监听器实现保存网站访问量的步骤
1.5.1. 创建自定义的Listener,实现ServletContextListener接口
1.5.2. contextInitialized方法:当ServletContext对象初始化时contextInitialized会自动调用
1.5.3. contextDestroyed方法:当ServletContext对象被销毁时,contextDestroyed会自动调用
1.5.4. 利用contextInitialized方法,在ServletContext被创建时,读取上一次保存在硬盘中的文件数据,并将网站访问量的值保存在ServletContext对象
1.5.5. 利用contextDestroyed方法,在ServletContext被销毁时,获取ServletContext对象的访问量的值,写入硬盘的指定文件
1.5.6. 登录功能中每次用户登录,使用ServletContext的count变量来记录登录的次数
1.5.7. 在web.xml中配置listener
<!-- 配置自定义监听器:在ServletContext对象创建或销毁时进行业务操作 -->
<listener>
<listener-class>com.listener.TestListener</listener-class>
</listener>
2. 过滤器
2.1. 过滤器:使用过滤器,在一次请求发送到Servlet程序的前后进行拦截请求,做业务处理
2.2. 过滤器作用:用来统一设置字符编码或者权限控制
2.3. 设置过滤器的步骤
2.3.1. 自定义过滤器,implements javax.servlet.Filter
2.3.2. 在doFilter方法中进行业务操作,例如设置字符编码
2.3.3. Request和response对象需要向下转型为HttpServletRequest,HttpServletResponse
2.3.4. chain.doFilter(req, resp); 将被拦截的请求继续交给对应的servlet程序处理
2.4. 过滤器设计采用了递归算法,一次请求被过滤器拦截后,会两次进入过滤器
2.4.1. 第一次进入过滤器:请求被拦截时
2.4.2. 第二次进入过滤器:对应的servlet程序代码执行完毕后,且返回下一个请求路径之前
3. JSP页面权限控制的步骤
3.1. 设计公共的jsp页面:统一处理没有保存session数据的请求,如果session中不存在指定的数据,则将当前请求重定向到登录页面
Common.jsp代码
<%
if(session.getAttribute("uname")==null){
response.sendRedirect("login.jsp");
return;
}
%>
3.2. 在需要设置权限的JSP页面引用公共JSP页面
<%@ include file="common.jsp" %>