开源框架之struts2笔记归纳Word文档下载推荐.doc

上传人:wj 文档编号:1494542 上传时间:2023-04-30 格式:DOC 页数:17 大小:176.50KB
下载 相关 举报
开源框架之struts2笔记归纳Word文档下载推荐.doc_第1页
第1页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第2页
第2页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第3页
第3页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第4页
第4页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第5页
第5页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第6页
第6页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第7页
第7页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第8页
第8页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第9页
第9页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第10页
第10页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第11页
第11页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第12页
第12页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第13页
第13页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第14页
第14页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第15页
第15页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第16页
第16页 / 共17页
开源框架之struts2笔记归纳Word文档下载推荐.doc_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

开源框架之struts2笔记归纳Word文档下载推荐.doc

《开源框架之struts2笔记归纳Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《开源框架之struts2笔记归纳Word文档下载推荐.doc(17页珍藏版)》请在冰点文库上搜索。

开源框架之struts2笔记归纳Word文档下载推荐.doc

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.<

filter-class>

指定正确包名.类名

b.<

url-pattern>

指定/*,控制器可以识别Action组件请求

2)Action编写规则

a.执行方法的定义publicStringXXX(){}默认方法名是execute

b.属性变量的定义

publicclassUser{

privateStringusername;

//成员变量是username

//属性是user

publicvoidsetUser(Stringuser){

this.username=user;

}

publicStringgetUser(){

returnusername;

}

如果action需要接收请求数据或向JSP传递数据,需要与属性名保持一致。

3)struts.xml中的Action配置

1)元素嵌套顺序<

struts>

<

package>

action>

result>

2)<

元素的extends属性必须继承自struts-default

3)<

元素name请求名不要加.action,class指定的Action类要正确。

4)<

元素的name属性与Action方法返回值保持一致。

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页面添加标签库引入指令

使用<

c:

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<

Address>

addresses

表达式:

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表达式

<

s:

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("

)-->

======================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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2