拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制。
说到拦截器interceptor,就会想到过滤器filter:
过滤器filter是对所有的东西进行过滤,包括.css,.js,.jpg等这些内容都过滤;
拦截器interceptor是对action进行拦截,是属于struts的工具。
这里以实现登录验证为例来进行拦截器的使用
首先创建一个Login类:
packagecom.dao;public classLogin {privateString username;privateString password;publicString getUsername() {returnusername;
}public voidsetUsername(String username) {this.username =username;
}publicString getPassword() {returnpassword;
}public voidsetPassword(String password) {this.password =password;
}
}
然后配置struts.xml:
/p>
"http://struts.apache.org/dtds/struts-2.3.dtd">
/Login/login.jsp
/Login/login.jsp
/Login/success.jsp
{1}/{2}.jsp
配置LoginAction.java:
packagecom.controller;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.http.HttpSession;importorg.apache.struts2.ServletActionContext;importorg.apache.struts2.interceptor.SessionAware;importorg.apache.tomcat.jni.User;importcom.dao.Login;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.ModelDriven;public class LoginAction extends ActionSupport implements ModelDriven,SessionAware {private Mapsession ;private Login user = newLogin();publicString login(){returnSUCCESS;
}publicString success(){
java.util.List uid = new ArrayList();
uid.add("admin");
uid.add("zhangsan");
uid.add("lisi");
uid.add("wangwu");
ActionContext context=ActionContext.getContext();
session=context.getSession();
Object obj= session.get("user");if(obj==null){if(uid.contains(user.getUsername())){
session.put("user", user.getUsername());returnSUCCESS;
}else{return "nologin";
}
}else{returnSUCCESS;
}
}
@Overridepublic void setSession(Maparg0) {//TODO 自动生成的方法存根
this.session=arg0;
}
@OverridepublicLogin getModel() {returnuser;
}
}
配置SuccessInterceptor.java:
packagecom.util;importjava.util.Map;importjavax.servlet.http.HttpSession;importorg.apache.struts2.ServletActionContext;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;public class SuccessInterceptor extendsAbstractInterceptor {private Mapsession ;
@Overridepublic String intercept(ActionInvocation arg0) throwsException {
System.out.println("asdasdas");
session=ActionContext.getContext().getSession();if(session.get("user")==null){return "nologin";
}returnarg0.invoke();
}
}
实现login.jsp页面:
Insert title hereLogin
username:
password:
实现success.jsp页面:
Insert title heresuccess
username:password:
一、拦截器的配置
1.SuccessInterceptor.java文件为拦截器的配置,继承自AbstractInterceptor接口。
2.配置struts.xml文件
//自己定义的一个名为login的拦截器,调用自com.util.SuccessInterceptor
//自定义一个名为newStack的拦截器,里面包含login的拦截器和defaultStack默认的拦截器
/Login/login.jsp
//通用走nologin的时候都走此处
/Login/login.jsp
/Login/success.jsp
//调用自定义的拦截器{1}/{2}.jsp
二、在拦截器中使用内置对象
1.ActionContext 获取Map.
2.ServletActionContext 获取HttpSession
3.实现SessionAware接口
这样定义完毕后的登录并不完善,没有跳转404界面,以及没有验证用户名密码同时正确的情况,仅作为例子参考。