框架学习之Struts2(四)---拦截器和标签
一、拦截器概述
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(四)---拦截器和标签的更多相关文章
- [ SSH框架 ] Struts2框架学习之四(自定义拦截器)
一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- struts2框架学习笔记6:拦截器
拦截器是Struts2实现功能的核心部分 拦截器的创建: 第一种: package interceptor; import com.opensymphony.xwork2.ActionInvocati ...
- Struts2 (四) — 拦截器
一.拦截器 1.概述 1.1什么是拦截器 在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象. 拦截器有点类似以前Servlet阶段的Filter(过滤器 ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- Struts2学习第4天--拦截器
第1章 Struts2_day04笔记 1.1 上次课内容回顾 l OGNL表达式 n OGNL的概述 u OGNL:对象图导航语言,是一门功能强大的表达式语言. n OGN ...
- Struts2知识点小结(四)--拦截器与注解开发
一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...
- Struts2学习笔记(十)——自定义拦截器
Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...
- (六)Struts2的拦截器
一.简介 拦截器体系是struts2重要的组成部分.正是大量的内建拦截器完成了该框架的大部分操作. 比如params拦截器将请求参数解析出来,设置Action的属性.servletConfig拦截器负 ...
随机推荐
- Java生成图片验证码
在日常我们在登录或者注册的时候,网页上会出现验证码让我们填写,其实利用jdk提供给我们的工具类完全可以模拟出来一个生成验证码图片的功能. package util; import javax.imag ...
- [Luogu 1122] 最大子树和
题目 Description 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题 ...
- Java多线程JUC
1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在 ...
- poj-1207 THE 3n+1 problem
Description Problems in Computer Science are often classified as belonging to a certain class of pro ...
- redis客户端可以连接集群,但JedisCluster连接redis集群一直报Could not get a resource from the pool
一,问题描述: (如题目)通过jedis连接redis单机成功,使用JedisCluster连接redis集群一直报Could not get a resource from the pool 但是使 ...
- 【Python】 linux中python命令的命令行参数
Python命令行参数 原文地址:http://blog.163.com/weak_time/blog/static/25852809120169333247925/ Python的命令行参数,提供了 ...
- jdk自带的MD5进行数据的加密与解密
package com.tools.util; import java.io.IOException; import java.io.UnsupportedEncodingException; imp ...
- java排序算法(六):直接插入排序
java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...
- 基于 HTML5 Canvas 实现的文字动画特效
前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的.文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读. ...
- 第二次作业-Steam软件分析
1 .介绍产品相关信息 随着电子音频游戏产业的发展以及正版意识的崛起,Steam已经成为大部分游戏爱好者必备的一款游戏下载平台.这款软件也使得Valve公司从一个游戏制作公司成功扩展业务到一个承揽众多 ...