一、拦截器概述

  1.1 在struts2框架中封装了很多功能,struts2里面封装的功能都是在拦截器里面,struts2里面又很多拦截器,但不是每次这些拦截器都执行,每次执行型默认的拦截器。

默认拦截器的位置如下:     ------.>>>>

注:拦截器都是在action对象创建之后,方法执行之前进行执行的。

1.2拦截器的底层原理

    拦截器底层使用了两个原理 第一个  AOP思想(简述):  就是面向切面编程,有基本功能,扩展功能,不通过修改源代码扩展功能。

aop的图解:

      第二个  责任链模式:责任链模式是java众多设计模式中的一种,它和过滤链很相似。例如 要执行多个操作 有添加,修改,删除。首先执行添加操作,执行完毕后作出类似方形的操作后,执行修改操作,操作完成后作出类似放行的操作,最后执行删除操作。

过滤链:

二、拦截器的执行过程

    2.1拦截器是在action对象创建之后 ,方法执行之前执行,在action执行之前执行默认拦截器,执行过程使用aop思想,在action中没有直接调用拦截器的方法,而是使用配置文件方式进行操作。在执行拦截器时,执行很多拦截器,这个过程中使用责任链模式,假如执行三个拦截器,执行拦截器1,执行拦截器1之后做放行操作,执行拦截器2,执行拦截器2之后做放行,执行拦截器3,执行拦截器3之后放行,执行action的方法。

   如图:

    2.2源码的分析查看

        》执行action

  

        》创建action对象,使用动态代理方式

        》执行action的方法

        》遍历执行众多拦截器

  

        》类似放行的操作

注:

1 过滤器和拦截器区别

(1)过滤器:过滤器理论上可以任意内容,比如html、jsp、servlet、图片路径

(2)拦截器:拦截器只可以拦截action

2 Servlet和action区别

(1)servlet默认第一次访问时候创建,创建一次,单实例对象

(2)action每次访问时候创建,创建多次,多实例对象

 

三、自定义拦截器

  3.1在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可以没有要使用的功能,这个时候需要自己写拦截器实现功能,拦截器的结构,通过代码可以看到

继承类

接口里的三个方法初始化:

销毁:

逻辑操作:

   3.2在开发中一般不建议这中方式,而是使用另外一种方式,写一个继承MethodFilterInterceptor类是心啊让action里面某个的方法不进行拦截。

   3.3让拦截器和aciton产生关联 不是通过action'调用拦截器的方法,而是通过配置文件让其建立联系的

例如:自定义登陆拦截器

添加登录拦截器功能

(1)判断是否登录:判断session里面是否有名称是username的值

(2)拦截器实现过程

第一步 创建类,继承MethodFilterInterceptor类

第二步 重写MethodFilterInterceptor类里面的方法写拦截器逻辑

  第三步 配置actin和拦截器之间的关联关系(注册拦截器)

      (1)在要拦截的action标签所在的package标签里面声明拦截器

       (2)在具体的action标签中使用已经声明的拦截器

(3)struts2里面执行很多的默认拦截器,但是如果在action里面配置自定义拦截器,

问题:默认的拦截器不会执行了

解决:把默认拦截器手动使用一次

(4)配置拦截器,对action里面所有的方法都进行拦截

(1)在action里面有login的登录的方法,这个方法不需要拦截,如果这个方法都拦截,问题是,永远登录不进去了

(2)解决:让login方法不进行拦截

- 直接通过配置方式让action里面某些方法不进行拦截

四、struts2中的标签问题

  struts2的标签库

      struts2标签使用在jsp页面中

      s:property 和ognl表达式在jsp页面中获取值栈数据

      s:iterator 获取值栈list集合数据 ,表示list集合

      s:debug 查看值栈结构和数据

  struts2中的表单标签

1 html表单标签

(1)form : action、method、enctype

(2)输入项

- 大部分在input里面封装 type=”值”

- text:普通输入项

- password:密码输入项

- radio:单选输入项

- checkbox:复选输入项

- file:文件上传项

- hidden:隐藏项

- button:普通按钮

- submit:提交按钮

- image:图片提交

- reset:重置

- select:下拉输入项

- textarea:文本域

      2在struts2中对应的标签

        

框架学习之Struts2(四)---拦截器和标签的更多相关文章

  1. [ SSH框架 ] Struts2框架学习之四(自定义拦截器)

    一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...

  2. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

  3. struts2框架学习笔记6:拦截器

    拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocati ...

  4. Struts2 (四) — 拦截器

    一.拦截器 1.概述 1.1什么是拦截器 ​ 在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象. ​ 拦截器有点类似以前Servlet阶段的Filter(过滤器 ...

  5. Struts2(十四)拦截器实现权限管理

    一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...

  6. Struts2学习第4天--拦截器

    第1章     Struts2_day04笔记 1.1      上次课内容回顾 l  OGNL表达式 n  OGNL的概述 u  OGNL:对象图导航语言,是一门功能强大的表达式语言. n  OGN ...

  7. Struts2知识点小结(四)--拦截器与注解开发

    一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...

  8. Struts2学习笔记(十)——自定义拦截器

    Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...

  9. (六)Struts2的拦截器

    一.简介 拦截器体系是struts2重要的组成部分.正是大量的内建拦截器完成了该框架的大部分操作. 比如params拦截器将请求参数解析出来,设置Action的属性.servletConfig拦截器负 ...

随机推荐

  1. 1-3 Spring Bean 的属性值设置

    详见http://www.cnblogs.com/chenssy/archive/2013/03/17/2964593.html 1.注入普通的属性值 <bean id="Cat&qu ...

  2. 1.Java关键字和保留字

    关键字和保留字 http://www.cnblogs.com/wwxbi/p/4292170.html 访问控制 private protected public 类,方法和变量修饰符 abstrac ...

  3. Angular开发实践(四):组件之间的交互

    在Angular应用开发中,组件可以说是随处可见的.本篇文章将介绍几种常见的组件通讯场景,也就是让两个或多个组件之间交互的方法. 根据数据的传递方向,分为父组件向子组件传递.子组件向父组件传递及通过服 ...

  4. 【Linux】 用户管理

    Linux用户管理 ■ 查看用户整体情况 cat /etc/passwd可以查看用户的一些基本信息.用finger <user>似乎更加方便 查看某一个特定的用户的话就可以 grep &l ...

  5. redis的主从复制(读写分离)/哨兵(主从切换)配置

    准备两个redis服务,两台机器,依次命名文件夹子master,slave1 10.10.10.7 10.10.10.8 1.master修改配置文件 [root@db2 conf]# cat 637 ...

  6. 对于一个刚入门的linux运维来说

    干 就完了~ 我觉得 人生的意义在于 不断地学习......

  7. sqlite语句主页

    因为现在android手机用sqlite数据,但是sql语句很多和sqlserver不同..所以还是把官网记下以便开发:http://www.sqlite.org/lang.html

  8. hihocoder [Offer收割]编程练习赛52 D 部门聚会

    看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...

  9. Git常用命令(二)------ 远程库操作

    本文总结自廖雪峰网站. Git支持多种协议,git://使用ssh协议,速度最快,也可使用https等协议. 对远程库操作: 推送: 1.先远程建立一个Repo库,f 2.远程和本地关联: git r ...

  10. synchronized 原理分析

    synchronized 原理分析 1. synchronized 介绍    在并发程序中,这个关键字可能是出现频率最高的一个字段,他可以避免多线程中的安全问题,对代码进行同步.同步的方式其实就是隐 ...