下面是关于“struts2自定义拦截器的示例代码”的完整攻略。
什么是Struts2自定义拦截器?
在Struts2中,拦截器(Interceptor)是用于拦截请求和响应的组件。Struts2框架中自带了许多默认的拦截器,如TokenInterceptor、ValidationInterceptor、ParamsInterceptor等。除此之外,我们还可以自定义拦截器,实现自己的业务逻辑。
自定义拦截器示例一
下面是一个简单的示例代码,演示如何自定义一个拦截器。
首先,在src目录下创建一个名为MyInterceptor
的类文件,并继承AbstractInterceptor
类,实现intercept()
方法。
package com.example.struts2;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("Before invoking action...");
String result = invocation.invoke();
System.out.println("After invoking action...");
return result;
}
}
然后,在struts.xml
中配置自定义拦截器:
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor"
class="com.example.struts2.MyInterceptor"/>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptorStack"/>
<!-- actions... -->
</package>
这个示例代码中,我们定义了一个名为myInterceptor
的拦截器,并定义了一个名为myInterceptorStack
的拦截器栈,把自定义拦截器和默认拦截器栈defaultStack
组合起来使用。
自定义拦截器示例二
除了以上这个简单的示例,还可以定制化更复杂的自定义拦截器,下面展示一个处理会话超时的拦截器。
package com.example.struts2.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class SessionTimeoutInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;
}
else {
return invocation.invoke();
}
}
}
这个示例代码中,我们创建了一个名为SessionTimeoutInterceptor
的拦截器,当请求中的会话超时或用户未登录时,通过sendRedirect()
方法将请求重定向到登录页面。
在struts.xml
中配置这个拦截器:
<interceptor name="sessionTimeout"
class="com.example.struts2.interceptor.SessionTimeoutInterceptor"/>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="sessionTimeout"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
<default-interceptor-ref name="myInterceptorStack"/>
<!-- actions... -->
配置拦截器栈时,将自定义拦截器与默认拦截器栈组合起来使用。这里我们创建了一个名为sessionTimeout
的拦截器,并将它加入拦截器栈中使用。在这个示例中,我们使用了session对象进行会话超时的判断。
以上就是关于“struts2自定义拦截器的示例代码”的完整攻略,希望对您有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2自定义拦截器的示例代码 - Python技术站