Struts2_day03笔记

合集下载

Struts2学习笔记

Struts2学习笔记

Struts1是一个优秀的框架,但是还是具有很多不好的地方,如Action和ActionForm严重倚赖系统框架中的API。

如ActionForm必须继承ActionForm,Action控制器继承Action,测试麻烦。

Struts2是基于webwork发展而来,并非struts1使用MyEclipse8.5版本,可自动添加依赖struts2的系统库Struts2原理:说明:Struts2没使用Servlet作为核心控制器,而是换做一个Filter过滤器来进行,其类是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 过滤器所拦截的请求是<url-pattern>/*</ url-pattern>(当然根据版本的不同,过滤器类也不同,如Org.apache.Struts2.dispatcher.FilterDispatcher)如果请求中带有.action或.do,则转入Struts2框架处理。

配置文件:Web.xml中:<filter><filter-name>struts2</filter-name><!-版本不同这里的配置不同-→<!—<filter-class>Org.apache.Struts2.dispatcher.FilterDispatcher</filter-class>→<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFi lter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,../struts.xml </param-value></init-param></filter><filter-mapping><filter-name>struts2</ filter-name><url-pattern>/*</ url-pattern></filter-mapping>Struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""/dtds/struts-2.1.dtd"> <struts><!—这个package可以处理文件同名的情况,一般不会更换-- ><package name="default"extends="struts-default"namespace="\"> <action name="Login"class="com.test.action.LoginAction"><result name="cheng">/index.jsp</result><result name="bai">/fail.jsp</result></action></package></struts>配置文件说明:1、package中的name为了区分不同的包2、extends是继承的包名3、namespace是提交时区分的地址,如namespace=”user”,则提交时需要加入action=”/user/xxx.action”控制其中的代码,其中数据直接封装和页面表单元素名称对应。

struts2学习笔记

struts2学习笔记
(2).Action类实现RequestAware,SessionAware,ApplicationAware这三个接口
(3).
HttpServletRequest request=ServletActionContext.getRequest();//得到request
(4).实现ServletRequestAware等
国际化实现中英文切换:
两个超链接:<s:a action="changeLanguage?flag=zh">中文</s:a>
<s:a action="changeLanguage?flag=en">英文</s:a>
ChangeLanguageAction中内容:
public class ChangeLanguageAction {
{
struts.i18n.encoding=UTF-8 //设置编码格式
}
6.重定向跳转也可传Action中的属性值
<param name="username">${ername}</param>
7.struts2 中设置request ,session,application值
locale=;
context.setLocale(locale);
}
context.getSession().put("WW_TRANS_I18N_LOCALE",locale);
//必须将此WW_TRANS_I18N_LOCALE存放在session中
return "input";
}
}
11.struts2 文件上传下载,下载时需配置如下

struts2学习笔记

struts2学习笔记

一、Struts2的一些优点:1、struts2没有像struts1一样跟servletAPI和struts1API有紧密的耦合2、struts2提供了拦截器,利用拦截器可以进行AOP编程,实现权限拦截等功能。

3、struts提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型,4、struts2提供支持多种表现层技术,如:JSP、freeMaker、velocity等。

5、struts2的输入校验可以对指定方法进行校验,解决了struts1长久之痛。

6、提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

二、Struts2的开发环境搭建:1、寻找开发struts2应用以来的jar文件,至少需要的六个jar文件。

2、编写struts2的配置文件。

3、Struts2在web中的启动。

当filter被读取的时候就会启动配置文件三、struts2中配置的包介绍Struts-default中定义了struts中的一些核心功能,比如拦截器,用来实现文件上传,和数据验证。

四:Action名称的所搜顺序:Htpp://localhost:8080/struts/test/helloword,在默认命名空间的情况下,或者是命名空间为空的情况下可以这样访问Htpp://localhost:8080/struts/test/path2/path1/helloword,五:Action中的各项默认值:如果没有给action配置class,会默认为actionsupport,如果没哟配置method方法,会默认配置action中excute方法,如果没有配置result,也会默认为success。

六:struts视图研究(result各种转发类型):七、Action属性注值当数据经常发生变化时就会采用此种方法八、指定需要struts2处理的请求后缀:默认使用的是.action后缀访问Action,其实可以通过struts.action.extension进行修改的。

struts2_day03笔记

struts2_day03笔记

Struts2 框架第三天今天重点内容安排:第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型第二天:获取请求参数,请求数据校验机制,拦截器1、V alueStack 值栈的存储原理和相关操作2、Ognl 表达式语言语法3、struts2 页面控制标签4、struts2 form表单相关标签重点难点:值栈和Ognl1.值栈和Ognl表达式1.1.什么是OgnlOgnl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据pageContext、request、session、application )Ognl 主要用法:1、访问OGNL上下文值栈对象获取数据(最重要)2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口!值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口!前端控制器每一次请求都会创建一个值栈对象源码:一次请求对应一个值栈对象值栈生命周期= request 生命周期的!!值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构1:采用标签<s:debug>查看值栈结构图:map Context 结构图2:采用degbug模式查看值栈重要的两个部分结构如图所示:得出结论:值栈包含两个部分:root map⏹CompoundRoot对象,保存Action相关对象--- List结构⏹ContextMap 上下文Map,保存常用web对象引用---- Map结构值栈对象获取两种方式:可以由源码追踪得到:如图:1、request.getAttribute(“struts.valueStack”);2、ActionContext.getContext().getValueStack() ;值栈包括CompoundRoot (对象栈,继承ArrayList)、OgnlContext (ognl上下文,实现Map接口)OgnlContext 上下文,引入CompoundRoot,提供HashMap (values),引用常用web对象1.4.详细分析值栈内部对象的创建和生命周期值栈生命周期,就是request生命周期,一次请求,对应一个值栈实例每次新的请求对应一个新的值栈对象实例! 源码:值栈创建过程源码分析:如果请求资源是jsp静态页面而非action 值栈对象也创建:但是拦截器不起作用!如果访问的是action组件需要注意拦截器会起作用生效!!1、在StrutsPrepareAndExecuteFilter的prepare.createActionContext(request, response);创建ValueStack ,将常用web对象,保存OgnlContext的Map 中2、访问Action ,通过ActionProxy ,调用ActionInvocationDefaultActionInvocation 的init 方法stack.push(action); 将当前Action对象,压入root栈顶部V alueStack 的root 栈存在2个对象,DefaultTextProvider、ValueStackAction(Action栈顶)3、执行ModelDriven 拦截器,判断Action是否实现ModelDriven接口,如果实现了,stack.push(model); 将model压入root栈顶部,root栈三个对象1.5.ognl表达式会执行ValueStack 的findValue 搜索值栈中数据搜索顺序,先搜索Root栈每个对象的属性,如果都没有搜索Map的key直接搜索Map的key ,不会搜索root栈⏹如果访问root (CompoundRoot 对象栈内容),不需要#⏹如果访问Map 内容(request、response、session、servletContext、attr、parameters),⏹需要# 进行访问例如# 相当于request.getAttribute(“name” )1.6.案例演示:值栈存储数据和ognl获取数据1.6.1.值栈中保存基本数据类型(int double String) action 存储数据m1.jsp 获取数据2: 采用set 方法压入栈顶action 代码m2.jsp 页面获取之3: 数据存放在context map 值栈下方数据action 代码:m3.jsp1.6.2.值栈中保存对象数据类型action 存储对象因action 存放值栈对象中所以提供成员对象通过值栈存储页面获取相关数据对象存储除了栈顶之外栈顶对象: 通过属性名获取值!!非栈顶对象valuestack.find(搜索表达式); action 代码m4.jsp页面获取数据1.6.3.值栈中保存集合数据类型(list /map)迭代list集合action代码压入值栈list_map.jsp 页面迭代map存入值栈迭代数组action代码压入值栈页面迭代数据1.6.4.值栈中保存web相关的数据类型用户数据保存request session.....jsp 页面获取这些对象中保存数据通过下方context 对象#key #parameters : 获取请求参数信息request.getParameterMap()=#parameters <,String[]>demo1:#attr 搜索pageContext request valuestack session application 类型EL 按照顺序查找存储数据添加值栈!! attr 搜索的顺序如果上述对象搜索完毕都没有需要数据返回Null 如果找到不找了!!demo2#request request 存储数据demo3#session session 存储demo4action 代码:m6.jsp页面获取相关数据1.6.5.ognl之#号的使用用法一:访问OgnlContext的Map中常用web对象,添加#进行访问#attr 按照page --- request --- session --- application进行搜索Action 代码Jsp代码用法二:不加# 调用ValueStack搜索,先搜索root属性,后搜索Map Action 代码JSP代码用法3:构造Map#{…foo1‟:…bar1‟, …foo2‟:…bar2‟}相当于Map集合对象构造List集合{"睡觉","跑步","洗衣服"}例如:1.7.EL表示式也可以获取值栈数据EL 表达式原理,在pageContext、request、session、application 四个范围,调用request.getAttribute() 获取数据EL可以获取值栈数据引入struts2前端控制器改写request.getAttribute() request 对象做了一个包装重写request.getAttribute() 原来request.getAttribute() 直接从request.setAttribute(存储) 获取数据现在: struts2 getAttribute() 重写: 先去request.getAttribute(key) 找到返回!! 如果找不到返回值null 根据null 继续搜索值栈调用值栈对象findValue(expression) 如果找不到Null 找到返回request 产生变异getAttribute() EL搜索顺序pageContext、request、valueStack session、application阅读StrutsPrepareAndExecuteFilter 源码对requestStruts2 框架提供StrutsRequestWrapper 包装类,对request 的getAttribute 方法增强优先使用request.getAttribute 取值,如果取不到,执行valueStack的findValue方法当堂问题:request.setAttribute(“name“, ”aaa“ ) ;valueStack.set(“name“,”bbb“ )页面<s:property name=”name” /> ----- bbb${name} ------ aaa2.Ognl 表达式语法Struts2 存取数据,通过值栈完成的,Ognl 是访问值栈数据表示式语言语法:% 号用法$ 号用法2.1.%号的使用(jsp页面或者配置struts.xml)“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

开源框架之struts2笔记归纳张慧讲师.doc

开源框架之struts2笔记归纳张慧讲师.doc

======================Day04====================1.回顾1)视图(jsp)到业务控制器(action)数据的传递,为action注入属性eg:在action中有一个user属性,<input type="text" name="ername"/>2)在struts.xml中配置静态的参数,为action注入属性值eg:<action><param name="pageSize">4</param>//action.setPageSize(4)<param name="pageinfo.pageSize">4</param>//action.getPageinfo().setPageSize(4);</action>3)ognl valueStack struts2标签a、struts2运转流程:客户端浏览器提交请求,请求业务控制器,struts2控制器接收到请求,创建valueStack对象,并且把valueStack对象放入request作用域中,接着创建业务控制器action的对象,同时把action对象放入valueStack,控制器调用action的业务方法,默认调用execute,然后由业务控制器action调用模型,模型返回结果给业务控制器action,action接收到模型返回的结果,再把result的name返回给控制器,控制器按照result的配置定位视图(jsp),最后jsp响应给浏览器.在视图(jsp)中使用struts2标签和ognl表达式进行数据的输出.2.valueStack1)valueStack是值栈,是一个栈的结构,是xwork对ognl的封装.2)valueStack在request作用域中,request.setAttribute("struts.valueStack",valueStack)3)在视图(jsp)使用<s:debug/>查看valueStackeg1:<s:property value="user"/>a.首先从request作用域中找到valueStackb.传递ognl表达式user到valueStack中的ognl引擎,ognl引擎进行解析,ognl 引擎到root对象中获取user属性值,并且把值返回.eg2:<s:property value="#user"/>a.首先从request作用域中找到valueStackb.传递ognl表达式#user到valueStack中的ognl引擎,ognl引擎进行解析,ognl引擎到context对象中获取user键所对应的值,并且把值返回.4)struts2如何去支持el,如何去支持request.getAttribute("attr1")a.把request对象类型输出<%=request%><%=request.getClass().getName()%>b.附加源代码,查看实现结论:struts2封装了一个request的类StrutsRequestWrapper,这个类继承了HttpServletRequestWrapper implements HttpServletRequest,struts2在StrutsRequestWrapper中重写了getAttribute(String s),如何重写的:从request的作用域中拿到valueStack,再从valueStack中查找属性名所对应的属性值,再把值返回.在struts2框架整个运转过程中,request对象类型是:StrutsRequestWrapper3.业务控制器action如何访问reqeust,session以及application4.result的常用类型========================Day05======================================== 1.回顾1)什么是MVC:模型、视图、控制器2)什么是struts2:struts2基于mvc设计模式,实现了复杂的mvc控制流程,方便使用者。

struts2笔记

struts2笔记

Struts2笔记✧S truts.xml中的配置引用struts标签库<%@taglib prefix="s"uri="/struts-tags"%>Bean配置<bean class="" type="" name = "" scope="" static="" optional="">Type:bean的规范通常是某接口来体现;Scope: bean的作用域default、singleton、request、session、thread;Static:表明bean是否是静态注入,当指定了type属性时,该属性不应该指定为true Optional:指定bean是否是一个可选bean,可选属性。

常量配置<constant name="常量名" value="常量值">命名空间配置●当包制定了命名空间时action的路径为命名空间+action名称●如果在命名空间里找不到action系统会在默认的命名空间查找该action●配置跟命名空间namespace="/"包含配置<struts><include file="struts-shop.xml"></struts>Struts2会在struts.xml中配置多个struts配置文件拦截器配置●拦截器定义<intercepters><interceptor name="拦截器名" class="拦截器实现类"><interceptor-stack name="拦截栈名"><interceptor name="拦截器名" ><interceptor name="拦截器名" ></interceptor-stack></intercepters>●Action中使用拦截器<action name="" class=""><result name=""></result><interceptor name="拦截器名" ></action>Jsp页面中显示action属性(<s:property value="属性名称">)Action访问servletAPI●间接访问ActoinContext ac = ActionContext.getContext();●直接访问Action继承ServletActionContext可直接访问ServletAPI动态方法调用①<fomr action="action名称!方法名称.action" method="">②将指定方法名添加事件例:<input type="button" value="注册" onclick="regist()"/>③实现该方法function regist(){targetAction = document.form[0];targetAction .action = "action名称!方法名称.action";targetAction.submit();}④在action中实现该方法配置action中的method●使用通配符<action name="*_*" method ="{2}" class="{1}"><result name=""> /{2}.jsp</reuslt></action>●当请求中能匹配action的元素,则method=“第二个星号的内容”;class=“第一个星号的内容”结果页面为:第二个星号内容.jsp有完全符合URL请求的配置默认的Action(可显示连接视图)<defult-action-ref name="simpleViewResultAction"><action name="simpleViewResultAction" class=""><result name=""> </reuslt></action></defult-action-ref>Struts2支持多种处理结果类型(<result type="*"></result>)◆plintText类型处理结果(显示试图资源的源代码)<param name="location">/webcome.jsp</param><param name="charSet">/webcome.jsp</param> // 这只显示编码方式◆redirect类型处理结果(包括类型:redirectAction)请求参数、属性都会丢失◆动态结果使用通配符:*◆请求参数决定结果<result > ${参数名}.jsp</result>◆全局结果<global-result></global-result>所有的action都有效,现在本action搜索视图结果在搜全局结果。

struts2学习笔记

struts2学习笔记
Байду номын сангаас
struts2 的处理流程: 核心控制器(StrutsPrepareAndExecuteFilter)--->Interceptor--->action---->业务逻辑层--->dao 层
一.struts2 核心文件 struts.xml 的配置
<package name="struts2" namespace="" extends="struts-default"> <action name="sum" class="com.alex.FirstAction"> <result name="positive">/positive.jsp</result> <result name="negative">/negative.jsp</result> </action> <constant name="struts.action.extension" value="jun,lu"/> <!--指定需要 Struts 2 处理的请求后缀,多个之间用逗号分开--> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <!--关闭动态方法调用。--> <constant name="struts.custom.i18n.resources" value="message"/> </package> 说明:space 声明命名空间。这里和表单提交的要保持一致。例如: namespace="/mystruts" 那么在表单提交的时候应该<s:form action="mystruts/sum.action" > namespace="" 那么在表单提交的时候应该<s:form action="sum.action" > 2.<action name="sum" class="com.alex.FirstAction"> class 便是对应的 Action 类 name 对应 action 的唯一标识。和表单提交时保持一致。例如: name="yj" 那么在表单提交的时候应该<s:form action="yj" > 3.<result name="positive">/positive.jsp</result> 判断跳到哪一个页面,其中 name 是唯一标识。和"com.alex.FirstAction"的返回值进 行对比。相同就跳到相应的页面 4. <constant name="struts.custom.i18n.resources" value="message"/> 配置常量 资源文件--> 1.Action 范围:类名.properties (在国际化的时候,那么就应该是:类名_zh_CN.properties ) //配置一些类型转换错误信息和其他的信息 2.包范围:package.properties 需要放在包下面,只能被该包和子包访问 (在国际化的时候,那么就应该是:package_zh_CN.properties ) 3.全局范围:通过 struts.custom.i18n.resources 来定义全局资源文件,比如在 struts.xml 中配置: <constant name="struts.custom.i18n.resources" value="message"/> 那么全局资源文件就是 message.properties

Struts2学习笔记

Struts2学习笔记

struts2学习笔记Struts2 框架第一天今天重点内容: 1、什么是Struts2框架?框架特性分析 2、 struts2 快速入门(分析struts2 运行原理) 3、 struts2 常用配置 4、如何访问Struts2 Action (Servlet) 5、 Struts2 结果集使用(响应跳转/ajax) 1. Struts2 框架概述1.1. 什么是struts2Struts2 框架问题:什么是框架?为什么要学习框架?框架是一些已经写好代码,通常和具体业务无关(可以看成:软件的半成品)学习框架,提高开发效率,简化开发(应用框架,实现代码代码开发实现开发标准化) javaEE三层结构在web阶段 DAO模式符合JAVAEE三层结构的三层结构出自 JavaEE规范(体系结构图)? 表现层? 业务层? 持久层/集成层Struts2 是一个表现层框架(简化表现层代码开发)分层开发:代码结构更加清晰,为了更好维护和扩展1.2. struts2 由来由两个框架优点合并后发展而来(struts1 + webwork)历史由来: Java兴起 98年(最早进行java开发分方向 j2se 、j2ee、 j2me ) J2EE 企业级应用软件开发2000 年左右出现struts1 (几乎所有开发人员都在用)随着互联网的发展struts1设计慢慢开始存有缺陷和不足 Webwork框架的出现该框架的设计思想比struts1 先进的多,例如:引入拦截器机制、 ognl 表达式语言 Apache 推出struts2 框架,特点: 开发流程类似struts1 ,内部结构类似webwork (struts2 和 webwork 源自xwork 命令模式框架)1.3. struts2 开发包结构使用框架,导入jar包课程使用 struts-2.3.15.3-all.zip 版本学习apps 使用demo (方便后期快速导入jar包和配置文件)开发中war重命名成zip包解压找到里面的13个核心jar包 doc 文档(学习struts2的官方官方规范文档) lib 开发struts2 需要的所有jar包 src 源代码开发struts2 没必要导入 lib下 128个jar包(去struts2_blank.war下方找struts2 最基本jar)将war包改为zip 扩展名,解压缩回顾jar记忆: 核心struts2-core-3.15.3.jar+ xwork-core+ognl (3) 上传(2jar) 日志: 2 jar 字符串 lang 1asm.* 3 jar 处理字节码信息 javassist.jar 1 代理相关 freemarker 1 jar 图形模板引擎开发strutrs2 基包导入web 工程!感谢您的阅读,祝您生活愉快。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Struts2_day03
前一天内容
1 在action获取表单提交数据
(1)使用ActionContext类获取
(2)使用ServletActionContext类获取
(3)接口注入
2 结果配置
(1)全局结果页面和局部结果页面
(2)result标签type属性
- type属性值:
-- 默认值是dispatcher做转发
-- redirect做重定向
-- chain转发到action
-- redirectAction重定向到action
3 struts2提供获取表单数据方式
(1)属性封装
(2)模型驱动封装
(3)表达式封装
4 struts2获取数据封装到集合中
5 使用模型驱动和属性封装注意问题:
(1)不能同时使用对同一个表单进行数据操作
6 表达式封装和模型驱动比较
(1)相同点:可以把数据封装到实体类对象里面
(2)不同的:表达式封装可以封装到多个实体类对象里面今天内容
1 ognl概述
2 ognl入门案例
3 什么是值栈
(1)servlet和action区别
(2)值栈存储位置
- 每个action对象里面有一个值栈对象
- 值栈对象里面有action引用
4 如何获取值栈对象
5 值栈内部结构
(1)root:list集合
(2)context:map集合
6 向值栈放数据
(1)s:debug标签
(2)向值栈放字符串
(3)向值栈放对象
(4)向值栈放list集合
- set方法
- push方法
- 定义变量,get方法
7 从值栈获取数据
(1)从值栈获取字符串
(2)从值栈获取对象
(3)从值栈获取list集合
- s:iterator标签使用
8 EL表达式获取值栈数据
(1)增强request里面getAttribute方法
9 ognl表达式#、%使用
OGNL概述
1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取域对象里面的值
2 OGNL是一种表达式,这个表达式功能更加强大,
(1)在struts2里面操作值栈数据
(2)一般把ognl在struts2操作:和struts2标签一起使用操作值栈
3 OGNL不是struts2的一部分,单独的项目,经常和struts2一起使用
(1)使用ognl时候首先导入jar包,struts2提供jar包
OGNL入门案例
1 使用ognl+struts2标签实现计算字符串长度
(1)在java代码中,调用字符串.length();
2 使用struts2标签
(1)使用jstl时候,导入jar包之外,在jsp页面中引入标签库
使用struts2标签时候,在jsp中引入标签库
(2)使用struts2标签实现操作
什么是值栈
1 之前在web阶段,在servlet里面进行操作,把数据放到域对象里面,在页面中使用el表达式获取到,域对象在一定范围内,存值和取值
2 在struts2里面提供本身一种存储机制,类似于域对象,是值栈,可以存值和取值
(1)在action里面把数据放到值栈里面,在页面中获取到值栈数据
3 servlet和action区别
(1)Servlet:默认在第一次访问时候创建,创建一次,单实例对象
(2)Action:访问时候创建,每次访问action时候,都会创建action对象,创建多次,多实例对象
4 值栈存储位置
(1)每次访问action时候,都会创建action对象,
(2)在每个action对象里面都会有一个值栈对象(只有一个)
获取值栈对象
1 获取值栈对象有多种方式
(1)常用方式:使用ActionContext类里面的方法得到值栈对象
2 每个action对象中只有一个值栈对象
值栈内部结构
1 值栈分为两部分:
第一部分root,结构是list集合(1)一般操作都是root里面数据
第二部分context,结构map集合
2 struts2里面标签s:debug,使用这个标签可以查看值栈结构和存储值
(1)访问action,执行action的方法有返回值,配置返回值到jsp页面中,在jsp页面中使用这个标签
点击超链接看到结构
(2)在action没有做任何操作,栈顶元素是action引用
- action对象里面有值栈对象
- 值栈对象里面有action引用
向值栈放数据
1 向值栈放数据多种方式
第一种获取值栈对象,调用值栈对象里面的set 方法
第二种获取值栈对象,调用值栈对象里面的push方法
第三种在action定义变量,生成变量的get方法
向值栈放对象
1 实现步骤
第一步定义对象变量
第二步生成变量的get方法
第三步在执行的方法里面向对象中设置值
向值栈放list集合
第一步定义list集合变量
第二步生成变量的get方法
第三步在执行的方法里面向list集合设置值
从值栈获取数据
1 使用struts2的标签+ognl表达式获取值栈数据(1)<s:property value=”ognl表达式”/>
获取字符串
1 向值栈放字符串
2 在jsp使用struts2标签+ognl表达式获取
获取对象
1 向值栈放对象
2 在页面中获取值
获取list集合第一种方式:
第二种方式:
第三种方式:
其他操作
1 使用set方法向值栈放数据,获取
2 使用push方法向值栈放数据,获取
(1)使用push方法设置值,没有名称,只有设置的值
(2)向值栈放数据,把向值栈放数据存到数组里面,数组名称top,根据数组获取值
EL表达式获取值栈数据(为什么)
1 EL表达式获取域对象值
2 向域对象里面放值使用setAttribute方法,获取值使用getAttribute方法
3 底层增强request对象里面的方法getAttribute方法
(1)首先从request域获取值,如果获取到,直接返回
(2)如果从request域获取不到值,到值栈中把值获取出来,把值放到域对象里面
4 查看源代码
OGNL的#、%使用
#使用
1 使用#获取context里面数据
2 演示# 操作
(1)向request域放值
(2)在页面中使用ognl获取
%使用
1 在struts2标签中表单标签
(1)在struts2标签里面使用ognl表达式,如果直接在struts2表单标签里面使用ognl表达式不识别,只有%之后才会识别。

案例-列表功能改造(值栈)。

相关文档
最新文档