开源框架之struts2笔记归纳.doc
- 文档编号:1299949
- 上传时间:2023-04-30
- 格式:DOC
- 页数:17
- 大小:176.50KB
开源框架之struts2笔记归纳.doc
《开源框架之struts2笔记归纳.doc》由会员分享,可在线阅读,更多相关《开源框架之struts2笔记归纳.doc(17页珍藏版)》请在冰点文库上搜索。
17
Struts部分:
1
1)为什么要学习Struts框架 2
2)为什么使用MVC?
2
3)MVC在JavaWeb中的实现 2
*4)Struts2的主要工作流程 2
3.Struts2框架的历史 2
*4.Struts2框架基本使用 2
1.Struts2使用基本规则 3
Struts2标签+OGNL表达式 4
2)OGNL工作原理 5
4.OGNL在Struts2中的应用 6
1)xwork对ognl进行扩展和改造 6
*2)ValueStack对象(参考valuestack.jpg) 6
*3)在JSP中访问ValueStack数据方法 6
a.使用Struts标签+OGNL表达式 6
b.使用EL表达式 6
1.Struts2框架Action组件的核心应用 7
1)Action组件基本原理 7
*3)Action属性注入 8
*4)如何利用一个Action处理多个请求 8
1.前期课程回顾 9
1.Result组件原理 9
1)Result组件的作用 9
2)Result组件实现规则 9
*2.常用的几种Result组件 10
2)Action响应 11
1.Struts2标签 12
1)通用标签 12
2)表单标签 12
2.拦截器组件 12
*2)掌握自定义拦截器的使用 13
Struts部分:
======================Day01=========================
1)为什么要学习Struts框架
Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
2)为什么使用MVC?
MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。
3)MVC在JavaWeb中的实现
Servlet,JSP,Filter,JDBC
a.原ShoppingCart程序就是一个MVC结构实现
View实现部分:
采用JSP组件实现
Model实现部分:
采用DAO、Entity等组件实现
Controller实现部分:
采用ActionServlet组件实现
b.ShoppingCart程序虽然基于MVC,但结构还有一些问题:
当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。
改造方案:
为Servlet提供一个XML配置文件,用于定义请求和Action组件的对应关系。
然后将if...else分支中的代码提取到对应的Action组件中。
*4)Struts2的主要工作流程
a.首先客户端浏览器发送一个请求,请求到达控制器。
b.控制器根据xml配置信息调用相应的Action组件(XML配置了请求和Action对应关系)
c.执行Action组件业务处理,该组件可以调用DAO,Cart,Entity等组件。
d.控制器调用JSP视图组件生成一个响应界面给浏览器
5)Struts的内部原理:
编程原理:
用户发送http请求---》Web服务器(tomcat)--》加载
web.xml(web部署描述文件)文件-执行struts核心控制器(
StrutsPrepareAndExecuteFilter或者filterDispatcher)-->
加载struts.xml文件,通过请求action名字找到匹配的action
-->在action中调用(execute)(业务层|数据层)
-->执行result=“"-->
通过result找到struts.xml与result名字匹配结果--》转发到
页面返回给调用者
程序调用:
struts内部原理图:
(1)用户发送http请求--》启动web服务器---》加载web.xml(web部署描述文件)配置文件---》执行web.xml中相应过滤器
ActionContextCleanUp:
清除页面中的属性
otherfilter(SiteMesh:
装饰过滤器)
SiteMesh作用:
页面布局、装饰
FilterDispatcher:
struts2核心控制器
注意:
(a)使用SiteMesh(装饰过滤器),struts2容器不在管理页面中属性,需要调用ActionContextCleanUp完成销毁
(b)过滤器执行是有顺序
ActionContextCleanUp-->SiteMesh-->FilterDispatcher
(2)中央控制器FilterDistpacher询问ActionMapper是否需要请求action
(3)如果需要请求action,FilterDispatcher就会调用它的代理(ActionProxy)加载配置文件
(4)ActionProxy会调用ConfigurationManager读取strus.xml配置文件
注意:
只加载一次
(5)根据请求名字,ActionProxy(action代理)调用所有拦截器(Inertceptor),ActionProxy(action代理)创建ActionInvocation,去执行所对应action类,根据Action类中名字找到匹配result页面
(jsp、freeMarker、Velocity)等技术,在此执行拦截器
注意:
struts2拦截器和servlet过滤器功能相同,并比filter强大
拦截器执行顺序:
先进后出
(6)相应给用户(HttpServletResponse)
3.Struts2框架的历史
Struts2框架和Struts1没有必然联系,它是将原来的WebWork框架核心部分Xwork提取,进行封装后发布为Struts2。
*4.Struts2框架基本使用
*1)Struts2使用步骤
*a.下载发布包,将核心包导入web工程
struts2-core-2.1.8.jar:
Struts2核心包
xwork-core-2.1.6.jar:
Xwork核心包
ognl-2.7.3.jar:
OGNL技术工具包,与EL相似,但比EL强大。
freemarker-2.3.15.jar:
界面模板技术,与JSP相似。
commons-fileupload-1.2.1.jar:
文件上传包。
*b.配置Struts2控制器,在src下添加struts.xml、Struts2控制器采用的是StrutsPrepareAndExecuteFilter组件实现。
在web.xml文件中配置该Filter组件。
c.根据请求编写Action,DAO,Entity等组件
*2)HelloWord示例
welcome.action-->struts2控制器-->WelcomeAction-->welcome.jsp
----------------------Struts2详细工作流程---------------------------
a.浏览器发出welcome.action请求
b.请求到达Struts的Filter控制器(由于web.xml配置)
c.Struts控制器判断请求类型,如果是/welcome.action或/welcome格式请求,将调用struts.xml配置,寻找对应的Action组件
d.调用Action组件的execute方法处理请求,最后返回一个String视图标识
e.Struts控制器根据视图标识寻找相应的JSP(struts.xml中result配置)
f.调用JSP视图生成响应界面给浏览器显示。
======================Day02=========================
1.Struts2使用基本规则
1)web.xml配置
涉及了Struts2的Filter控制器配置
a.
b.
2)Action编写规则
a.执行方法的定义publicStringXXX(){}默认方法名是execute
b.属性变量的定义
publicclassUser{
privateStringusername;//成员变量是username
//属性是user
publicvoidsetUser(Stringuser){
this.username=user;
}
publicStringgetUser(){
returnusername;
}
}
注意:
如果action需要接收请求数据或向JSP传递数据,需要与属性名保持一致。
3)struts.xml中的Action配置
1)元素嵌套顺序
2)
3)
4)
2.实现一个列表显示功能
/list.action-->ProjectListAction-->projectlist.jsp
1)开发步骤
a.引入struts2和数据库的驱动包
b.添加struts.xml配置文件,web.xml添加了Struts控制器配置
c.添加DBUtil工具类
d.添加Entity类
e.添加DAO编写方法
f.添加Action
g.添加Action配置(struts.xml)
h.添加JSP,显示列表
引入jstl标签库的jar包。
在JSP页面添加标签库引入指令
使用 forEach>标签 limitbegin,size begin=(page-1)*size pagebegin 10 23 36 n(n-1)*3 =========================== Struts2标签+OGNL表达式 3.OGNL表达式 1)什么是OGNL OGNL技术可以独立使用,封装在ognl.jar开发包中。 ObjectGraphicsNavigationLanguage对象图导航语言。 主要作用是对一些复杂对象的属性和方法进行访问。 EL表达式主要功能: 用于访pageContext,request,session,application范围内存储的数据。 OGNL不仅可以访问数据,还具有访问方法,对集合进行操作等功能。 2)OGNL工作原理 OGNL工具由三部分构成,分别是 a.OGNL引擎: 负责解释执行OGNL表达式,按表达式区root或map区域寻找数据。 b.Root根对象区域: 访问该区域数据OGNL表达式简洁方便。 适合放置访问频繁的对象元素。 c.Map对象存储区: 访问该区域需要使用“#key”访问。 适合放置访问不频繁的对象元素。 使用时,给OGNL引擎指定一个表达式,该引擎根据表达式去Root区或Map区访问对象的属性或方法。 *3)OGNL表达式语法 a.访问Root对象某个简单属性 表达式: "属性名" b.访问Root对象某个数组或者List集合 表达式: "属性名[0]" c.访问Root对象某个Map集合 表达式: "属性名.key"或者"属性名['key']" d.访问Root对象某个复合类型属性address 表达式: "address.子属性" e.访问Root对象某个复杂属性List
表达式:
"addresses[0].子属性"
f.访问Root对象的某个属性的方法
表达式:
"属性名.方法()"
g.支持Java中的表达式和运算符
h.定义一个List常量
表达式:
{"A","B","C"}
i.定义一个Map常量
表达式:
#{"key1":
value1,"key2":
value2}
j.访问静态常量或方法
表达式:
"@包名.类型@常量名或方法"
上述语法如果访问Map区域一样使用,只要注意追加"#key".
OGNL分析学习
OGNL是ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,
它是一个开源项目。
Struts2框架使用OGNL作为默认的表达式语言。
OGNL相对其它表达式语言具有下面几大优势:
1、支持对象方法调用,如xxx.doSomeSpecial();
2、支持类静态的方法调用和值访问,表达式的格式:
@[类全名(包括包路径)]@[方法名| 值名],例如:
@java.lang.String@format('foo%s','bar')
或@tutorial.MyConstant@APP_NAME;
3、支持赋值操作和表达式串联,如price=100,discount=0.8,
calculatePrice(),这个表达式会返回80;
4、访问OGNL上下文(OGNLcontext)和ActionContext;
5、操作集合对象。
Ognl有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现
了java.utils.Map的接口.
理解Struts2中的ValueStack
ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础
ValueStack(值栈):
贯穿整个Action的生命周期(每个Action类的对象实例都拥有一个
ValueStack对象).相当于一个数据的中转站.在其中保存当前Action对象和其他相关对象.
Struts框架把ValueStack对象保存在名为“struts.valueStack”的请求属性request中。
在ValueStack对象的内部有两个逻辑部分:
ObjectStack:
Struts把动作和相关对象压入ObjectStack中--List
ContextMap:
Struts把各种各样的映射关系(一些Map类型的对象)压入ContextMap中
Struts会把下面这些映射压入ContextMap中
parameters:
该Map中包含当前请求的请求参数
request:
该Map中包含当前request对象中的所有属性
session:
该Map中包含当前session对象中的所有属性
application:
该Map中包含当前application对象中的所有属性
attr:
该Map按如下顺序来检索某个属性:
request,session,application
理解OGNLContext
OgnlValueStack类包含两个重要的属性一个root和一个context。
*其中root本质上是一个ArrayList.
*而context是一个Map(更确切的说是一个OgnlContext对象)
在这个OgnlContext对象(context)中,有一个默认的顶层对象_root,OGNL访问context中这个默认顶层对象中的元素时,是不需要#号的,直接通过元素的名称来进行访问,
而访问其他对象时,如request、session、attr等,则需要#号引用。
注:
Struts2将OgnlValueStack的root对象赋值给了OgnlContext中的_root对象,在OgnlValueStack的root对象中,保存着调用Action的实例,因此,在页面上通过Struts2标签访问Action的属性时,就不需要通过#号来引用
总结:
ognlContext包含ObjectStack属性和ContextMap属性
4.OGNL在Struts2中的应用
1)xwork对ognl进行扩展和改造
xwork对OGNL原有的Root区域进行了改造,将其扩建成了一个栈结构。
可以存储多个目标对象。
当输入"id"表达式时,首先去栈顶对象寻找id属性值,没有再去次栈顶,依次向下寻找,找到返回。
*2)ValueStack对象(参考valuestack.jpg)
Struts2将扩展之后的OGNL封装成了ValueStack对象,利用该对象存储当前请求相关的所有数据。
例如action,request,session,application等。
root栈:
存储了action对象
context(map)区:
存储了request,session,application等对象引用。
*3)在JSP中访问ValueStack数据方法
a.使用Struts标签+OGNL表达式
debug>: 可以显示当前状态的ValueStack信息 property>: 显示ValueStack数据。 使用value属性指定OGNL表达式 date>: 将ValueStack的日期类型数据格式化后显示。 使用name属性指定OGNL表达式,format属性指定格式化模板。 iterator>: 将ValueStack的集合属性迭代循环。 使用value属性指定OGNL表达式。 if>... else>: 分支判断。 使用test属性指定一个OGNL判断表达式 b.使用EL表达式 EL表达式可以从pageContext,request,session,application范围获取数据,显示到页面。 但是在Struts2中利用EL表达式可以访问到ValueStack中的数据。 *在Struts2中EL表达式依次访问pageContext,request,valuestack,session,application范围的数据。 =================原因如下===================== JSP--》${user}--》request.getAttribute("user"); 在Struts2中,将原有的Request对象封装成StrutsRequestWrapper,并重写它的getAttribute()方法。 publicclassStrutsRequestWrapperextendsHttpServletRequestWrapper{ //覆盖原request的getAttribute publicObjectgetAttribute(Stringname){ //去原有的request对象中查找信息 Objectval=super.getAttribute(name); //如果原有的request找不到 if(val==null){ //去valuestack查找 vs.findValue(name);//--->Ognl.getValue("name",ctx,root) } returnval; } } ${user}-->request.getAttribute("user")-->Ognl.getValue("user",ctx,root) ======================Day03========================= 1.Struts2框架Action组件的核心应用 1)Action组件基本原理 a.当浏览器发送一个请求给Struts2控制器 b.控制器要创建一个ValueStack对象,将其存储在request中,使用struts.valueStack当做key。 c.控制器创建一个Action对象,并Action对象添加到ValueStack对象栈顶位置。 d.控制器将request封装之后,再将request,session,application等对象添加到ValueStack的context(Map)区域。 e.控制器调用Action对象的业务方法,处理请求。 默认调用execute f.控制器根据execute返回结果,调用result视图响应 上述过程: Action对象在请求处理完毕后销毁,因此与req
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 框架 struts2 笔记 归纳