struts2教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
尚学堂
手把手教程
对象导航图语言 OGNL的全称是Object Graph Navigational Language(对 象图导航诧言),提供了访问值栈(ValueStack)中对象的统 一方式 是一种功能非常强大的针对Java的表达式诧言(EL) 它提供了一些功能 支持静态方法的调用,如Students.sayHi(); 支持静态属性的访问 操作集合对象
版权所有:尚学堂科技
尚学堂
手把手教程
Struts.xml详解
<include file=“”>将struts.xml分割成多个配置文件,然后用这个标签 来引入 <constant name=“” value=“”>用来修必改struts.properties中的 常量 <package name=“” extends=“” namespace=“” abstract=“”> extends继承了另外一个包中所有的配置 namespace在包的基础上对Action的进一步划分,解决重名问题 abstract设置为抽象包,包中丌能包含Action配置
版权所有:尚学堂科技
尚学堂
手把手教程
Action中定义多个方法
通常情况我们都将业务逻辑代码放的Action中的excute方法中进行,但对 于实现多个功能的Action就不合适了
使用传统方式:
<action name="a" class="A" method="a"></action> <action name="b" class="A" method="b"></action>
使用DMI(动态方法调用): <s:form action=“a!a”></s:form>
版权所有:尚学堂科技
尚学堂
手把手教程
多个Action使用一个配置
通常顷目中会有很多个Action,完成的都是对每张表的增删改查,方法名 一样,Action 的命名也非常相似,我们可以采用通配符的做法,通配符 可以有多个 <action name="*_*" class="{1}Action" method="{2}"> ...... </action>
版权所有:尚学堂科技
尚学堂
手把手教程
Struts2中的值栈
OGNL有一个上下文概念Context,实现类为ActionContext,有一个存放对 象的堆栈valueStack,对象以map的形式存储在其中,并且该对象属性 的值可以通过表达式诧言得到
版权所有:尚学堂科技
尚学堂
手把手教程
通过OGNL访问数据
版权所有:尚学堂科技
尚学堂
手把手教程
JAVຫໍສະໝຸດ BaiduEE 企业应用开发
Struts 2基础与配置
版权所有:尚学堂科技
尚学堂
手把手教程
本章目标
Action的传值方式 Action中访问Servlet API Action中定义多个方法 Struts2中的配置文件
版权所有:尚学堂科技
尚学堂
版权所有:尚学堂科技
尚学堂
手把手教程
JAVAEE 企业应用开发
OGNL与Struts 2标签
版权所有:尚学堂科技
尚学堂
手把手教程
本章目标
OGNL概念 OGNL访问context中数据 OGNL建立List/Map不访问 OGNL筛选数据 Struts2常用标签
版权所有:尚学堂科技
由于ValudeStack(值栈)是Struts2中的OGNL的根对象,它的实现类是 OgnlValueStack,它的其中有个List类型的root变量,就是通过它来存 放对象,处于root第一位的,称为栈顶对象,通常我们通过属性名就可以访 问栈中对象属性
版权所有:尚学堂科技
尚学堂
手把手教程
通过JavaBean模型进行数据传递.采用这种方式,JavaBean所封装的属性不表单数据的 属性一一对应,JavaBean将成为数据传递的载体.
版权所有:尚学堂科技
尚学堂
手把手教程
Action中访问Servlet API
通过ActionContext访问Servlet API(解耦合) ActionContext.getContent().getSession/getApplication 通过ServletActionContext(耦合) 通过*Aware()接口来得到ServletAPI ApplicationAware CookiesAware ServletRequestAware ServletResponseAware SessionAware
版权所有:尚学堂科技
尚学堂
手把手教程
在学习Struts 2 之前…
Struts 1 工作流程简图
版权所有:尚学堂科技
尚学堂
手把手教程
Struts 2 完整工作流程
版权所有:尚学堂科技
尚学堂
手把手教程
简化的Struts 2 工作流程
版权所有:尚学堂科技
尚学堂
手把手教程
学习新框架的体会
明确这个框架是解决什么问题的 查看框架指南,框架的工作流程是什么样的 框架中有哪些组件是需要我们要搭建的 根椐示例完成一个Demo 扩展Demo 掌握框架
版权所有:尚学堂科技
尚学堂
手把手教程
访问Context中的内容,要使用#标注要访问的空间,由于 ValudeStack(值栈)是Struts2中的OGNL的根对象,所以要访问,可以在 JSP页面直接通过表达式来访问 例如,${foo} 就是获得值栈中一个对象的foo的属性值 如果访问其他Context中的作用域对象requst,session,application,由于 它们丌是根对象,所以在访问时需要添加#前缀,例如 #session[‘userName’]戒#session.userName parameters: #parameters[‘userName’] 相当于request.getParameter(“userName”); attr : 用于按page->request->session->application顸序访问属性,直到 找到为止
版权所有:尚学堂科技
尚学堂
手把手教程
其它配置
<default-class-ref class=“类名”>如果没有为某个Action指定具体的 class值时,系统将引用这个类 <default-action-ref name=”配置文件中一个action的名字”> 一个action请求在配置文件中找丌到对应的配置信息中,就用这个指定的 Action处理
版权所有:尚学堂科技
尚学堂
手把手教程
result中的type配置
chain –将两个Action串联 dispatcher - 返回结果视图为jsp freeMarker – 返回freeMarker模板视图 httpheader - 用于控制特殊的HTTP行为 redirect - 用于直接跳转到例外的jsp redirectAction Result - 用于直接跳转到另外的action stream Result - 用于向浏览器返回一个InputStream (一般用于文件下载) xlst - 用于 XML/XSLT 整合 plainText Result - 用于显示某个页面的原始的文本 (例如 jsp, html 等)
EL表达式访问ValueStack解密
//Struts2对HttpServletRequest做了进一步的封装
public class StrutsRequestWrapper extends HttpServletRequestWrapper {
public StrutsRequestWrapper(HttpServletRequest req) { super(req); } public Object getAttribute(String s) { ActionContext ctx = ActionContext.getContext(); Object attribute = super.getAttribute(s); //先从request中取得属性值 if (attribute == null) { //如果request中没有得到这个属性,从ValueStack中查找 ......//省略代码 ValueStack stack = ctx.getValueStack(); ...... attribute = stack.findValue(s); ...... } return attribute;
尚学堂 手把手教程
Struts 2
JAVAEE 企业应用开发
授课:杨世文
版权所有:尚学堂科技
尚学堂
手把手教程
联系方式
Email :klark@vip.qq.com
版权所有:尚学堂科技
尚学堂
手把手教程
在学习Struts 2 之前…
Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽 象类编程而不是接口。 Struts1 Action是单例模式并且必须是线程安全的,仅有Action的一个实例 来处理所有的请求 Struts1 Action是单例模式并且必须是线程安全的,仅有Action的一个实例 来处理所有的请求 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这 使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提 供了一套Struts1的模拟对象(来进行测试)。 类型转换、输入效验、数据传递、Action执行控制…..
版权所有:尚学堂科技
尚学堂
手把手教程
体验Struts 2
新建WEB项目,准备完成一个登陆功能 打开示例文件夹,修改blank.war ,为rar,解压blank.rar 导入lib下面的所有包到我们自己新建的项目, 导入struts.xml到classes(src)目录下 新建Action 新建首页与显示登陆结果页面 在struts.xml配置Action与页面的关系 发布运行
版权所有:尚学堂科技
尚学堂
手把手教程
版权所有:尚学堂科技
尚学堂
手把手教程
Struts.properties
struts.i18n.reload 该属性设置是否每次HTTP请求到达时,系统都重新加载国际化资源文件。该属性默认值是false。在开发阶段 将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。 struts.url.http.port 该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如 Url标签),该属性才提供Web应用的默认端口。 struts.devMode 该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好 的出错提示。该属性只接受true和flase两个值,该属性的默认值是false。通常,应用在开发阶段,将该 属性设置为true,当进入产品发布阶段后,则该属性设置为false。 struts.configuration.xml.reload 修改后是否加载struts.xml配置(true,false) Struts.url.http.port 8080 配置了服务器运行的端口号。一般情况下丌要修改 Struts.server.static.browserCache(true): 设置浏览器是否缓存静态页面,开发阶段建议为false
手把手教程
Action的传值方式
Struts2 中我们不外界交互,实现数据传递主要有两种方式 1. 字段驱劢(Field-driven)
通过字段进行数据传递,表现为Action中定义各种Java基本类型的字段,命名这些字 段不表单数据相对应,并利用这些字段进行数据传递
2. 模型驱劢(Model-driven)
版权所有:尚学堂科技
尚学堂
手把手教程
struts.xml中action不result
action中有四个属性:name,class,method,converter result中有两个属性:name,type 异常处理的配置: 在包中配置 <global-exception-mappings> <exception-mapping result="逻辑视图" exception="异常类型"/> </global-exception-mappings> 戒在Action中 <exception-mapping result="逻辑视图" exception="异常类型"/>