JavaWeb中的过滤器和事件监听

来源:互联网 发布:mysql中limit中#用法 编辑:程序博客网 时间:2024/06/11 21:38
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:LovingshuDate:2011.09.15Remark:This is the review of the Java Web Advance Chapter 5:"the filter and event"-->

原创粉丝点击