Struts2入门04

四、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>
原文地址:https://www.cnblogs.com/harriets-zhang/p/13450866.html