【Struts2】自定义拦截器interceptors
下面给一张图片表示Struts2拦截器的处理流程。

通过这个流程图,我们可以看出一个完整的请求大概的过程为:
请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2-->Action-->Result--> 拦截器 2/ 拦截器 1--> 响应输出
可以清楚地看出,当请求到服务器的时候首先会经过拦截器,然后当响应到用户界面的时候又会经过拦截器。
下面我们来实现一个自定义的拦截器
1. 编写拦截器实现类
实现 Interceptor 接口(或者继承 AbstractInterceptor )
如:
MyInterceptor.java 文
package cn.test.interceptor; import java.util.Map; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor{ //如果下面逻辑执行了invoke方法,返回值无效;如果没有执行invoke方法返回String作为result标识符
public String intercept(ActionInvocation ai) throws Exception {
System.out.println("在Action之前调用");
//登录检查
Map<String,Object> session =
ActionContext.getContext().getSession();
String username = (String)session.get("user");
if(username!=null){//登录的用户
ai.invoke();//调用后续拦截器或Action+Result
System.out.println("在Result之后调用");
return null;
}else{//未登录
return "login";//找<result name="login">
} } }
MyInterceptor.java
2. 在 struts.xml 中配置拦截器
<interceptors>
<interceptor name="myinter" class="cn.test.interceptor.MyInterceptor"/>
</interceptors>
3. 使用拦截器
只需要在action对拦截器进行引用即可:
<interceptor-ref name="myinter"/>
一旦使用了自定义的拦截器,那么struts2框架就不会去加载默认的拦截器了,因此有些功能会受损,这时候需要再次引用默认拦截器:
<interceptor-ref name="defaultStack"/>
比如下面的struts.xml案例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="demo" extends="struts-default" namespace="/"> <interceptors>
<interceptor name="myinter" class="cn.test.interceptor.MyInterceptor"/>
</interceptors> <!--这里把result提升到全局是为了,插件也能够调用-->
<global-results>
<result name="login" type="redirectAction">
<!--跳转到/tologin-->
<param name="actionName">tologin</param>
<param name="namespace">/</param>
</result>
</global-results> <action name="delete" class="deleteAction">
<!--显示调用自定义的过滤器和默认的过滤器-->
<interceptor-ref name="myinter"/>
<interceptor-ref name="defaultStack"/> <result name="success" type="redirectAction">
<param name="actionName">list</param>
<param name="namespace">/</param>
</result>
<result name="error" type="dispatcher">/WEB-INF/error.jsp</result>
</action> </package>
</struts>
struts.xml
【Struts2】自定义拦截器interceptors的更多相关文章
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- struts2自定义拦截器 设置session并跳转
实例功能:当用户登陆后,session超时后则返回到登陆页面重新登陆. 为了更好的实现此功能我们先将session失效时间设置的小点,这里我们设置成1分钟 修改web.xml view plainco ...
- 12.Struts2自定义拦截器
12.自定义拦截器 拦截器是Struts2的一个重要特性.因为Struts2的大多数核心功能都是通过拦截器实现的. 拦截器之所以称之为“拦截器”,是因为它可以拦截Action方法的执行, ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- Struts2自定义拦截器
1. 需求 自定义拦截器实现,用户登录的访问控制. 2. 定义拦截器类 public class LoginInterceptor extends AbstractInterceptor { @Ove ...
- struts2自定义拦截器与cookie整合实现用户免重复登入
目的:测试开发时,为了减少用户登入这个繁琐的登入验证,就用struts2做了个简单的struts2拦截器,涉及到了与cookie整合,具体的看代码 结构(两部份)=struts2.xml+自定义拦截器 ...
- 5、Struts2自定义拦截器
一.拦截器相关知识 1.Struts2框架剖析 Holly版本生活案例: 影视公司(拍电影) ActionMapper 传媒公司(包装明星) ActionMapping 明星 ...
- Struts2自定义拦截器处理全局异常
今天在整理之前的项目的时候想着有的action层没有做异常处理,于是想着自定义拦截器处理一下未拦截的异常. 代码: package cn.xm.exam.action.safeHat; import ...
- Struts2自定义拦截器——完整实例代码
比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...
随机推荐
- [Jade] Piped text
Another way to add plain text to templates is to prefix a line with a pipe character (|). This metho ...
- 优雅地乱玩Linux-6-Chrome端SSH插件
文章最初发表于szhshp的第三边境研究所转载请注明 优雅地乱玩Linux-6-Chrome端SSH插件 最近注册了个AWS,免费一年,一年内可以各种乱玩~ 从自己的电脑连接云主机一般需要SSH这样的 ...
- windows 下 nginx 的启动 停止 关闭
停止 nginx -s stop 重新加载配置文件(改动了参数无需重启,只有执行重新加载即可)nginx -s reload 退出 停止 关闭nginx -s quit
- C#.NET常见问题(FAQ)-如何判断两个类是否相同类型
可以用is方法判断是否是一个类 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: http://csr ...
- iOS 设置 UIWebView UserAgent
NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"naviga ...
- Apache和Nginx对比
面试过程中被问到Apache和Nginx服务器的对比,因为之前没有关注过这个问题,所以也没能回答上来. 今天在网上搜索资料,发现中文资料极少,还是英文资料多一下. 原文链接:https://www.w ...
- Windows 下 Git 安装与初始配置
官方下载地址:https://git-scm.com/download/win,我下载的最新版是 Git-2.15.1.2-64-bit.exe . Windows 下安装步骤 1.相关信息,直接“ ...
- Mina.Net实现的断线重连
using Mina.Filter.Codec; using Mina.Filter.Codec.TextLine; using System; using System.Collections.Ge ...
- Android sdk content loader 0%
打开Eclipse以后,一直在Android sdk content loader 0%,等了很长时间都没有变,解决的方法是Project->Clean->Clean all projec ...
- Jsp重定向(response.sendRedirect())和转发(request.getRequestDispatcher().forward(request,r)的差别
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...