首页 ssh中自定义监听器,拦截器,过滤器

ssh中自定义监听器,拦截器,过滤器

举报
开通vip

ssh中自定义监听器,拦截器,过滤器SSH中自定义监听器、拦截器、过滤器1、自定义监听器a)自定义监听器有哪些监听器的定义是在web.xml中完成,其实做过ssh项目的人并不陌生监听器,主要是因为spring提供了监听器就是org.springframework.web.context.ContextLoaderListener如果我们想自己定义一个监听器来完成我们自己的特定功能怎么办呢,struts为我们提供了自定义servlet监听器,他们主要有ServletContextListenerServlet的上下文监听,它主要实现监听ServletC...

ssh中自定义监听器,拦截器,过滤器
SSH中自定义监听器、拦截器、过滤器1、自定义监听器a)自定义监听器有哪些监听器的定义是在web.xml中完成,其实做过ssh项目的人并不陌生监听器,主要是因为spring提供了监听器就是org.springframework.web.context.ContextLoaderListener如果我们想自己定义一个监听器来完成我们自己的特定功能怎么办呢,struts为我们提供了自定义servlet监听器,他们主要有ServletContextListenerServlet的上下文监听,它主要实现监听ServletContext的创建和删除。该接口提供了两种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 contextInitialized(ServletContextEventevent);通知正在收听的对象,应用程序已经被加载和初始化。contextDestroyed(ServletCotextEventevent);通知正在收听的对象,应用程序已经被载出,即关闭。ServletAttributeListener主要实现监听ServletContext属性的增加,删除和修改。该接口提供了一下3个方法attributeAdded(ServletContextAttributeEventevent);当有对象加入Application的范围时,通知正在收听的对象attributeReplaced(ServletContextAttributeEventevent);当在application的范围有对象取代另一个对象的时,通知正在收听的对象attributeRemoved(ServletContextAttributeEventevent);当有对象从application的范围移除时,通知正在收听的对象HttpSessionListenerHTTP会话监听,该接口实现监听HTTP会话创建、销毁。该接口提供了一下两种方法sessionCreated(HttpSessionEventevent);通知正在收听的对象,session已经被加载及初始化sessionDestoryed(HttpSessionEventevent)l通知正在收听的对象,session已经被载出(HttpSessionEvent类的主要方法是getSession(),可以使用该方法回传一个session对象)HttpSessionActivationListener该接口实现监听HTTP会话active和passivate。该接口提供了一下3个方法attributeAdded(HttpSessionBindingEventevent);当有对象加入session的范围时,通知正在收听的对象attributeReplaced(HttpSessionBindingEventevent);当在session的范围有对象取代另一个对象时,通知正在收听的对象。attributeRemoved(HttpSessionBindingEventevent);当有对象从session的范围有对象取代另一个对象时,通知正在收听的对象其中HttpSessionBindingEvent类主要有三个方法:getName()、getSession()和getValue()HttpBindingListener接口实现监听HTTP会话中对象的绑定信息。它是唯一不需要在web.xml中设定Listener的。该接口提供了以下2个方法valueBound(HttpSessionBindingEventevent);当有对象加入session的范围时会被自动调用valueUnBound(HttpSessionBindingEventevent);当有对象从session的范围内移除时会被自动调用HttpSessionAttributeListener该接口实现监听HTTP会话中属性的设置请求。该接口提供了以下两个方法。通知正在收听的对象,通知正在收听的对象,通知正在收听的对象,通知正在收听的对象,sessionDidActivate(HttpSessionEventevent);它的session已经变为有效状态。sessionWillPassivate(HttpSessionEventevent);它的session已经变为无效状态ServletRequestListener该接口提供了以下两个方法。requestInitalized(ServletRequestEventevent)ServletRequest已经被加载及初始化requestDestroyed(ServletRequestEventevent)ServletRequest已经被载出ServletRequestAttributeListener该接口提供了一下三种方法当有对象加入当在request的当有对象从attributeAdded(ServletRequestAttributeEventevent);request的范围时,通知正在收听的对象attributeReplaced(ServletRequestAttributeEventevent);范围内有对象取代两一个对象时,通知正在收听的对象attributeRemoved(ServletRequestAttributeEventevent);request的范围移除时,通知正在收听的对象b)怎么去自定义监听器1)在web.xml中加入这一样一段话com.wlm.iagtc.listener.SessionListener把自己定义的监听器类的全路径写进去SessionListener.java类packagecom.wlm.iagtc.listener;importjava.util.Enumeration;importjavax.servlet.HYPERLINK"http://http.HttpSession"http.HttpSession;importjavax.servlet.HYPERLINK"http://http.HttpSessionEvent"http.HttpSessionEvent;importjavax.servlet.HYPERLINK"http://http.HttpSessionListener"http.HttpSessionListener;publicclassSessionListenerimplementsHttpSessionListener{publicvoidsessionCreated(HttpSessionEventse){System.out.println("session监听器启动!!!");HttpSessionsession=se.getSession();Enumerationlogin=session.getAttributeNames();if(login.hasMoreElements()){System.out.println(”监听到了session对象的创建"+login.nextElement());}System.out.println(session.getId()+"——id");}publicvoidsessionDestroyed(HttpSessionEventse){System.out.println("session监听器销毁!!!");HttpSessionsession=se.getSession();Enumerationlogin=session.getAttributeNames();if(login.hasMoreElements()){System.out.println(”监听到session对象的消失!"+login.nextElement());}}}就这样就可以监听session对象的创建和销毁了注:session的创建:对象在你打开浏览器访问网站的一瞬间就框架就已经创建了Session的销毁:session的销毁有三种方式1、关闭浏览器2、利用代码invalidate。方法销毁session对象3、设置session过期时间,销毁session5你可以根据不同的接口,来监听不同的事件。2、自定义过滤器a)过滤器的创建过滤器struts2自己就定义的有,是默认的过滤器在web.xml中struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*过滤器是Servlet2.3以上新增加的一个功能,其技术也是非常强大的。通过Filter技术可以对WEB服务器的文件进行拦截,从而实现一些特殊的功能。在JSP开发应用中也是必备的技能之一。Filter可以改变一个request(请求)和修改一个response(响应)。Filter不是一个Servlet,它不能产生一个response,它能够在一个requsst到达Servlet之前预处理request,也可以在离开Servlet时处理response。当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源关联,如果有的话容器把请求交给过滤器处理,在过滤器中,可以改变请求的内容,或者重新设置请求的信息,然后再将请求发送给目标资源,当目标资源对请求做出响应后,容器同样将响应先转发给过滤器,过滤器可以对响应的内容进行转换,然后再将响应发送到客户端b)怎么去自定义过滤器vfilter>vfilter-name>SessionFilterv/filter-name>vfilter-class>com.wlm.iagtc.filter.SessionFilterv/filter-class>vinit-param>vparam-name>logonStringsv/param-name>vparam-value>/register.jsp;/login.jspv/param-value>vparam-name>includeStringsv/param-name>vparam-value>.do;.jspv/param-value>vparam-name>redirectPathv/param-name>vparam-value>/system/error.dov/param-value>vparam-name>disabletestfilterv/param-name>vparam-value>Nv/param-value>vfilter-name>SessionFilterv/filter-name>vurl-pattern>/*v/url-pattern>vfilter-name>SessionFilter2v/filter-name>vfilter-class>com.wlm.iagtc.filter.SessionFilter2v/filter-class>vparam-name>loginv/param-name>vparam-value>/login.jspv/param-value>vfilter-name>SessionFilter2v/filter-name>vurl-pattern>/*v/url-pattern>对应的java文件为SessionFilter.java文件packagecom.wlm.iagtc.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.HYPERLINK"http://http.HttpServletRequest"http.HttpServletRequest;importjavax.servlet.HYPERLINK"http://http.HttpServletResponse"http.HttpServletResponse;importjavax.servlet.HYPERLINK"http://http.HttpServletResponseWrapper"http.HttpServletResponseWrapper;publicclassSessionFilterimplementsFilter{publicFilterConfigfilterChain;publicvoiddestroy。{this.filterChain=null;}publicstaticbooleanisContains(Stringcontainer,String]]regx){for(inti=0;iStringlogonStrings=filterChain.getInitParameter("logonStrings");//StringincludeStrings=filterChain.getInitParameter("includeStrings");//StringredirectPath=/*hrequest.getContextPath()*/filterChain.getInitParameter("redirectPath");//Stringdisabletestfilter=filterChain・getInitParameter("disabletestfilter");//if(disabletestfilter.toUpperCase().equals("Y")){chain.doFilter(request,response);return;}String]]logonList=logonStrings.split(";");String]]includeList=includeStrings.split(";");〃v!--对登录页面不进行过滤-->if(this.isContains(hrequest.getRequestURI(),logonList)){chain.doFilter(request,response);System.out.println('过滤不需要进行过滤的页面");return;}//if(!this.isContains(hrequest.getRequestURI(),includeList)){chain.doFilter(request,response);System.out.println(''过滤指定后缀");return;}//Stringuser=(String)hrequest.getSession().getAttribute("loginUser");if(user==null){//action//wrapper.sendRedirect(redirectPath);//jsphtmlSystem.out.println(redirectPath+"过滤用户判断”);request.getRequestDispatcher(redirectPath).forward(request,response);return;}else{chain.doFilter(request,response);return;/***初始化*/publicvoidinit(FilterConfigfilterConfig)throwsServletException{filterChain=filterConfig;}}SessionFilter2・java文件packagecom.wlm.iagtc.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.HYPERLINK"http://http.HttpServletRequest"http.HttpServletRequest;importjavax.servlet.HYPERLINK"http://http.HttpServletResponse"http.HttpServletResponse;importjavax.servlet.HYPERLINK"http://http.HttpServletResponseWrapper"http.HttpServletResponseWrapper;publicclassSessionFilter2implementsFilter{publicFilterConfigfilterChain;publicvoiddestroy。{this.filterChain=null;}publicstaticbooleanisContains(Stringcontainer,String]]regx){for(inti=0;iStringlogin=filterChain.getInitParameter("login");String]]loginList=login.split(";");System.out.println(hrequest.getRequestURI()+"——");if(!this.isContains(hrequest.getRequestURI(),loginList)){chain.doFilter(request,response);System.out.println("第二个过滤器过滤了。");return;}else{chain.doFilter(request,response);return;}/***初始化*/publicvoidinit(FilterConfigfilterConfig)throwsServletException{filterChain=filterConfig;}}3、自定义拦截器自定义拦截器在struts2中拦截器是用来拦截Action的,在执行Action之前拦截器会起一定的作用,执行一些预先处理的代码,接着去执行Action中相关的方法,之后,又会回到拦截器里面,接着去执行后续的一些操作拦截器可以有多个,组成拦截器栈拦截器是顺序执行的拦截器如果拦截下了一个页面,那么下面的拦截器就不会去执行拦截器进入的时候是顺序执行,当invoke()后还有代码的时候,拦截器从action返回的时候又会倒序执行拦截器invoke()后的代码自定义拦截器定义拦截器的代码在struts.xml中,要放在package中/login.jsp/error.jsp注:在定义拦截器栈的时候一定要把这句话加上,否则你的action中的request,response好像就没有用了,一直都报空指针异常。女口果你要应用这个拦截器栈在你的action中加入完整的写法/showAll.jsp这样在你访问showAllUser这个action的时候拦截器就会提前拦截这个action,如果符合条件在进入action自定义的拦截器类LoginUserlnterceptor.ja类packagecom.wlm.iagtc.filter;importjava.util.Map;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;publicclassLoginUserInterceptorextendsAbstractInterceptor{/****/privatestaticfinallongserialVersionUID=1L;@Overridepublicvoidinit(){System.out.println(”第一个拦截器的初始化!!!");super.init();}@OverridepublicStringintercept(ActionInvocationinvocation)throwsException{//取得请求相关的ActionContext实例ActionContextctx=invocation.getInvocationContext();Mapsession=ctx.getSession();Stringuser=(String)session.get("loginUser");if(user!=null&&user.length()>0){System.out.printlnC第一个拦截器拦截了!!!");invocation.invoke();}ctx.put("message","你还没有登录");System.out.println(”第一个拦截器拦截了!!!");returnAction.SUCCESS;}@Overridepublicvoiddestroy(){System.out.println(”第一个拦截器的结束");super.destroy();}}LoginUserInterceptor2.java类packagecom.wlm.iagtc.filter;importjava.util.Map;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;publicclassLoginUserInterceptor2extendsAbstractInterceptor{@Overridepublicvoidinit(){System.out.println(”第二个拦截器的初始化");super.init();}@OverridepublicStringintercept(ActionInvocationinvocation)throwsException{//取得请求相关的ActionContext实例ActionContextctx=invocation.getInvocationContext();Mapsession=ctx.getSession();Stringuser=(String)session.get("loginUser");System.out.printlnC第二个拦截器拦截了!!!");if(user=="wlm"){invocation.invoke();!!");System.out.println(”第二个拦截器拦截了returnAction.SUCCESS;}@Overridepublicvoiddestroy。{System.out.printlnC第二个拦截器的结束”);super.destroy();}}
本文档为【ssh中自定义监听器,拦截器,过滤器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
明明如月
暂无简介~
格式:doc
大小:110KB
软件:Word
页数:15
分类:高中语文
上传时间:2022-08-15
浏览量:0