抢街饭 通过本文主要向大家介绍了java spring拦截器,java拦截器,java过滤器和拦截器,java中拦截器的作用,java登录拦截器等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文实例讲述了Java中的拦截器、过滤器、监听器用法。分享给大家供大家参考,具体如下:
一、拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方 法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。
2.拦截器栈(Interceptor Stack)Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
package com.lzw.struts.Interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class MyInterceptor extends MethodFilterInterceptor { private static final long serialVersionUID = -6410044851077844880L; /** * 在struts.xml <param name="lzw">struts</param> */ private String lzw; public String getLzw() { return lzw; } public void setLzw(String lzw) { this.lzw = lzw; } @Override public void destroy() { System.out.println("destroy!"); } @Override public void init() { System.out.println("init!"); } @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println("MyInterceptor-start"); System.out.println(lzw); String result = invocation.invoke(); System.out.println("MyInterceptor-end"); return result; } }</div>
package com.lzw.struts.Interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class FirstInterceptor extends MethodFilterInterceptor { private static final long serialVersionUID = 1L; @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println("FirstInterceptor-Start"); String result = invocation.invoke(); System.out.println("FirstInterceptor-End"); return result; } }</div>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--开发模式开关,本地可以设为true帮助调试问题,部署到服务器上设为false--> <constant name="struts.devMode" value="false"/> <!--务必配上该属性,否则会导致AOP注入异常--> <constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true"/> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.multipart.maxSize" value="1000000000"/> <package name="strutsLzw" extends="struts-default" namespace="/"> <interceptors> <interceptor name="lzwInterceptorA" class="com.lzw.struts.Interceptor.MyInterceptor"> <param name="lzw">struts</param> </interceptor> <interceptor name="lzwInterceptorB" class="com.lzw.struts.Interceptor.FirstInterceptor"> </interceptor> <!-- 定义自己的拦截器栈 --> <interceptor-stack name="myStack"> <interceptor-ref name="lzwInterceptorA"></interceptor-ref> <interceptor-ref name="lzwInterceptorB"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 全局的每个action都会拦截 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <!-- 增加method="lzwTest" 执行LoginAction的lzwTest方法 否则执行execute方法 --> <action name="login" class="com.lzw.struts.action.LoginAction" method="lzwTest"> <result name="success">/result.jsp</result> <result name="failer">/error.jsp</result> <result name="input">/error.jsp</result> </action> </package> </struts></div>
或者:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="strutsLzw" extends="struts-default"> <interceptors> <interceptor name="lzwInterceptor" class="com.lzw.struts.Interceptor.MyInterceptor"> <param name="lzw">struts</param> </interceptor> </interceptors> <!-- 增加method="lzwTest" 执行LoginAction的lzwTest方法 否则执行execute方法 --> <action name="login" class="com.lzw.struts.action.LoginAction" method="lzwTest"> <result name="success">/result.jsp</result> <result name="failer">/error.jsp</result> <result name="input">/error.jsp</result> <interceptor-ref name="lzwInterceptor"></interceptor-ref> <!--增加defaultStack 否则 验证拦截器不执行,也就是 validate 方法不执行--> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts></div>
web.xml中加入:
<filter> <filter-name>struts2</filter-name> <!-- 已经过时了<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>com.lzw.struts.action</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></div>
package com.lzw.struts.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { System.out.println("=====execute====="); if ("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())) { return "success"; } else { this.addFieldError("username", "username or password error"); return "failer"; } } @Override public void validate() { System.out.println("=====validate====="); if (null == this.getUsername() || "".equals(this.getUsername().trim())) { this.addFieldError("username", "username required"); } if (null == this.getPassword() || "".equals(this.getPassword().trim())) { this.addFieldError("password", "password required"); } } public String lzwTest() { System.out.println("======Test===="); return SUCCESS; } }</div>