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"
-->