- Servlet的扩展工具及应用
- 1.监听器接口(Listener)
- (1).监听器的概述:
- (2).作用域对象:
- (3).监听器接口详解:
- a.ServletContextListener接口:
- b.ServletContextAttributeListener接口:
- 2.过滤器接口(Filter)
- (1).过滤器的概述:
- (2).使用规范:
- (3).使用语法:
- (4).过滤器的应用(防止用户恶意登录)
- 3.通信流程图的总结:
简介:
①来自Servlet规范中,存在共8个接口;
②需要开发人员自行去实现,并无现成的实现类;
作用:
(2).作用域对象:用于监控 【作用域对象生命周期变化时刻】
或者【作用域对象共享数据变化时刻】。
概念:
Servlet中,服务器内存中可存在某些条件下为两个Servlet间提供数据共享的对象,叫作作用域对象。
分类:
Ⅰ.ServletContext:全局作用域对象;
Ⅱ.HttpSession:会话作用域对象;
Ⅲ. HttpServletRequest:请求作用域对象;
监听器接口实现类开发规范:
Ⅰ.根据实际情况,选择适当的作用域对象;
Ⅱ.重写监听器接口声明【监听事件处理方法】;
Ⅲ.在web.xml文件将监听器接口实现对象注册到Http中。
web.xml文件的注册语法:
(3).监听器接口详解: a.ServletContextListener接口:(接口实现src下的地址+类名)
作用:
合法的检测【全局作用域对象】被初始化销毁时刻;
语法规则:
//【全局作用域对象】被初始化时被调用 public void contextInitialized(); //【全局作用域对象】被销毁时被调用 public void contextDestroyed();b.ServletContextAttributeListener接口:
作用:
合法监测全局作用域对象共享数据变化时刻。
语法规则:
//在【全局作用域对象】中添加数据时被调用 public void attributeAdded(); //在【全局作用域对象】中更新数据时被调用 public void attributeReplaced(); //在【全局作用域对象】中删除数据时被调用 public void attributeRemoved();
修改数据的案例:
//拿到【全局作用域对象】
ServletContext application = request.getServletContext();
//增添数据
application.setAttribute("key1",100);
//修改数据
application.setAttribute("key1",200);
//删除数据
application.removeAttribute("key1");
2.过滤器接口(Filter)
(1).过滤器的概述:
简介:
Ⅰ.来自Servlet规范,存在与servlet-api.jar包下;
Ⅱ.需开发人员自行实现,无现成实现类;
作用:
(2).使用规范:Ⅰ.用于服务器调用资源以前,进行拦截;
Ⅱ.拦截Http服务器,检测当前请求的合法性;
Ⅲ.拦截Http服务器,对当前请求进行增强操作;
Ⅰ.创建一个类,实现Filter接口;
Ⅱ.实现doFilter()方法;
Ⅲ.在web.xml中注册到Http服务器中;
在web.xml中的注册语法:
需被拦截文件名处的三种泛指:
(假设img目录下存储图片ice.jpg)
Ⅰ./img/ice.jpg
Ⅱ.*.jpg
Ⅲ./img
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = null;
//通过【请求对象】获取到请求行中的uri
String uri = request.getRequestURI();
//如果登录信息出现login相关的,过滤器无条件通过
if (uri.indexOf("login")!=-1 || "/myWeb/".equals(uri)){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
//如果访问其他资源文件,则需验证用户的session
session = request.getSession(false);
if (session != null){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
request.getRequestDispatcher("login_error.html").forward(servletRequest, servletResponse);
}
3.通信流程图的总结:



