尽管没学过struts1吧。可是了解到struts1中并没有拦截器,  到Struts2才有。它是基于WebWork发展起来的, 顾名思义,说到拦截器大家首先肯定会想到它是拦截东西的,起到一个限制的作用。那么好,在这里它是拦截什么的呢?在struts2中拦截器是用来拦截Action的。在运行Action之前拦截器会起一定的作用,运行一些预先处理的代码, 接着去运行Action中相关的方法,之后,又会回到拦截器里面,接着去运行兴许的一些操作。刚刚学习,假设我理解的不正确的话,请大家留言指正啊。

Struts2拦截器原理

Struts2拦截器的实现原理我理解的还是相对简单的,当请求struts2的Action时,Struts2会查找配置文件,然后依据其配置
实例化相对的拦截器对象,然后串成一个列表,最后一个一个的调用列表中的拦截器。

                                                                  

定义拦截器

public class MyInterceptor implements Interceptor{

	@Override
public void destroy() {
System.out.println("--destroy()--"); } @Override
public void init() {
System.out.println("--init()--"); } @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("--intercept()--");
Map<String,Object> session= invocation.getInvocationContext().getSession();
if(session.get("username")!=null){
return invocation.invoke();
}
else{
return"error";
}
} } //当须要对action中指定的方法须要拦截的时候须要用的MethodFilterInterceptor
//public class MyInterceptor extends MethodFilterInterceptor{
public class MyInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("--intercept()--");
Map<String,Object> session= invocation.getInvocationContext().getSession();
if(session.get("username")==null){
return "error";
}
else{
return"user";
}
} }

说明:自己定义的接口须要继承自AbstractInterceptor的类。com.opensymphony.xwork2.interceptor.Interceptor接口。声明了3个方法,包含init,destroy和intercept方法,当中,init和destroy方法会在程序開始和结束时各运行一遍。无论使用了该拦截器与否,仅仅要在struts.xml中声明了该Struts2拦截器就会被运行。intercept方法就是拦截的主体了。每次拦截器生效时都会运行当中的逻辑。

只是,struts中还提供了抽象类来简化这一步骤。public class MyInterceptor extends MethodFilterInterceptor和public class MyInterceptor extends AbstractInterceptor,当中AbstractInterceptor提供了init()和destroy()的空实现。使用时仅仅须要覆盖intercept()方法;而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性,用来过滤运行该过滤器的Action的方法。能够通过param来增加或者排除须要过滤的方法。

注冊拦截器

		<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor"></interceptor> <interceptor-stack name="defaultInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>(必须加,否则出错)
</interceptor-stack> </interceptors>

配置拦截器

配置都是在struts.xml里面的,以下是我的一个小样例,注意:在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack。

	<package name="testLogin" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor"></interceptor> <interceptor-stack name="defaultInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>(必须加,否则出错)
</interceptor-stack> </interceptors>
(这句是设置全部Action自己主动调用的拦截器堆栈)
<default-interceptor-ref name="defaultInterceptorStack"></default-interceptor-ref> <action name="Login" class="LoginAction">
<result name="user">/user.jsp</result>
<result name="error">/error.jsp</result>
<interceptor-ref name="defaultInterceptorStack"></interceptor-ref>
</action> </package>

说明:至于前面说到的Action里边必须在最后引用struts2自带的拦截器缺省堆栈defaultStack。实际我也不是非常清

楚。只是后边还会深入的理解这一知识点,再来补充。

这样,我们的拦截器就能使用啦,这仅仅是拦截器非常基础的一部分,简单能实现了,刚刚接触ssh。随后还须要通过总结来填充这一部分的学习,记得视频中讲到它与filter有一定的关系与差别,当时没有细致的考虑,接下来会通过对filter的学习比較它与interceptor的差别。

ssh2——Interceptor拦截器的更多相关文章

  1. SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  2. Spring MVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  3. SpringMvc中Interceptor拦截器用法

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆等. 一. 使用场景 1 ...

  4. SpringMVC 中的Interceptor 拦截器

    1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors>  <!-- 日志拦截器 -->  <mvc:interceptor> ...

  5. SpringBoot-SpringMvc的Interceptor拦截器配置

    Interceptor拦截器实现对每一个用户请求处理前后的业务处理,比如我们需要对用户请求进行响应时间的记录,需要记录请求从开始到结束所耗的时间,这时我们就需要用到拦截器了 下面我们以记录请求处理时间 ...

  6. SpringMVC中使用Interceptor拦截器顺序

    一.简介 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验 证,或者是来判断用户是否登陆,或者是像1 ...

  7. 【tmos】如何在Interceptor拦截器中注入其他数据

    光是这样是获取不到weixinConfig内容的 public class WebLoginInterceptor implements HandlerInterceptor { @Autowired ...

  8. SpringMVC中的Interceptor拦截器及与Filter区别

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  9. [转]SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

随机推荐

  1. (剑指Offer)面试题12:打印1到最大的n位数

    题目: 输入数字n,按顺序打印出从1到最大的n位十进制数. 比如输入3,打印1,2,3一直到最大的3位数即999. 思路: 1.不考虑n的范围,直接打印. void Print1ToMaxOfNDig ...

  2. 踩坑记:mysql timeStamp默认值0000-00-00 00:00:00 报错

    报错现象: 从mysql5.5数据库导出的数据结构放到mysql5.7.10 报错create_time timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00 ...

  3. cscope无法索引代码树之外的软链接

    http://blog.csdn.net/sudolee/article/details/9052291 背景:为什么非要使用cscope?不用ctags? 尽管ctags可以索引软链接,但是,cta ...

  4. 区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理【转】

    基于HTML5的PACS--图像伪彩 摘要: 要查看此系统更多的图像处理功能请参考:区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理套用句广告语:哪里不会点哪里,so e ...

  5. UNIX网络编程读书笔记:套接口选项

    概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...

  6. 每日算法之二十三:Reverse Nodes in k-Group

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  7. ubuntu执行级别,设置单用户模式

    redhat的runlevel级别定义例如以下:   0:关机.不能将系统缺省执行级别设置为0,否则无法启动. 1:单用户模式.仅仅同意root用户对系统进行维护. 2:多用户模式.但不能使用NFS( ...

  8. RBAC权限设计实例(转)

    实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台 ...

  9. js 根据title从下级往上级查找

    var menuData = [{ name: 'manage', title: '测试1', icon: 'home', }, { title: '测试2', name: 'car-parent', ...

  10. Mysql 创建表和删除表

    在数据库中创建一张表的基本语法如下: CREATE TABLE tablename (column_name_1 column_type_1 constraints, column_name_2 co ...