首先定义我们自己的Interceptor
-
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"
);
-
-
-
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()
-
{}
-
}
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文件增加如下内容:
-
<
package
name=
"struts-interceptor"
extends
=
"struts-default"
>
-
<interceptors>
-
<interceptor name="loginInterceptor"
class
=
"com.web.interceptor.LoginInterceptor"
/>
-
</interceptors>
-
</package
>
<package name="struts-interceptor" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="com.web.interceptor.LoginInterceptor"/>
</interceptors>
</package>
这样我们自己定义的Interceptor已经设置完成,如果想使用则可以用annotation指定。如
-
@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;
-
}
@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框架,通过示例应用了解其工作方式,通过库文件实现项目的运行,而源代码则为深入学习和定制提供了可能。对于Java Web开发者来说,熟悉并...
Struts2.18是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts2在Web开发领域中扮演着重要的角色,因为它提供了一种结构化的、可扩展的方式来组织和控制...
Struts2.18是一个非常重要的Java Web框架的版本,由Apache软件基金会开发并维护。Struts2作为MVC(模型-视图-控制器)架构的一部分,极大地简化了基于Java的Web应用程序的开发过程。这个"struts2.18jar包"包含了所有...
Struts 2.18 是该框架的一个稳定版本,提供了许多改进和新功能,例如增强了拦截器(Interceptor)机制,支持更多的数据绑定选项,以及更好的错误处理能力。在项目中,Struts 2 可能用于处理HTTP请求,控制业务流程,...
本压缩包提供了在Struts2中使用JSON所需的全部jar包,特别适用于支持struts2.18及更高版本的应用,确保了良好的向下兼容性。 首先,我们需要了解JSON(JavaScript Object Notation)的基本概念。JSON是一种数据交换...
1. **struts2-core.jar**:这是Struts2框架的核心库,包含了Action、Result、Interceptor等关键组件的实现。 2. **xwork-core.jar**:XWork是Struts2的基础,提供了许多底层功能,如对象容器、类型转换、动态方法...
在SSI项目实例中,Struts2.18被用来处理HTTP请求,控制应用程序的流程,并与视图和模型进行交互。其核心组件包括Action、Result、Interceptor等,它们协同工作以实现业务逻辑和视图的解耦。 1. **Action**:是...
在Struts2的配置文件中,可以通过`<interceptor-stack>`标签定义拦截器栈,然后在`<action>`标签中引用这些拦截器栈。 例如: ```xml <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/>...
在描述中提到的`struts2.18`指的是Struts 2框架的版本号,这通常代表了该框架的一次重大更新或改进。 在Java Web开发中,JAR(Java Archive)文件是一种归档格式,它集合了多个类文件和其他资源,使得开发者可以将...
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-...