Struts2框架(四):控制器&其他OGNL标签&拦截器

Struts2系列文章推荐:
👉 Struts2框架(一):入门xml配置及action编写
👉 Struts2框架(二):封装方法&其他介绍&注入方式详解
👉 Struts2框架(三):OGNL表达式与值栈
👉 待更新

1、上一章内容回顾

 OGNL表达式
   OGNL的概述
     OGNL:对象图导航语言,是一门功能强大的表达式语言。
   OGNL的功能
     调用对象的方法
     调用对象的静态方法
     表达式串联
     访问ActionContext和OgnlContext数据
   OGNL独立的表达式:
     Java环境下入门
     Struts2环境下入门
 值栈
   值栈的概述
     ValueStack:是一个接口,实现类OgnlValueStack。是数据的中转站,贯穿了整个Action,有一个Action的实例,就会创建一个ValueStack对象。
   值栈的内部结构
     Root :CompoundRoot,就是一个ArrayList。
     Context :OgnlContext,就是一个Map。
   ActionContext和值栈关系
     ActionContext获得值栈的引用。
   获得值栈
     通过ActionContext获取
     通过request获取
   操作值栈
     利用Action本身在栈中的特点,Action中的属性。
     手动操作值栈:
   获取值栈的数据
     OGNL获取:<s:property value=”…”/>
   EL获取值栈的数据
     底层增强request.getAttribute(“”);
 ONGL特殊字符
   #号
     获取context数据
     构建map集合
   %号
     强制解析OGNL
   $号
     在配置文件中使用OGNL

2、Struts2的拦截器(*****)

拦截器概述

什么是拦截器
 Interceptor:拦截器,起到拦截Action的作用。
   Filter:过滤器,过滤从客户端向服务器发送的请求。
   Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。
 Struts2框架核心的功能都是依赖拦截器实现。
Struts2的执行流程
客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。
Struts2的拦截器的执行流程
Struts2的执行流程

拦截器入门

搭建Struts2的环境
1、创建项目 2、引入lib 3、配置web.xml
编写拦截器类
 编写一个类实现Interceptor接口或者继承AbstractInterceptor类
 这里最好继承AbstractInterceptor,因为实现接口还要写init等方法,很复杂
 这里我写了两个拦截器,一个是Demo1,一个是Demo2
interceptor1
对拦截器进行配置
 两种配置方法,一种是直接用拦截器名,一种是用拦截器栈
 定义拦截器进行配置
定义拦截器进行配置
 定义一个拦截器栈的方式
定义一个拦截器栈的方式
运行结果
运行结果

3、CRM的权限拦截器

实现用户登录的功能

登录实现流程
创建表和实体
 创建表

CREATE TABLE `sys_user` (
  `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_code` varchar(32) NOT NULL COMMENT '用户账号',
  `user_name` varchar(64) NOT NULL COMMENT '用户名称',
  `user_password` varchar(32) NOT NULL COMMENT '用户密码',
  `user_state` char(1) NOT NULL COMMENT '1:正常,0:暂停',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 创建实体
创建实体
提交数据到Action
提交数据
Action->Service->DAO
 编写Service
service
 编写Dao
dao
根据结果进行页面跳转
页面跳转
小结
1、写这个案例的时候还是犯了错误,一个就是用属性驱动封装数据的时候,没有在jsp页面上写表达式,导致dao一直查不出来
2、还有一个错误就是hibernate的映射文件,没有配置到对应的数据库,导致一直报错而找不到问题关键所在

实现权限拦截器

编写权限拦截器
权限过滤器代码
配置拦截器
配置拦截器
小结
1、这里的权限拦截器编写上,遵循一个:获取session中数据->获得action->判断数据是否为空(根据情况来执行方法)的思路
2、写好拦截器之后要配置好,global-results很关键

4、Struts2的标签库

通用标签库

可在struts2的docs中查看tag-reference.html
通用标签库
判断标签
<s:if><s:elseif><s:else>
判断标签
<s:iterator>
迭代
 其他常用的标签
   <s:property/>
   <s:debug/>
   <s:date />----在页面上进行日期格式化。
UI标签库(方便数据回显)
1、使用UI标签库能够不用自己排版,它有一套自己的样式
2、使用UI标签库能够在用户输入出错的情况下,将其他正确的数据回显。其中,只有密码框需要设置showPassword才会显示。
3、多选框进行显示时,如果是从数据库查询出的数据,则需要切分字符串
UI标签库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hillain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值