1.拦截器的意义:
(1).把重用性的内容写在拦截器中
(2).复杂的逻辑若无拦截器全写在action中,结构不好
(3).复杂逻辑的一个拦截器可能不够,需要多个拦截器构成一个拦截器栈
2.Servlet和Struts2通信的桥梁:ServletActionContext
3.拦截器例子
jsp:
<form action="loginAction_login.action"></form>
LoginAction下的login()方法:
ServletActionContext.getRequest().getSession().setAttribute("user",user);
return "indexAction";
IndexAction:
public void IndexAction extends ActionSupport{
public String index(){
return "index";
}
}
拦截器LoginInterceptor(implements Interceptor):
public String intercept(ActionInvocation invocation) throws Exception{
User user = (User)ServletActionContext.getRequest().getSession().getAttribute("user");
if(user == null){
return "login";
}else{
return invocation.invoke();
}
}
xml:
<struts>
<package name="userInterceptor" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="LoginInterceptor"></interceptor>
<interceptor-stack name="loginInter">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginInter"></default-interceptor-ref>
</package>
<package name="login" namespace="/" extends="struts-default">
<action name="loginAction_*" method="{1}" class="action.LoginAction">
<result type="redirectAction" name="indexAction">indexAction_index.action</result>
</action>
</package>
<package name="index" namespace="/" extends="userInterceptor">
<action name="indexAction_*" method="{1}" class="IndexAction">
<result name="index">index.jsp</result>
<result name="login">login.jsp</result>
</action>
</package>
</struts>