我正在研究Struts2拦截器。 我已经读过Struts2拦截器就像过滤器一样,它在执行Action类之前执行,并且在处理结果后再执行一次(如果我错了请纠正我),这是两次
但是当我运行下面的代码时,拦截器只执行一次。 如果我犯了任何错误,请纠正我。 请参阅下面的代码:
这是我的Struts.xml文件
<struts>
<constant name="struts.devMode" value="true" />
<package name="test" extends="struts-default">
<interceptors>
<interceptor name="loginkiran" class="vaannila.MyLoginInterCeptor" />
</interceptors>
<action name="HelloWorld" class="vaannila.HelloWorld" method="kiran">
<interceptor-ref name="loginkiran" />
<result name="SUCCESS">/success.jsp</result>
</action>
</package>
</struts>
这是我的Action类
public class HelloWorld
{
public HelloWorld() {
}
public String kiran() {
System.out.println("iNSIDE THE aCTION CLASS");
return "SUCCESS";
}
}
这是我的拦截器类
public class MyLoginInterCeptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("Destroying Interceptor");
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = (HttpServletRequest) ActionContext
.getContext().get(ServletActionContext.HTTP_REQUEST);
System.out.println("iNSIDE THE iNTERCEPTOR");
return invocation.invoke();
}
}
这是我的JSP文件:
<html>
<body>
<%
System.out.println("iNSIde THE jsp");
%>
</body>
</html>
以上代码的输出为:
iNSIDE THE iNTERCEPTOR
iNSIDE THE aCTION CLASS
iNSIde THE jsp
答案 0 :(得分:3)
拦截器不执行两次(也不是过滤器):拦截器(和过滤器)包裹动作(或servlet / etc。)
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("Before action invocation...");
return invocation.invoke();
System.out.println("After action invocation...");
}