看过前一篇文章的都知道我根本不会J2EE,全是从零开始,所以这一篇可能会用一些比较古老的做法而不是最新的做法。非常显然的是,我对于这个方面不是很感兴趣,但是考虑到非常的实用,因此还是学一下。这一篇的主要主题是拦截器、监听器。因为这恰好是我们作业的内容(逃。等到学期结束了我会把这个项目的github仓库公开的,现在为了防止抄袭,因此现在不公开。。。然后这篇文章的主要内容来源自PPT和菜鸟教程。
Web组件存活期
WebContext:作用域为应用程序运行期,工程启动后存在,当容器关闭时被销毁;
Session:作用域为会话期,从打开一个浏览器窗口开始,关闭窗口,会话关闭,当会话超时,被销毁;
Request:作用域为用户请求期,只要Server向客户端输出内容,就被销毁;
Page:作用域为页面执行期。
组件的获取
WebContext
You retrieve the web context using the getServletContext method. The web context provides methods for accessing:
- Initialization parameters
- Resources associated with the web context
- Object-valued attributes
- Logging capabilities
ServletContext包含Web应用的配置信息,Servlet需要的某些外部资源的所在位置等信息
ServletContext sc=getServletContext();
sc.setAttribute("name", "value");
sc.getAttribute("name");
sc.removeAttribute("name");
非常惭愧,这段代码我在写笔记的时候还没有实验过。。。
过滤器
其目标有两个:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
方法
javax.servlet.Filter接口有三个方法,doFilter, init和destroy。其中最重要的是doFilter。
响应顺序
web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序。
具体应用
代码重用
应用安全策略
日志
为特定目标浏览器传输XML输出
图像转换、加密
动态压缩输出
一个例子
在具体的项目中可能会遇到中文乱码的问题,可以加这样一个过滤器。
protected void doFilter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对request body进行统一编码
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
System.out.println(name);
response.setContentType("text/html;charset=utf-8");
}
监听器
有多种监听器。我现在也不是很明白,但是找到了这么一篇文章作为作业的参考。参考
然后我发现,ServletContext应该是整个服务器的监听,而HttpSession应该是单个Session的监听。理解了这个,写这次的作业就很简单了。。。
等到作业检查完了我会设置成public的,希望能略有帮助。