Review of JavaWeb_Adv Chapter5 the filter and the event

一,过滤器(Filter)
作用,在客户端向服务器发送消息时,如果有过滤器那么请求就要先经过过滤器,
它的作用是可以对客户端的信息进行一系列的操作,从而达到了过滤的目的
a)要实现过滤器必须要实现一个借口(javax.servlet.filter)
如:public class CheckInfo implements filter{}
重写接口中的方法从而达到过滤器的目的!
	1)public void init(FilterConfig config){
			[这个方法里面是在过滤器初始化的时候进行调用]
		}
	2)public void doFilter(ServletRequest req, ServletResponse rep,
			FilterChain chain){
			[这个方法就是开始过滤的主要方法了]
			[
				在这个方法里最好是要写入这两样东西(把类型转换一下):
				1.HttpServletRequest request=(HttpServletRequest)req;
				2.HttpServletResponse response=(HttpServletResponse)rep;
				同时也可以对编码进行处理:
				request.setCharacterEncoding="utf-8";
				response.setCharacterEncoding="utf-8";
				3.最后不要忘了过滤过后要跳转哦
				chain.doFilter(request,response);
				注意:当这里不是chain.doFilter()跳转时,
				那么跳转的目的页面最好是写绝对路径,这里
				有个很好的方法:request.getContextPath()
				这个方法返回项目名(前面已经包含了"/"),所以
				我们这样写:response.sendRedirect(request.getContextPath()+"/lovingshu.jsp")
			]
		}
	3)public void destroy(){
		[销毁时]
	}
当过滤器的类写完后不能忘记在web.xml中进行配置,步骤如下:
<!--注意这个要写到servlet之前哦-->
<filter>
	<filter-name>myFilter</filter-name>
	<filter-class>[包名.类名]</filter-class>
</filter>
<filter-mapping>
	<filter-name>myFilter</filter-name>
	<url-pattern>
		[
			注意:这个路径的写法十分有技巧,前面必须要有一个"/"
			"/*"表示过滤所有页面,
			"/pages/"表示过滤Web_Root目录下的pages目录下的页面
		]
	</url-pattern>
</filter-mapping>
<--这样过滤器的配置文件就写好了-->

二,事件监听
a)分类:
	1)Servlet上下文监听(相对于application)
	2)Http会话监听(相对于session)
	3)请求监听(相对于request)
b)分别应该实现的接口
	我自己小结一下:
	application监听需要实现的接口:
		1)ServletContextListener(这个里面包含application的创建和销毁)
		2)ServletContextAttributeListener(这个里面包含application的属性的增,删,改)
	session监听需要实现的接口:
		1)HttpSessionListener(这个里面包含session的创建和销毁)
		2)HttpSessionAttributeListener(这个里面包含session的属性的增,删,改)
	request监听需要实现的接口:
		1)ServletRequestListener(这个里面包含request的创建和销毁)
		2)ServletRequestAttributeListener(这个里面包含request的属性的增,删,改)
	它们需要重写的方法:
	application与request一样:
	public void [context/Request]Initialed([ServletContextEvent/ServletRequestEvent] args){}
	public void [context/Request]Destroyed([ServletContextEvent/ServletRequestEvent] args){}
	session为:
	public void sessionCreated(HttpSessionEvent args){}
	public void sessionDestroyed(HttpSessionEvent args){}
	
	它们的AttributeListener对应的方法都是一样的,只是对应的参数类型不同
	//增(参数对应为application-session-request)
	public void attributeAdded(
		[
			ServletContextAttributeEvent/HttpSessionBindingEvent/ServletRequestAttributeEvent
		]
			args
	){}
	
	public void attributeRemoved(
		[
			ServletContextAttributeEvent/HttpSessionBindingEvent/ServletRequestAttributeEvent
		]
			args
	){}
	
	public void attributeReplaced(
		[
			ServletContextAttributeEvent/HttpSessionBindingEvent/ServletRequestAttributeEvent
		]
			args
	){}
	说明:当application,session,request被创建,销毁,属性值增加,修改,删除就会调用对应的方法
c)类写好后配置web.xml文件
	注意:也是配置在servlet之前
	<listener>
		<listener-class>[包名.类名]</listener-class>
	</listener>
<--配置完毕-->

另外:
关于我昨天写的那个J2EE的JSTL标准标签库,我要补充一点:
<%@ taglib uri="http://java.sun.com/jsp/jstl/Functions" prefix="fn"%>
关于这个标签并不是在JSP页面中写"<fn:XXX>"就可以唤出其功能,不是这样的,
这个标签要配合EL表达式使用:
比如说取集合,数组,字符串的长度:${fn:length(sessionScope.list_stu0)}
这个函数库还有很多的方法,呵呵~Good Night
<!--
Author:Lovingshu
Date:2011.09.15
Remark:This is the review of the Java Web Advance Chapter 5:"the filter and event"
-->