四、Struts2拦截器
1、创建拦截器类的3中方式
方式一、实现Interceptor接口(不推荐)
public class InterceptorD1 implements Interceptor { @Override public void destroy() { } //拦截器第一种创建方式:实现Interceptor接口 //拦截器生命周期:随项目的创建而创建,随项目关闭而关闭 @Override public void init() { } @Override public String intercept(ActionInvocation invocation) throws Exception { return null; } }
方式二、继承AbstractInterceptor(不推荐)
//创建方式2:继承AbstractInterceptor @Override public String intercept(ActionInvocation invocation) throws Exception { return null; }
方式三、继承MethodFilterInterceptor
public class InterceptorD3 extends MethodFilterInterceptor { //创建方式3:继承MethodFilterInterceptor //功能:定制拦截的方法。 //定制哪些方法需要拦截 //定制哪些方法不需要拦截 @Override protected String doIntercept(ActionInvocation invocation) throws Exception { return null; } }
2、拦截器放行与不放行
放行:
在拦截器类中调用:invocation.invoke()继续调用递归链实现放行
invocation.invoke()最终会返回Action中的result结果字符,
故在放行的时候需要将结果字符放回:return invocation.invoke();
不放行:
不放行的话就不执行invocation.invoke()
并返回一个自定义结果字符用于提示为什么不放行
3、注册配置拦截器,自定义需要被拦截的方法或者不需要被拦截的方法
如果忘记如何配置,可以在struts2核心包下的struts-default.xml中找到struts-default这个package进行查看如何配置
配置拦截器步骤:
1、注册拦截器
2、配置拦截器栈
3、设置包中的默认拦截器栈
在将自定义拦截器加入拦截器栈后,可以配置拦截方法
excludeMehods:不需要被拦截的方法
includeMethods:需要被拦截的方法
<?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="inter" extends="struts-default" namespace="/"> <interceptors> <!-- 注册拦截器 --> <interceptor name="MInter" class="InterceptorD.MyInterceptor"></interceptor> <!-- 配置拦截器栈 --> <interceptor-stack name="MyInter"> <interceptor-ref name="MInter"> <param name="excludeMethods">add,update</param> <!--自定义的方法拦截<param name="includeMethods"></param>--> </interceptor-ref> <!-- 建议是将自定义拦截器放在默认拦截器之前 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 配置默认拦截器栈 --> <default-interceptor-ref name="MyInter"></default-interceptor-ref> <!-- 配置全局结果集 --> <global-results> <result name="error">/error.jsp</result> </global-results> <action name="Inet_*" class="InterceptorD.ITestAction" method="{1}"> <result name="success" type="redirect">/InterceptorD.jsp</result> </action> </package> </struts>
4、Struts2常用页面标签
需要在JSP页面引入Struts2标签库
<%@taglib prefix="s" uri="/struts-tags" %>
s:iterator 遍历标签
<s:iterator value="#list"> <s:property/> </s:iterator> <s:iterator value="#list" var="user"> <s:property value="#user.name"/> <s:property value="#user.age"/> </s:iterator> <s:iterator begin="1" end="100" step="2"> <s:property/> </s:iterator>
s:property 数据标签
<s:property value="#lsit.size()"/> <s:property value="#session.user.name"/>
s:if/else if /else
<s:if test="#session.user.name=zhangsan" > <h2>hello zhangsan</h2> </s:if> <s:elseif test="#session.user.name.length>3"> <h2>hello >3</h2> </s:elseif> <s:else> hello </s:else>