`
Harold_xlp
  • 浏览: 159198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

基于Struts2.1 annotation的Interceptor代码实例

阅读更多

查阅了网络上的文章,同时结合自己的实践,将今天的学习结果分享如下,欢迎大家拍砖。

/WEB-INF/lib/下包含以下jar包(但不只这两个)
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar

Interceptor代码如下:

 view plaincopy to clipboardprint?
package com.kompin.kind.action;  
 
import java.util.Map;  
 
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
 
public class AuthorityInterceptor extends AbstractInterceptor {  
 
    @Override 
    public String intercept(ActionInvocation invocation) throws Exception {  
        System.out.println("Enter AuthorityInterceptor");  
        Map session = ActionContext.getContext().getSession();  
        Object userId = session.get("userId");  
        if (userId == null)  
        {  
            return "login";  
        }  
        else 
        {  
            return invocation.invoke();  
        }  
    }  
 

package com.kompin.kind.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthorityInterceptor extends AbstractInterceptor {

 @Override
 public String intercept(ActionInvocation invocation) throws Exception {
  System.out.println("Enter AuthorityInterceptor");
  Map session = ActionContext.getContext().getSession();
  Object userId = session.get("userId");
  if (userId == null)
  {
   return "login";
  }
  else
  {
   return invocation.invoke();
  }
 }

}

struts.xml文件配置如下:

view plaincopy to clipboardprint?
<struts>  
 
    <constant name="struts.118n.encoding" value="GBK"/>  
    <constant name="struts.custom.i18n.resources" value="globalMessages"/>  
    <constant name="struts.convention.action.mapAllMatches" value="true"/>  
      
    <package name="kompinInterceptor" extends="struts-default">  
      
        <interceptors>  
            <interceptor name="authority"   
                class="com.kompin.kind.action.interceptor.AuthorityInterceptor"/>  
            <interceptor-stack name="auctionStack">  
                <interceptor-ref name="defaultStack"/>  
                <interceptor-ref name="authority"/>  
            </interceptor-stack>  
        </interceptors>         
          
        <default-interceptor-ref name="auctionStack"/>          
           
        <global-results>  
            <result name="login">/WEB-INF/jsp/login.jsp</result>  
            <result name="exception">/WEB-INF/jsp/error.jsp</result>  
        </global-results>  
          
    </package>       
       
</struts> 
<struts>

 <constant name="struts.118n.encoding" value="GBK"/>
 <constant name="struts.custom.i18n.resources" value="globalMessages"/>
 <constant name="struts.convention.action.mapAllMatches" value="true"/>
 
 <package name="kompinInterceptor" extends="struts-default">
 
  <interceptors>
   <interceptor name="authority"
    class="com.kompin.kind.action.interceptor.AuthorityInterceptor"/>
   <interceptor-stack name="auctionStack">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="authority"/>
   </interceptor-stack>
  </interceptors>  
  
  <default-interceptor-ref name="auctionStack"/>  
  
  <global-results>
   <result name="login">/WEB-INF/jsp/login.jsp</result>
   <result name="exception">/WEB-INF/jsp/error.jsp</result>
  </global-results>
  
 </package> 
 
</struts>

User action代码如下:

view plaincopy to clipboardprint?
package com.kompin.kind.action;  
 
import java.util.List;  
import java.util.Map;  
 
import org.apache.struts2.ServletActionContext;  
import org.apache.struts2.convention.annotation.Action;  
import org.apache.struts2.convention.annotation.InterceptorRefs;  
import org.apache.struts2.convention.annotation.InterceptorRef;  
import org.apache.struts2.convention.annotation.ParentPackage;  
import org.apache.struts2.convention.annotation.Result;  
import org.apache.struts2.convention.annotation.Results;  
 
import com.kompin.kind.business.UserBean;  
import com.kompin.kind.service.UserService;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionSupport;  
 
@ParentPackage("kompinInterceptor")  
@InterceptorRefs({  
    @InterceptorRef("defaultStack")  
})  
@Results({  
  @Result(name="login", location="/WEB-INF/jsp/login.jsp")  
})  
public class UserAction extends ActionSupport {  
 
    private Integer id;  
    private String name;  
    private String pass;  
    private String email;  
    private UserService userSvc;  
    private List<UserBean> users;  
    private UserBean user;  
 
    @Action(value="/regist",  
            results={  
                @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/login.jsp")  
                ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")  
                ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/regist.jsp")  
            }  
    )  
    public String regist()throws Exception{  
        try {  
            if(null == getName() ||null == getPass() || null == getEmail()){  
                return "input";  
            }  
            if (userSvc.addUser(getName(), getPass(), getEmail()) > 0) {  
                return "success";  
            }  
            return "failure";  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
            throw new Exception("注册用户出现异常");  
        }  
    }  
      
    @Action(value="/proShowUser",  
        interceptorRefs=@InterceptorRef("authority"),  
        results={  
            @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp")  
            ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")  
            ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp")  
        }  
    )     
    public String show()throws Exception{  
        try {  
            setUsers(userSvc.findAllUser());  
            return "success";  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
            throw new Exception("显示用户出现异常");  
        }  
    }  
    ...略...  

package com.kompin.kind.action;

import java.util.List;
import java.util.Map;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.kompin.kind.business.UserBean;
import com.kompin.kind.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@ParentPackage("kompinInterceptor")
@InterceptorRefs({
 @InterceptorRef("defaultStack")
})
@Results({
  @Result(name="login", location="/WEB-INF/jsp/login.jsp")
})
public class UserAction extends ActionSupport {

 private Integer id;
 private String name;
 private String pass;
 private String email;
 private UserService userSvc;
 private List<UserBean> users;
 private UserBean user;

 @Action(value="/regist",
   results={
    @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/login.jsp")
    ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")
    ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/regist.jsp")
   }
 )
 public String regist()throws Exception{
  try {
   if(null == getName() ||null == getPass() || null == getEmail()){
    return "input";
   }
   if (userSvc.addUser(getName(), getPass(), getEmail()) > 0) {
    return "success";
   }
   return "failure";
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   throw new Exception("注册用户出现异常");
  }
 }
 
 @Action(value="/proShowUser",
  interceptorRefs=@InterceptorRef("authority"),
  results={
   @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp")
   ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")
   ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp")
  }
 ) 
 public String show()throws Exception{
  try {
   setUsers(userSvc.findAllUser());
   return "success";
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   throw new Exception("显示用户出现异常");
  }
 }
 ...略...
}

Kind action代码如下:

view plaincopy to clipboardprint?
package com.kompin.kind.action;  
 
import java.util.List;  
 
import org.apache.struts2.ServletActionContext;  
import org.apache.struts2.convention.annotation.Action;  
import org.apache.struts2.convention.annotation.InterceptorRef;  
import org.apache.struts2.convention.annotation.InterceptorRefs;  
import org.apache.struts2.convention.annotation.ParentPackage;  
import org.apache.struts2.convention.annotation.Result;  
import org.apache.struts2.convention.annotation.Results;  
 
import com.kompin.kind.business.KindBean;  
import com.kompin.kind.service.KindService;  
import com.opensymphony.xwork2.ActionSupport;  
 
@ParentPackage("kompinInterceptor")  
@InterceptorRefs({  
    @InterceptorRef("auctionStack")  
})  
@Results({  
  @Result(name="login", location="/WEB-INF/jsp/login.jsp")  
})  
public class KindAction extends ActionSupport {  
      
    private KindService kindSvc;  
    private List kinds;  
    private String kindName;  
    private String kindDesc;  
    private KindBean kind;  
      
    /** 
     *  
     * @param kindSvc 
     */ 
    @Action(value="/proAddKind",  
            results={  
                @Result(name="success", type="chain", location="proViewKind")  
                ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp")  
                ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp")  
            }  
    )  
    public String addKind()throws Exception{  
        try {  
            if (kindSvc.addKind(kindName, kindDesc) > 0) {  
                return "success";  
            }  
            return "input";  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
            return "input";  
        }  
    }  
    ...略...  

package com.kompin.kind.action;

import java.util.List;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.kompin.kind.business.KindBean;
import com.kompin.kind.service.KindService;
import com.opensymphony.xwork2.ActionSupport;

@ParentPackage("kompinInterceptor")
@InterceptorRefs({
 @InterceptorRef("auctionStack")
})
@Results({
  @Result(name="login", location="/WEB-INF/jsp/login.jsp")
})
public class KindAction extends ActionSupport {
 
 private KindService kindSvc;
 private List kinds;
 private String kindName;
 private String kindDesc;
 private KindBean kind;
 
 /**
  *
  * @param kindSvc
  */
 @Action(value="/proAddKind",
   results={
    @Result(name="success", type="chain", location="proViewKind")
    ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp")
    ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp")
   }
 )
 public String addKind()throws Exception{
  try {
   if (kindSvc.addKind(kindName, kindDesc) > 0) {
    return "success";
   }
   return "input";
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return "input";
  }
 }
 ...略...

要点说明:

1. @ParentPackage("kompinInterceptor")必须和struts.xml的package的name一致,否则启动tomcat会报错:

"Unable to find interceptor class referenced by ref-name ..."

2. 如果Action中并不是所有的方法都要auctionStack拦截,参考UserAction的代码:

view plaincopy to clipboardprint?
@InterceptorRefs({  
 @InterceptorRef("defaultStack")  
}) 
@InterceptorRefs({
 @InterceptorRef("defaultStack")
})

3. 如果Action中所有的方法都经过同一个拦截器拦截,,参考KindAction的代码:

view plaincopy to clipboardprint?
@InterceptorRefs({  
    @InterceptorRef("auctionStack")  
}) 
@InterceptorRefs({
 @InterceptorRef("auctionStack")
})

4. 如果Action中的某些方法需要特定的拦截器拦截,参考UserAction的代码(请留意proShowUser的Action注解与regist的Action注解的不同点):

view plaincopy to clipboardprint?
@Action(value="/proShowUser",  
    interceptorRefs=@InterceptorRef("authority"),  
    results={  
        @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp")  
        ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")  
        ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp")  
    }  

 @Action(value="/proShowUser",
  interceptorRefs=@InterceptorRef("authority"),
  results={
   @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp")
   ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp")
   ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp")
  }
 )

5. 留意<interceptor-stack name="auctionStack">的定义。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kompin_dmx/archive/2010/11/06/5992256.aspx

分享到:
评论

相关推荐

    struts2 hibernate3 spring2.5 annotation 整合

    文件Spring_3300_Registration_11可能是一个示例项目,包含了上述整合的实例,包括Action、Service、DAO、配置文件等,开发者可以通过学习和运行这个项目来理解和实践Struts2、Hibernate3、Spring2.5的整合以及注解...

    struts2-Annotation

    在给定的“struts2-Annotation”主题中,重点是Struts2框架如何利用注解(Annotation)来增强其功能和简化配置。注解是一种元数据,可以在代码中嵌入,提供有关类、方法或字段的额外信息,而无需编写XML配置文件。 ...

    struts annotation.ppt

    Struts2注解是Java开发框架Struts2中的一种特性,它引入了JDK1.5及更高版本的注解(Annotation)概念,使得开发者能够更简洁地配置Struts2框架,减少XML配置文件的使用,提高开发效率。注解提供了一种方式,将元数据...

    struts2-core-2.0.11源码

    10. **注解支持(Annotations)**:从Struts2.1版本开始,框架引入了注解支持,允许开发者在Action类和方法上使用注解进行配置,这部分代码位于`org.apache.struts2.convention.annotation`包中。 在研究源码时,...

    基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (1)

    标题中的“基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发”指的是使用注解的方式将三个流行的Java企业级框架——Struts2、Hibernate和Spring进行集成开发。这样的集成有助于简化配置,提高代码的可读性...

    Struts2+Spring+Mybaits3框架整合实例

    本实例将详细解析这三大框架如何协同工作,提升开发效率,并提供一个基于注解的配置方式。 Struts2作为MVC框架的核心,负责控制应用程序的流程,它处理HTTP请求,调度到相应的Action,然后将结果返回给用户。Struts...

    Struts2 文件上传进度条的实现实例代码

    import org.apache.struts2.interceptor.FileUploadInterceptor; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention....

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    反射和注解的妙用-struts2权限的控制

    Struts2是一个基于Java的开源Web应用程序框架,它继承了Struts1的优良特性,并且增加了许多新的功能,如拦截器(Interceptors)、结果类型(Result Types)、动态方法调用等。Struts2采用MVC架构模式,易于扩展,...

    Struts拦截器实现拦截未登陆用户实例解析

    import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.cjdx.domain.User; import com.opensymphony.xwork2.ActionContext; import ...

    struts2基础入门pdf,struts2全面介绍

    - **配置灵活性**:Struts2支持XML配置文件、注解(Annotation)等多种配置方式,使得配置更为灵活方便。 - **拦截器机制**:Struts2引入了拦截器机制,可以用来处理请求前后的过滤工作,如日志记录、事务管理等,...

    struts2.0中文帮助手册

    - **Struts2提供了基于Annotation和XML的验证方式**,可以在Action类的字段上直接定义验证规则,或者在单独的验证文件中定义。 6. **国际化与本地化** - Struts2支持多语言环境,通过资源文件管理不同语言的文本...

    Struts2(例子)

    Struts2是一个强大的Java web应用程序框架,用于构建和部署企业级的、基于MVC(Model-View-Controller)模式的Web应用。它继承了Struts1的优点并吸收了其他框架如WebWork的精华,提供了更丰富的功能和更好的性能。本...

    spring和Struts2注解文档

    在IT领域,特别是Java开发框架中,Spring和Struts2都是极为重要的技术栈,它们各自通过注解(Annotation)机制提供了强大的功能扩展性和代码简洁性。以下是对Spring和Struts2注解的深入解析和使用指南。 ### Spring...

    struts2.2.3+spirng2.5.6

    - **Interceptor(拦截器)**:Struts2的拦截器是处理请求和响应之间逻辑的重要组件。通过注解可以定制和配置拦截器链。 - **Value Stack**:Struts2中的值栈是一个数据容器,用于存储Action对象和其他模型数据,...

    struts2工作流程

    - **灵活性**:Struts2框架非常灵活,支持多种配置方式,如XML配置文件、注解(annotation)等。 - **拦截器机制**:拦截器提供了一种非常强大的方式来处理横切关注点,允许开发者轻松添加新的功能而不会影响现有的...

    Struts2内置拦截器简介

    Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...

    struts的简单应用

    Struts是Apache软件基金会 Jakarta项目下的一款开源框架,主要用于构建基于Java EE的Web应用程序。它遵循Model-View-Controller(MVC)设计模式,旨在简化开发过程,提供更好的可维护性和可扩展性。本篇文章将深入...

    毕业设计-学生成绩管理系统(基于annontation 的s2sh整合开发的完整实例)

    系统的核心开发技术是基于注解(Annotation)的Struts2、Spring和Hibernate(S2SH)框架的整合应用。注解在Java编程中广泛用于简化配置,提高代码可读性和可维护性。S2SH是Web开发中常用的三大框架组合,它们分别...

Global site tag (gtag.js) - Google Analytics