J2EE与中间件 学习笔记2 Web组件 Servlet过滤器 监听器

看过前一篇文章的都知道我根本不会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的,希望能略有帮助。

你可能感兴趣的:(J2EE与中间件,J2EE与中间件)