Struts2中的拦截器

1、拦截器的重要性

Struts2中的很多功能都是由拦截器完成的。比如:servletConfig,staticParam,params,modelDriven等等。

是AOP编程思想的一种应用形式。

2、拦截器的执行时机:
这里写图片描述

3、自定义拦截器
这里写图片描述
3.1、拦截器的类试图(初级版本):

3.2、编写步骤:

a、编写一个类,继承AbstractInterceptor类或者实现Interceptor接口。重写intercept方法。
这里写图片描述

b、配置拦截器:注意拦截器必须先声明再使用
这里写图片描述

<interceptor-ref name="demo1Interceptor"></interceptor-ref>

一定要写,不然不执行拦截器

3.3、执行顺序
这里写图片描述

3.4、多个拦截器的执行顺序
这里写图片描述

3.5、intercept方法的返回值
这里写图片描述

4、拦截器的应用:

4.1、检查登录的拦截器案例

public class CheckLoginInterceptor extends MethodFilterInterceptor {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
        if (ServletActionContext.getRequest().getSession().getAttribute(sessionName) == null) {
            System.out.println("会话中无用户,返回登录页面");
            return "nouser";
        }
        return invocation.invoke();
    }

    private String sessionName;

    public String getSessionName() {
        return sessionName;
    }

    public void setSessionName(String sessionName) {
        this.sessionName = sessionName;
    }
}
<?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>
<struts>
    <package name="struts-user" extends="global-package" namespace="/user">

       <interceptors>
          <interceptor name="checkLogin" 
          class="net.seehope.ssh.struts.web.interceptor.CheckLoginInterceptor"> 
           </interceptor>
       <interceptors> 
       <action name="*" class="net.seehope.ssh.struts.web.action.UserAction"
            method="{1}">
           <interceptor-ref name="checkLogin">
              <param name="sessionName">USER_IN_SESSION</param>
              <param name="checkLogin.excludeMethods">userRegist</param>
           </interceptor-ref>   
          <result name="nouser">/login.jsp</result>
          <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

4.2、案例中的问题
问题:由于我们写了自己的拦截器,默认的拦截器不起作用了。

解决办法:

a、把默认拦截器加入到配置文件中
这里写图片描述

b、a中暴露的问题:当有多个拦截器时,需要改写的地方非常多。

解决办法:抽取公共的包,把全局配置放入公共包中。

这里写图片描述

c、b中的问题:还要再每个动作方法中引入拦截器。能不能不写呢?

思路:我们在设置【开发模式】时,覆盖掉了一个default.properties中的常量,能不能把struts-default.xml中的默认拦截器栈的设置给覆盖掉呢?答案是可以的。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值