Struts2_day04
一、回顾
1什么是值栈
(1)action和servlet区别
2 如何获取值栈对象
3 值栈内部结构
(1)root和context
4 向值栈放数据
(1)向值栈放字符串
(2)向值栈放对象
(3)向值栈放list集合
5 从值栈获取数据
(1)从值栈获取字符串
(2)从值栈获取对象
<s:property>
(3)从值栈获取list集合
<s:iterator>
6 EL表达式获取值栈数据
(1)增强request里面getAttribute方法
7 ognl表达式 #、%使用
二、内容大纲
1 拦截器概述
2 拦截器底层原理
3 过滤器和拦截器区别
4 自定义登录拦截器
5 struts2标签库(会用)
6 struts2表单标签
三、Struts2拦截器概述
1 struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面
2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每次执行默认的拦截器
3 struts2里面默认拦截器位置
4 拦截器在什么时候执行?
(1)在action对象创建之后,action的方法执行之前
四、拦截器底层原理
1 拦截器底层使用两个原理
第一个 aop思想
(0)后面在spring里面把aop做更深层次分析
(1)文字描述:
Aop是面向切面(方面)编程,有基本功能,扩展功能,不通过修改源代码方式扩展功能
(2)画图分析:
第二个 责任链模式
(1)在java中有很多的设计模式,责任链模式是其中的一种
(2)责任链模式和过滤链很相似的
责任链模式:
要执行多个操作,有添加、修改、删除三个操作。
首先执行添加操作,添加操作执行之后 做类似于放行操作,执行修改操作,修改操作执行之后做类似于放行操作,执行删除操作
过滤链:一个请求可有多个过滤器进行过滤,每个过滤器只有做放行才能到下一个过滤器
2 aop思想和责任链模式如何应用到拦截器里面?
(1)文字描述:
- 拦截器在action对象创建之后,action的方法执行之前执行
- 在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作
- 在执行拦截器时候,执行很多的拦截器,这个过程使用责任链模式
-- 假如执行三个拦截器,执行拦截器1,执行拦截器1之后做放行操作,执行拦截器2,执行拦截器2之后做放行,执行拦截器3,执行拦截器3之后放行,执行action的方法
(2)画图分析
3 查看源代码
(1)执行action
(2)创建action对象,使用动态代理方式
(3)执行action的方法
(4)执行很多的拦截器,遍历执行
类似于放行的操作的方法
五、重要的概念
1 过滤器和拦截器区别
(1)过滤器:过滤器理论上可以任意内容,比如html、jsp、servlet、图片路径
(2)拦截器:拦截器只可以拦截action
2 Servlet和action区别
(1)servlet默认第一次访问时候创建,创建一次,单实例对象
(2)action每次访问时候创建,创建多次,多实例对象
六、自定义拦截器
1 在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可以没有要使用的功能,这个时候需要自己写拦截器实现功能
2 拦截器结构
(1)查看源代码看拦截器结构
- 继承类
在接口里面有三个方法
: 初始化操作
:销毁
:拦截逻辑的操作
(2)开发中,建议使用另外一种方式
- 写类,继承 MethodFilterInterceptor类实现
-- 让action里面某个的方法不进行拦截
(3)让拦截器和action有关系
- 不是在action调用拦截器的方法,而是通过配置文件方式让建立关系
七、自定义登录拦截器
1 需求:在项目中,有很多的action的超链接,实现只有是登录的状态,才可以点击action的超链接实现功能,如果不是登录状态,点击action超链接返回到登录页面
2 登录的状态:使用session域对象实现
(1)登录成功之后,把数据放到session里面
(2)判断session是否有值,可以知道是否是登录状态
3 实现登录的基本功能
(1)查询数据库判断用户名和密码(作业)
4 添加登录拦截器功能
(1)判断是否登录:判断session里面是否有名称是username的值
(2)拦截器实现过程
第一步 创建类,继承MethodFilterInterceptor类
第二步 重写MethodFilterInterceptor类里面的方法写拦截器逻辑
第三步 配置action和拦截器关系(注册拦截器)
(1)在要拦截的action标签所在的package标签里面声明拦截器
(2)在具体的action标签里面使用声明的拦截器
(3)struts2里面执行很多的默认拦截器,但是如果在action里面配置自定义拦截器,
问题:默认的拦截器不会执行了
解决:把默认拦截器手动使用一次
5配置拦截器,对action里面所有的方法都进行拦截
(1)在action里面有login的登录的方法,这个方法不需要拦截,如果这个方法都拦截,问题是,永远登录不进去了
(2)解决:让login方法不进行拦截
- 直接通过配置方式让action里面某些方法不进行拦截
6 如果登录状态,直接到功能页面,如果不是登录显示登陆页面
登录之后出现小问题:
(1)设置打开位置,在form标签里面
八、Struts2的标签库
0 struts2标签使用jsp页面中
1 s:property: 和ognl表达式在jsp页面中获取值栈数据
2 s:iterator: 获取值栈list集合数据,表示list集合
3 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里面对应html表单标签大部分都有
十、缺少两个知识点
放到ssh练习中讲到
1 struts2文件上传
2 错误处理机制 input
十一、Struts2总结
1 Action
(1)action创建(继承ActionSupport类)
(2)配置访问action的方法(通配符)
(3)action获取表单数据
- 模型驱动
(4)action操作域对象
(5)result标签里面type属性
2 值栈
(1)值栈结构
(2)向值栈放数据
(3)从值栈获取数据
3 拦截器
(1)拦截器原理
(2)自定义拦截器
- 继承类
- 写拦截器逻辑
- 配置拦截器
-- 配置让action某些方法不进行拦截
参考资料:
《黑马程序员》
Struts2_day04的更多相关文章
- Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写
- Struts2_day04--课程介绍_Struts2拦截器概述&底层原理_重要的概念
Struts2_day04 上节内容 今天内容 Struts2拦截器概述 拦截器底层原理 重要的概念 自定义拦截器 自定义登录拦截器 Struts2的标签库 Struts2表单标签(会用) Strut ...
- Struts2学习第4天--拦截器
第1章 Struts2_day04笔记 1.1 上次课内容回顾 l OGNL表达式 n OGNL的概述 u OGNL:对象图导航语言,是一门功能强大的表达式语言. n OGN ...
- (转)Struts2的标签库
http://blog.csdn.net/yerenyuan_pku/article/details/68638679 Struts2的标签库 对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器 ...
随机推荐
- B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...
- Xshell 使用数字小键盘进行vim 写入操作.
Copy From http://blog.csdn.net/shenzhen206/article/details/51200869 感谢原作者 在putty或xshell上用vi/vim的时候,开 ...
- [学习笔记]Ubuntu下安装配置SQLSERVER2017
摘要自微软官网: https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-ubuntu 安装步骤: 1. 导入公共秘 ...
- python模块_re模块
正则表达式笔记'''#re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none.#re.search 扫描整个字符串并返回第一个成功的匹配#fi ...
- Maven环境配置及简单使用(二)
Maven环境变量配置 配置Maven前先从官网下载相关版本,Maven下载地址:http://maven.apache.org/download.cgi,笔者使用最新版本apache-maven-3 ...
- linux-shell系列8 netstat用法
1 查看TCP连接状态 netstat -n|awk '{print $6}'|sort|uniq -c|sort -rn netstat -n|awk '/^tcp/ {++S[$NF]};END{ ...
- LOJ #2540. 「PKUWC 2018」随机算法(概率dp)
题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...
- BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick
题面 求所有长度为\(n\)的.没有相邻的1的01序列中,若0有\(x\)个.1有\(y\)个,\(x^ay^b\)之和(对\(m\)取模). \(n \le 10^7, m \le 10^8, 0 ...
- CF1073E Segment Sum 解题报告
CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L~R\)之间最多不包含超过\(K\)个数码的数的和. \(K\le 10,L,R\le 10^{18}\) 数位dp ...
- 前端学习 -- Html&Css -- ie6 png 背景问题
在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...