回顾 | 学习笔记

简介: 快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:容器技术基础(4)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7311


回顾

 

目录:

一.获取 ServletAPL.

二.ActionContext

三.值栈和 ognl


一. 获取 ServletAPL.

(1)struts2有2种方式去获取 servletAPI:-种解耦一种耦合;

注:

解耦使得使用struts2来进行测试的时候不需要启动服务器。在一定程度上提高开发效率。

2使用解耦的方式来获取 servletapi 通过 ActionContext 对象获取ActionContext.getContext().getSession().put("user",name);
//处理方法public String execute()System.out.println(name+"---"+pwd);if("siggx".equals(name)&&"1111".equals(pwd))//获取 sessionActionContext.getContext().getSession().put("user",name);//获取 request---HttpServletRequest 对象的 attributes

Map<String,Object> request =(Map)ActionContext.getContext().get("request");

//获取applicationMap<String,Object>application=ActionContext.getContext().getApplication();//获取 parametersMap<String,Object> parameters =ActionContext.getContext().getParameters();

//相当于 request.getParameter("name");System.out.println("name==== "+( (String[])parameters.get("name"))0)return "success";

elsereturn"login";
3通过 ActionContext 直接获取 HttpServletRequest
//处理方法public String execute()System.out.println(name+"---"+pwd);if("siggy".equals (name)&&"1111".equals(pwd))HttpServletRequestrequest=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST) ;request.getSession().setAttribute("user",name);System.out.println("name===="+request.getParameter("name"))return"success";elsereturn "login";

4隅合的方法取 HttpServletRequest,实现 ServletRequestAware 接口public class LoginAction2 implements servletRequestAware

private String name;private String pwd;HttpServ1etRequest request;
//处理方法public String execute()System.out.println(name+"---"+pwd) ;if("siggy".equals(name)&&"1111".equals(pwd))request.getSession().setAttribute("user",name);System.out.println("name===="+request.getParameter("name"))return "success";

elsereturn "login";public void setServletRequest(HttpServletRequest request)this.request=request;public String logout()ActionContext.getContext().getSession().remove("user");

System.out.println("退出");return"success";public String getName()

return name;public void setName (String name)

this.name = name;public String getPwd() raturn pwd;public void setPwd(String pwd) this.pwd = pwd;

5通过获取 ServletActionContext 获取 HttpServletRequest 对象public String execute()System.out.println(name+"---"+pwd);if("siggy".equals(name)&&"1111".equals (pwd))HttpServletRequest request ServletActionContext.getRequest();request.getSession().setAttribute("user",name);System.out.println("name==== "+request.getParameter("name" ))return"success";elsereturn "login";


二.ActionContext

(1)什么是 ActionContext?
 ActionContext 是 map 结构的容器。ActionContext 是 Action 的上下文,存放 Action 执行过程中数据信息。ActionContext 存放 Action 的数据

Actionlnyocation request 的数据,session 的数据,application 的数据,locale 的数据 bonversion errors 等。

每次请求时会为当前线程创建一个新的 ActionContext 而 ActionContext 采用了ThreadLocal 的方式来存放 ActionContext 所以 ActionContext 是线程安全。

(2) 获取 ActionContext
ActionContext.getContext0获取。由于 ActionContext 是线程安全的,并且是通过静态方法获取的,所以在本线程中的非 Action 类中也可以直接访问。
注 ActionContext 是基于请求创建的,所以在非请求的线程中是不能使用ActionContext 对象的。如 filter 的 init0方法。
(3)ThreadLocal 模式
public static void main(String[] args) //ThreadLocal 存放线程局部变量的容器//存放在 threadlocal 中的局部变量是线程安全的final ThreadLucal<String> ac = new ThreadLocalkString>();

ac.set("siggy");new Thread(new Runnable()public void run() System.out.println("thread:"+ac.get());start();System.out.println(ac.get());
4ActionContext 中包含的6大对象如下
applicationsessionrequest

parametersatt(page--reques--session---application)ValueStack(iit)


三.值栈和 ognl

(1)值栈 ValueStack 是 AgtionContext 中的一个对象。值栈是栈结构;特征:FILO(先进后出);Struts2中值栈存放的数据是 Action 对象

(2)ognl 表达式简介

表达式 el,re,ognl--用简洁的表达式完成比较复杂的功能。

OGNL 全称是 Object-Graph Navigation Language(对象图形导航语言),相对于 EL 语言,除了保持EL语言的优点外,他的其他优点如下:

能够访问对象的普通方法

能够访问类的静态属性和静态方法

强大的操作集合类对象的能力

支持赋值操作和表达式串联

访问 OGNL 上下文和 ActionContet
3使用 ognl
pub1ic static void main(String[] args) throws OgnlException

//原则:数据分为2类---常用的和不常用的---常用的一般是小数据,
不常用的一般是大数据
//表达式:常用的数据直接取,不常用的数据加#取
Map<String, object> map=new HashMap<String,object>();

map.put("name","张三疯");map.put("age",125);User user = new User();user.setName("lisi");object obj = Ognl.getValue("#name",map,user);System.out.print1n(obj) ;
4取数据
用户名:<s:property value= "name"/>[action 中的属性 ] <br>

用户名:<s:propertyvalue= "#scssion.user"/>----<ahref= "logout.action ">退出</a></body></html>
:使用 ognl 表达式访问 action 的属性时,可以直接访问。访问 actionContext 中的数据

相关文章
|
Kubernetes 网络协议 程序员
k8s 学习笔记 - LimitRange 限制范围
k8s 学习笔记 - LimitRange 限制范围
235 0
|
存储 C语言 C++
C++学习笔记(day1)
C++学习笔记(day1)
|
开发者
整合的实现 | 学习笔记
快速学习整合的实现.
整合的实现 | 学习笔记
|
开发者 Python
In 和 not in 的使用 | 学习笔记
快速学习 In 和 not in 的使用
|
SQL 分布式计算 资源调度
StreamSQL|学习笔记
快速学习 StreamSQL
StreamSQL|学习笔记
|
存储 开发者 Python
练习4|学习笔记
快速学习练习4
|
架构师 开发者
高压线|学习笔记
快速学习高压线。
109 0
|
存储 SQL 分布式计算
MaxCamputeInfomationSchema 详解 | 学习笔记
快速学习 MaxCamputeInfomationSchema 详解
235 0
MaxCamputeInfomationSchema  详解 |  学习笔记
|
XML vlayout Java
vlayout学习笔记
关于阿里android的UI框架 vlayout的学习笔记
vlayout学习笔记
|
索引 Python
2022年2月23日学习笔记
尚硅谷教育,李立超老师的Python 入门教学,列表部分
226 0