`

Struts2 2.18 的 interceptor

阅读更多


首先定义我们自己的Interceptor

Java代码
  1. package  com.web.interceptor;  
  2.   
  3. import  javax.servlet.http.HttpServletRequest;  
  4. import  org.apache.struts2.StrutsStatics;  
  5. import  org.apache.struts2.convention.annotation.ParentPackage;  
  6.   
  7. import  com.common.utils.StringUtil;  
  8. import  com.opensymphony.xwork2.ActionContext;  
  9. import  com.opensymphony.xwork2.ActionInvocation;  
  10. import  com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  11. import  com.opensymphony.xwork2.util.ValueStack;  
  12. import  com.web.action.Constants;  
  13.   
  14. @ParentPackage (value= "struts-default" )  
  15. public   class  LoginInterceptor  extends  AbstractInterceptor  
  16. {  
  17.     /**  
  18.      *   
  19.      */   
  20.     private   static   final   long  serialVersionUID = 1L;  
  21.   
  22.     public   static   final  String USER_SESSION_KEY= "wallet.session.user" ;  
  23.       
  24.     public   void  init()  
  25.     {}  
  26.       
  27.     @SuppressWarnings ( "unchecked" )  
  28.     @Override   
  29.     public  String intercept(ActionInvocation invocation)  throws  Exception  
  30.     {   
  31.         ActionContext actionContext = invocation.getInvocationContext();  
  32.         HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);  
  33.   
  34.         String uri = request.getRequestURI();  
  35.         if (uri.indexOf( "index.action" )>- 1 )  
  36.         {  
  37.             return  Constants.INPUT;   
  38.         }  
  39.         else   if (uri.indexOf( "login.action" )>- 1 )  
  40.         {  
  41.             ValueStack vt = actionContext.getValueStack();  
  42.             java.util.Map<String, Object> mp = vt.getContext();  
  43.               
  44.             java.util.Map<String, Object> paraMap = (java.util.Map<String,Object>)mp.get(ActionContext.PARAMETERS);  
  45.             String[] name = (String[])paraMap.get("user.name" );  
  46.            
  47.             //String name = (String)vt.findValue("user.name");   
  48.             if (name!= null  && name.length> 0  && !StringUtil.hasContent(name[ 0 ]))  
  49.             {  
  50.                 vt.set("fielderror" "必须输入用户名!" );  
  51.                 return  Constants.INPUT;  
  52.             }  
  53.             else   return  invocation.invoke();  
  54.         }  
  55.         else   
  56.             return  invocation.invoke();  
  57.     }  
  58.   
  59.     public   void  destroy()  
  60.     {}  
  61. }  
package com.web.interceptor;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.convention.annotation.ParentPackage;

import com.common.utils.StringUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.ValueStack;
import com.web.action.Constants;

@ParentPackage(value="struts-default")
public class LoginInterceptor extends AbstractInterceptor
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static final String USER_SESSION_KEY="wallet.session.user";
	
	public void init()
	{}
	
	@SuppressWarnings("unchecked")
	@Override
	public String intercept(ActionInvocation invocation) throws Exception
	{ 
		ActionContext actionContext = invocation.getInvocationContext();
		HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);

		String uri = request.getRequestURI();
		if(uri.indexOf("index.action")>-1)
		{
			return Constants.INPUT; 
		}
		else if(uri.indexOf("login.action")>-1)
		{
			ValueStack vt = actionContext.getValueStack();
			java.util.Map<String, Object> mp = vt.getContext();
			
			java.util.Map<String, Object> paraMap = (java.util.Map<String,Object>)mp.get(ActionContext.PARAMETERS);
			String[] name = (String[])paraMap.get("user.name");
		 
			//String name = (String)vt.findValue("user.name");
			if(name!=null && name.length>0 && !StringUtil.hasContent(name[0]))
			{
				vt.set("fielderror", "必须输入用户名!");
				return Constants.INPUT;
			}
			else return invocation.invoke();
		}
		else
			return invocation.invoke();
	}

	public void destroy()
	{}
}


将其注册到struts中,修改struts2.xml文件增加如下内容:

Java代码
  1. < package  name= "struts-interceptor"   extends = "struts-default" >   
  2.         <interceptors>   
  3.             <interceptor name="loginInterceptor"   class = "com.web.interceptor.LoginInterceptor" />  
  4.         </interceptors>   
  5.     </package >   
<package name="struts-interceptor" extends="struts-default"> 
		<interceptors> 
		    <interceptor name="loginInterceptor" class="com.web.interceptor.LoginInterceptor"/>
		</interceptors> 
	</package> 



这样我们自己定义的Interceptor已经设置完成,如果想使用则可以用annotation指定。如

Java代码
  1. @InterceptorRefs ({  
  2.   @InterceptorRef ( "loginInterceptor" ),  
  3.   @InterceptorRef ( "defaultStack" )  
  4. })  
  5. @ParentPackage (value= "struts-interceptor" )    
  6. @Namespace (value= "/application" )    
  7. @Result (name= "input" ,location= "/application/login.jsp" )  
  8. public   class  LoginAction  extends  BaseAction  
  9. {  
  10.     private   static   final   long  serialVersionUID = 1L;  
  11. }     
@InterceptorRefs({
  @InterceptorRef("loginInterceptor"),
  @InterceptorRef("defaultStack")
})
@ParentPackage(value="struts-interceptor")  
@Namespace(value="/application")  
@Result(name="input",location="/application/login.jsp")
public class LoginAction extends BaseAction
{
	private static final long serialVersionUID = 1L;
}	


我们在LoginAction里使用了刚刚自定义的Interceptor。

官网教程提供的解决方案:

引用

If you get errors like "Unable to find interceptor class referenced by ref-name XYZ". This means that the package where Convention is placing your actions, does not extend the package where the interceptor is defined. To fix this problem either 1)Use @ParentPackage annotation(or struts.convention.default.parent.package) passing the name of the package that defines the interceptor, or 2) Create a package in XML that extends the package that defines the interceptor, and use @ParentPackage(or struts.convention.default.parent.package) to point to it.
分享到:
评论

相关推荐

    struts2.18 all zip

    总的来说,"struts2.18 all zip"提供的资源可以帮助开发者快速上手Struts2框架,通过示例应用了解其工作方式,通过库文件实现项目的运行,而源代码则为深入学习和定制提供了可能。对于Java Web开发者来说,熟悉并...

    struts2.18 src

    Struts2.18是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts2在Web开发领域中扮演着重要的角色,因为它提供了一种结构化的、可扩展的方式来组织和控制...

    struts2.18jar包

    Struts2.18是一个非常重要的Java Web框架的版本,由Apache软件基金会开发并维护。Struts2作为MVC(模型-视图-控制器)架构的一部分,极大地简化了基于Java的Web应用程序的开发过程。这个"struts2.18jar包"包含了所有...

    jqueryvalidate(猫冬)+spring3.0+struts2.18+hibernate3整合资源包

    Struts 2.18 是该框架的一个稳定版本,提供了许多改进和新功能,例如增强了拦截器(Interceptor)机制,支持更多的数据绑定选项,以及更好的错误处理能力。在项目中,Struts 2 可能用于处理HTTP请求,控制业务流程,...

    Struts2中使用JSON数据格式所需全部jar包

    本压缩包提供了在Struts2中使用JSON所需的全部jar包,特别适用于支持struts2.18及更高版本的应用,确保了良好的向下兼容性。 首先,我们需要了解JSON(JavaScript Object Notation)的基本概念。JSON是一种数据交换...

    struts2需要的jar

    1. **struts2-core.jar**:这是Struts2框架的核心库,包含了Action、Result、Interceptor等关键组件的实现。 2. **xwork-core.jar**:XWork是Struts2的基础,提供了许多底层功能,如对象容器、类型转换、动态方法...

    SSI(struts2+spring2.5+ibatis2.3)项目实例

    在SSI项目实例中,Struts2.18被用来处理HTTP请求,控制应用程序的流程,并与视图和模型进行交互。其核心组件包括Action、Result、Interceptor等,它们协同工作以实现业务逻辑和视图的解耦。 1. **Action**:是...

    struts2内置拦截器简介

    在Struts2的配置文件中,可以通过`&lt;interceptor-stack&gt;`标签定义拦截器栈,然后在`&lt;action&gt;`标签中引用这些拦截器栈。 例如: ```xml &lt;interceptor-stack name="basicStack"&gt; &lt;interceptor-ref name="exception"/&gt;...

    lib_strutsj—jar包

    在描述中提到的`struts2.18`指的是Struts 2框架的版本号,这通常代表了该框架的一次重大更新或改进。 在Java Web开发中,JAR(Java Archive)文件是一种归档格式,它集合了多个类文件和其他资源,使得开发者可以将...

    stucts2描述

    1. **引入依赖库**:要使用Struts2,首先需要在项目中添加一系列必要的jar包,包括但不限于`struts2-core-2.18.jar`、`xwork-core-2.16.jar`、`ognl-2.7.3.jar`、`freemarker-2.3.15.jar`和`commons-fileupload-...

Global site tag (gtag.js) - Google Analytics