Struts-拦截器
来源:互联网 发布:kurt cobain淘宝 编辑:程序博客网 时间:2024/05/17 02:07
拦截器方法在Action执行之前或者之后执行.
拦截器的执行过程是一个递归的过程
1. 拦截器:拦截器和过滤器很相似,在action执行的前后执行。Struts2的核心功能都是通过拦截器来实现的。
2. 拦截器栈:由多个拦截器组成。
3. 作用:对action的一些公共处理代码可以放到拦截器中实现,如:权限控制,日志等等。
4. 多个拦截器之间的执行是采用责任链来实现的。
5. 拦截器的执行流程
6. 拦截器的实现步骤:
a. 编写拦截器,实现interceptor接口或者继承AbstractInterceptor类
b. 在struts.xml中配置拦截器
c. 在action中引用拦截器
8. 拦截器的配置详解
a) 当引用了自定义的拦截器时,默认的拦截器不起作用
b) 默认拦截器在struts-default.xml中,配置了默认拦截器,当配置了默认拦截器以后,如果不引用拦截器,那么默认的拦截器将起作用。
<default-interceptor-ref name="defaultStack"/>
之前之所以有默认拦截器,在于在sturts.xmlh中继承了struts-default
<package name="default" extends="struts-default">
9. 拦截器的运用案例 (对于登录权限的运用):
拦截器的实现
publicclass LoginInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation invocation) throws Exception {
//判断是否是login.action,如果是则直接执行下一个拦截器
//如果不是则判断是否登录,如果登录就执行下一个拦截器
//如果不是登录则返回登录界面
String actionName=invocation.getProxy().getActionName();
if("login".equals(actionName)){
returninvocation.invoke();
}
//通过获得session的name来判断是否登录,session在LoginAction中设置了值
Object obj=invocation.getInvocationContext().getSession().get("name");
if(obj!=null){ //不为空表示登录
returninvocation.invoke();
}
return Action.LOGIN; //直接返回结果集
}
}
JSP页面(success.jsp 登录后点击该链接可以成功跳转,未登录在浏览器输入该action无法跳转)
<body>
<a href="hello.action">hello</a>
</body>
JSP页面(login.jsp)
<form action="login.action" method="post">
用户名:<input type="text" name="name"/><br>
密 码:<input type="password" name="pwd"/><br>
年 龄:<input type="text" name="age" /><br>
邮 箱:<input type="text" name="email" /><br>
<input type="submit" value="提交"/>
<s:actionerror />
</form>
struts.xml
<!--配置拦截器 -->
<interceptors>
<interceptor name="loginInterceptor"class="com.zys.interceptor.LoginInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
LoginAction
publicclass LoginAction extends ActionSupport{
HttpServletRequest request;
public String register(){
request=ServletActionContext.getRequest();
ActionContext.getContext().getSession().put("name",request.getParameter("name"));
return"success";
}
}
10. 方法拦截器:方法拦截器是比Action拦截器具有更加细粒度的控制,主体实现和Action拦截器一致,但是方法拦截器继承MethodFilterInterceptor类,重写doIntercept方法,配置会发生改变。
struts.xml
<!--配置拦截器 -->
<interceptors>
<interceptor name="loginInterceptor"class="com.zys.interceptor.LoginInterceptor" /> <interceptorname="methodInteceptor" class="com.zys.interceptor.ListInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="methodInteceptor">
<!-- 配置被拦截的方法,多个方法用逗号分隔-->
<param name="includeMethods">list,add</param>
<!--配置不被拦截的方法 -->
<param name="excludeMothods">login</param>
</interceptor-ref>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器/栈 -->
<default-interceptor-ref name="myStack" />
<!-- 因为有多个界面需要跳转到登录界面,所以定义为全局结果集 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="login" class="com.zys.action.LoginAction"method="register">
<result name="success">/success.jsp</result>
</action>
<action name="hello" class="com.zys.interceptor.HelloAction">
<result name="show">/show.jsp</result>
</action>
<action name="list" class="com.zys.interceptor.HelloAction" method="list">
<result name="show">/show.jsp</result>
</action>
<action name="add" class="com.zys.interceptor.HelloAction"method="add">
<result name="show">/show.jsp</result>
</action>
注意:struts2拦截器的执行顺序是按照拦截器栈中引用的顺序来进行的。
MethodFilterInterceptor类
publicclass ListInterceptor extends MethodFilterInterceptor{
protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("方法拦截器被执行!");
returninvocation.invoke();
}
}
HelloAction类
publicclass HelloAction{
public String execute(){
return"show";
}
public String list(){
System.out.println("list方法!");
return"show";
}
public String add(){
System.out.println("add方法");
return"show";
}
}
- Struts 2.0 拦截器
- struts拦截器
- struts 拦截器
- Struts 2拦截器
- Struts拦截器
- Struts 2拦截器
- struts拦截器
- Struts之拦截器
- struts拦截器
- Struts 拦截器
- struts拦截器
- struts 2 拦截器
- struts 拦截器
- struts自定义拦截器
- struts 拦截器 interceptor
- struts 拦截器总结
- struts拦截器使用方法
- struts 拦截器
- 特斯拉与松下拟建工厂,加速打造太阳能电池板
- 网易云音乐进军耳机市场 投资风口还是流量入口?
- 腾讯马斌:构建网络大安全观,CSS峰会连接智慧安全
- 冒泡排序到快速排序做的那些优化
- git学习,git视频教程,git资料共享
- Struts-拦截器
- 011 线性无关及线性相关性质及习题
- day16数据的操作(2)+JDBC
- Note 7 事件尘埃落定,各大巨头自我颠覆丨大公司周刊
- 少年创客马拉松之探索火星,探索教育之“去功利化”
- 英威诺PIE Media亮相云栖大会,诠释内容生态新时代
- 神舟十一号要飞天了!这将成为我国历史上时间最长的载人飞行
- 百度网盘为什么被塞满小黄片?黑客撞库盗卖账号
- 微信测试“服务”和“群收款”,小程序之后又想搞个大新闻?