拦截器
拦截器分类:1) struts框架自带拦截器:
sturts-default.xml文件中里有多种拦截器如params.......等, 在struts.xml中只要包extends了struts-default,那么每个Action都拥有一些拦截器,拥有的这些叫默认拦截器栈defaultStack 2) 自定义拦截器(权限控制等)如何自定义拦截器: 1) com.opensymphony.xwork2.interceptor.Interceptor接口 ----------> (只有init,destroy,intercept方法) 要实现接口里的三个方法: public void destroy(){} public void init(){} public String intercept(ActionInvocation invocation) throws Exception {String result = invocation.invoke();
} 2) com.opensymphony.xwork2.interceptor.AbstractInterceptor 抽象类 ---------->(只有intercept方法) public String intercept(ActionInvocation invocation)throws Exception {String result = invocation.invoke();
}
3)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor抽象类 ----------> (这个拦截器可以指定要拦截或不拦截的方法列表)
protected String doIntercept(ActionInvocation arg0) throws Exception {
String result=arg0.invoke();
}
Struts.xml中配置:
300 /index.jsp /login.jsp login2 login1,login3
注意:1)多个拦截器作用于一个Action,拦截器是有顺序的 2)设置拦截器或不拦截的方法时,如果有多个方法,那么以逗号(,)分隔, 如果一个方法的名字同时出现在execludeMethods和includeMethods参数中,那么它会被当作要拦截的方法。 也就是说, includeMethods优先于execludeMethods。
拦截器栈:就是将一些拦截器组合起来进行统一管理
300 login2 login1,login3 /index.jsp /login.jsp
拦截器的应用 1.访问权限拦截器
1)JSP
2)Action:获取页面上的数据,验证成功后,把用户信息存入session中,然后跳转到另一个Action 3)对另一个Action进行拦截,从session中取值,判断用户是否登录,在进行跳转 4)为什么写二个Action,因为,第一个Action是为了往session中放值,如果是后拦截不起作用。所以得用第二个Action 5)struts.xml要对第二个Action配置上拦截器 6)访问权限为什么非写在拦截器里:为了重用(有可能其它Action也要用)使用令牌token防止表单重复提交
1)index.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
2)action
//action类是需要继承ActionSupport这个类的,不然struts识别不了//在重复提交时,Token会产生一个重复的提交的信息,由ActionSupport得到信息后,在存入TokenAction这个类中public class TokenAction extends ActionSupport {public String execute() throws Exception {return SUCCESS;}}
3)struts.xml
/welcome.jsp /error.jsp