Struts拦截器 interceptor与过滤器filter的不同
interceptor:对action进行拦截的,是Struts工具。
filter:是对所有的东西进行过滤。.css .js .jpg
一、拦截器配置
第一步:创建一个类,继承自AbstractInterceptor
第二步:配置struts.xml
1.添加<interceptors>配置节,添加拦截器配置。
<interceptors> <!-- name是自定义用在ref的name,class是第一步创建的累的完全限定名 --> <interceptor name="loginlan" class="com.itnba.maya.util.LoginInterceptor"></interceptor> <interceptor name="mylan" class="com.itnba.maya.util.Interceptor"></interceptor> <!-- stack是好多interceptor放在一起用 --> <interceptor-stack name="newstack"> <interceptor-ref name="loginlan"></interceptor-ref> <interceptor-ref name="mylan"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack>
</interceptors>
2.在action中引用,<interceptors>中的配置。
<action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}"> <!-- 在action中引用interceptor,符合这个格式通配符的页面就会执行引用的拦截器 --> <interceptor-ref name="newstack"></interceptor-ref> <result name="success"> {1}/{2}.jsp </result> </action>
注意:
1.在action中需要添加defaultStack引用
2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的时候引用此stack即可,如:第一步中的stack中的
<interceptor-ref name="defaultStack"></interceptor-ref>。
二、在拦截器中使用内置对象。
1.ActionContext 获取Map:session = ActionContext.getContext().getSession();
public class LoginInterceptor extends AbstractInterceptor{ private Map<String,Object> session; @Override public String intercept(ActionInvocation arg0) throws Exception { session = ActionContext.getContext().getSession(); if(session.get("user") == null){ return "nologin"; } return arg0.invoke(); } }
2.ServletActionContext 获取HttpSession
3.实现SessionAware接口:implements SessionAware
public class LoginAction extends ActionSupport implements ModelDriven<User>,SessionAware { private Map<String,Object> session = new HashMap<String,Object>(); private User user = new User(); public String login(){ return SUCCESS; } public String yanzheng(){ List<String> list = new ArrayList<String>(); list.add("admin"); list.add("lihaha"); Object obj = session.get("user"); if(obj == null){ if(list.contains(user.getUsername())){ session.put("user", user.getUsername()); return SUCCESS; } else{ return "nologin"; } } else{ return SUCCESS; } } @Override public User getModel() { // TODO 自动生成的方法存根 return user; } @Override public void setSession(Map<String, Object> arg0) { this.session= arg0; }