`

零配置

    博客分类:
  • j2ee
阅读更多

 基于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;  
      
     
    @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;
 
 
 @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">的定义。

分享到:
评论

相关推荐

    SSH 零配置例子

    零配置SSH指的是简化SSH连接过程,使得用户无需手动配置公钥认证或记住复杂的密码,即可实现快速、安全的登录。这个压缩包文件"sshProject"很可能包含了一个示例项目,用于演示如何设置和使用SSH的零配置功能。 SSH...

    SpringMVC基于代码的配置方式(零配置,无web.xml)

    一、SpringMVC的零配置介绍 传统的SpringMVC配置方式需要在web.xml中声明DispatcherServlet,并配置相关的servlet-mapping。而在零配置中,这些工作都交给了Spring Boot的自动配置机制。Spring Boot能够自动识别并...

    Struts2零配置

    Struts2零配置是Struts2框架的一种简化配置方式,旨在减少XML配置文件的使用,提高开发效率。在传统的Struts2应用中,开发者需要在多个XML文件中配置Action、结果页面、拦截器等,而“零配置”则是对这种繁琐配置的...

    struts2 零配置

    "Struts2 零配置"是Struts2的一种特性,允许开发者在不编写大量XML配置文件的情况下,快速搭建和运行应用程序。这主要得益于Struts2的插件机制和注解支持。 首先,Struts2的零配置主要依赖于以下两个核心概念: 1....

    struts零配置HelloWorld-Annotation

    在“struts零配置HelloWorld-Annotation”这个项目中,我们将重点探讨如何利用注解来实现Struts2框架的配置,这对于初学者来说是一个很好的起点。 在传统的Struts2配置中,我们需要在`struts.xml`文件中手动定义每...

    SpringMVC4零配置

    **SpringMVC4零配置详解** SpringMVC作为Spring框架的一部分,是用于构建Web应用程序的控制器层。在SpringMVC4版本中,引入了“零配置”概念,旨在简化开发流程,提高开发效率。本文将深入探讨SpringMVC4的零配置...

    零配置springmvc4+hibernate4

    【零配置SpringMVC4+Hibernate4】是一个集成框架,旨在简化Java开发中的Web应用程序构建过程,特别是通过消除大量的配置工作。在这个项目中,我们看到它与Tomcat服务器、MyEclipse IDE以及MySQL数据库结合使用,提供...

    简述STRUTS2_Convention零配置

    STRUTS2 Convention 零配置是Struts2框架中的一种高级特性,旨在简化应用程序的配置,让开发者能够更快地构建MVC应用。从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需...

    机顶盒零配置手册

    ### 机顶盒零配置手册知识点详解 #### 一、机顶盒零配置原理与实现条件 ##### 零配置原理概述 机顶盒零配置技术的核心在于通过自动化手段完成机顶盒与服务提供商系统的自动匹配与配置过程,从而实现即插即用的功能...

    SSH框架集成注解零配置

    SSH框架集成注解零配置是现代Java Web开发中一种高效且流行的方式,SSH指的是Spring、Struts和Hibernate这三个开源框架的首字母缩写。Spring负责依赖注入和事务管理,Struts处理MVC模式中的控制器部分,而Hibernate...

    spring+hibernate+maven零配置

    本文将深入探讨如何结合这三个工具进行“零配置”开发。 首先,让我们了解这三个组件的核心功能: 1. Spring:Spring是一个全面的Java应用框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,用于简化...

    ssh零配置_项目Demo

    标题中的“ssh零配置_项目Demo”指的是使用SSH(Spring、Struts、Hibernate)三大框架进行开发时的无配置或最少配置方式。SSH是Java Web开发中常用的三个开源框架,它们分别是Spring负责依赖注入和事务管理,Struts...

    STRUTS2:零配置插件CodeBehind

    ### STRUTS2:零配置插件CodeBehind详解 #### 一、概述 Struts2框架作为Java Web开发中的一款重要工具,在简化Web应用程序开发方面提供了丰富的功能与灵活性。随着框架的发展,Struts2社区不断推出新的插件和技术...

    wlan ap 零配置

    AP 零配置技术白皮书 关键词:WLAN, AP 摘 要:本文讲述了传统WLAN网络部署AP中遇到的一些问题,以及AP零配置给用户带来的好处,另外通过描述H3C公司FIT AP的启动和工作方法来介绍AP零配置的实现原理.

    springMVC零配置,无web.xml,无spring配置

    随着Java配置的引入,我们可以实现"零配置"的Spring MVC应用,即无需XML配置,全部通过Java代码来配置和管理。这种方式更加直观、易于维护,并且更符合Java的编程风格。本项目"springMVC零配置,无web.xml,无spring...

    Spring+Spring MVC+MyBatis之零配置之路源代码

    这个"Spring+Spring MVC+MyBatis之零配置之路源代码"项目旨在展示如何在不使用XML配置的情况下,通过Java配置和注解驱动的方式来搭建一个完整的SSM(Spring、Spring MVC、MyBatis)应用。 Spring框架作为基础,提供...

    SSH官网最新包整合(全注解零配置)

    这个整合包被称为"SSH全注解零配置整合",意味着它利用了注解来减少XML配置文件的数量,使得项目设置更加简洁和高效。以下是这些技术及其集成的关键知识点: 1. **Struts2**: - **注解配置**:Struts2允许开发者...

    SSH零配置,完全注解方式工程

    这个"SSH零配置,完全注解方式工程"是一个示例项目,它展示了如何在不使用XML配置文件的情况下,通过Java注解来配置和使用SSH框架。 首先,Spring框架是应用上下文和依赖注入(DI)的核心。在传统配置中,我们会在...

Global site tag (gtag.js) - Google Analytics