在拦截器中可以三种实现
一:继承 AbstractInterceptor 类
二:继承 MethodFilterInterceptor类
三:实现 Interceptor 接口
在实现Interceptor接口时,会多出init() 和 destroy() 方法
拦截器的主体方法是:
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
HttpServletRequest request = ServletActionContext.getRequest();
if(request.getParameter("username") == null){//输入的用户名为空
return "logFail";
}
logInterceptor.invoke();
return null;
}
在拦截器完成任务后-->记得 arg0.invoke()
激活action,让程序得以继续执行
另外:
<form action="logAction_login.action" method="post">
在struts.xml中<action name="logAction_*" class="my.test.Control" method="{1}"></action>
指定跳转的处理类的处理方法
付一张必须jar包图:
通过非IOC 方式 获取 http请求参数
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletRespons respons = ServletActionContext.getRespons();
HttpSession session = ServletActionContext.getRequest().getSession();//servlet 中的底层session
Map sessionMap = ActionContext.getContext().getSession(); //struts2 中封装的Map session
------------------------------------------------------------------------------------------>
<struts>
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.objectFactory.spring.autoWire" value="name" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.custom.i18n.resources" value="messages,department,serch,device,login,user,role,ywtj,param,notice,hmd,jrs,jwjk"/>
<include file="struts-login.xml" />
</struts>
---------------------------------------------------------------------------------------->
判断Session 是否超时:
public class SessionInterceptor extends BaseAction implements Interceptor {
private static final long serialVersionUID = 1L;
public String intercept(ActionInvocation actionInvocation) throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();
Action action = (Action) actionInvocation.getAction();
if (action instanceof LoginAction) {
return actionInvocation.invoke();
}else{
SysUser user = UserSessionUtil.getUserInfo(session);
if (user == null) {
return "login";
} else {
return actionInvocation.invoke();
}
}
}
public void destroy() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
}
---------------------------------------------------struts.xml 配置:
<package name="global" namespace="/" extends="struts-default">
<!-- struts2 拦截器Session 超时 -->
<interceptors>
<interceptor name="sessionInterceptor" class="com.egintra.common.base.SessionInterceptor" />
<!-- 拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="sessionInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack" />
<global-results>
<result name="exception">/jsp/error.jsp</result>
<result name="login">/jsp/system/login/login.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>