Struts2的工作机制原理分析及实例

            

if

 (stack != 

null

) { 

                request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack); 

            } 

        } 

catch

 (ConfigurationException e) { 

            LOG.error("Could not find action or result", e); 

            sendError(request, response, context, HttpServletResponse.SC_NOT_FOUND, e); 

        } 

catch

 (Exception e) { 

            

thrownew

 ServletException(e); 

        } 

finally

 { 

            UtilTimerStack.pop(timerKey); 

        } 

    } 

  

    

最后,通过

Result

完成页面的跳转。

 

  

3.4 

本小节总结

 

       

总体来讲,

Struts2

的工作机制比

Struts1.x

要复杂很多,

但我们不得不佩服

Struts

WebWork

开发小组的功底,

代码

如此优雅,甚至能够感受看到两个开发小组心神相通的默契。两个字:佩服。

 

  

       

以下是

Struts2

运行时调用方法的顺序图:

 

 

(图

21

 

  

四、

      

总结

 

阅读源代码是一件非常辛苦的事,对读者本身的要求也很高,一方面要有扎实的功底,另一方面要有超强的耐力和恒心。本章

目的就是希望能帮助读者理清一条思路,在必要的地方作出简单的解释,达到事半功倍的效果。

 

  

当然,笔者不可能为读者解释所有类,这也不是我的初衷。

Struts2+xwork

一共有

700

余类,除了为读者做到现在的这些,已无

法再做更多的事情。读者可以到

Struts

官方网站下载帮助文档,慢慢阅读和理解,相信会受益颇丰。

 

  

本章并不适合

java

语言初学者或者对

java

博大精深的思想理解不深的读者阅读,这其中涉及到太多的术语和类的使用,特别

不要去钻牛角尖,容易使自信心受损。基本搞清楚

Struts2

的使用之后,再回过头来阅读本章,对一些知识点和思想也许会有

更深的体会。

 

  

如果读者的

java

功底比较浑厚,而且对

Struts2

充满兴趣,但又没太多时间研究,不妨仔细阅读本章,再对照

Struts

的源代

码,希望对您有所帮助。

 

 

 

一、准备工作及实例

 

1

.

解压

struts-2.1.6-all.zip 

apps

目录

:struts2

自带的例子程序

 

docs

目录

:官方文档。

 

lib 

目录

:存放所有

jar

文件。

 

Src 

目录

:源文件存放地

 

2

.

六个基本包

 

struts2-core-2.1.6.jar 

开发的核心类库

 

freemarker-2.3.13.jar 

struts2

UI

标签的模板使用

freemarker

编写

 

commons-logging-1.0.4.jar 

日志包

 

ognl-2.6.11.jar 

对象图导航语言,通过它来读写对象属性

 

xwork-2.1.2.jar 

xwork

类库,

struts2

在其上进行构建

 

commons-fileupload-1.2.1.jar

文件上传组件,

2.1.6

版本后必须加入此

jar

 

strust2

struts-2.1.6

2.1.X

commons-fileupload-1.2.1.jar

包,在此

jar

包中包含了

RequestContext

类,如果不导入该

jar

包将会报异常。

 

3.

初识

struts2

配置文件

 

1

web.xml

文件

  

主要完成对

StrutsPrepareAndExecuteFilter

的配置(在以前的版本中是对

FilterDispatcher

配置,新版本同样支持用

FilterDispatcher

配置

),它的实质是一个过滤器,它

负责初始化整个

Struts

框架并且处理所有的请求。这个过滤器可以包括

xml

struts

StrutsPrepareAndExecuteFilter

外,

Struts

还提供了一个

ActionContexCleanUp

类,它的主要任务是当有其它一些过滤器要

访问一个初始化好了的

struts

框架的时候,负责处理一些特殊的清除任务。

 

2

struts.xml

文件

  

框架的核心配置文件就是这个默认的

struts.xml

文件,

在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。

在通常的应用开发中,我们可能想为每个不同的模块单独配置一个

struts.xml

文件,这样也利于管理和维护。这也是我们要配

置的主要文件。

 

3

struts.properties

(参

default.properties

  

Struts

框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在

struts.properties

文件中指定属性的

key

value

即可。属性文件可以放在任何一个包含在

classpath

中的路径上,但是通常我们都把它放在

/WEB-INF/classes

目录下面。我们可以在

struts-default.properties

文件中找到一个属性的列表。

 

4

struts-default.xml  

此文件是

struts2

框架默认加载的配置文件,

它定义了

struts2

一些核心

bean

和拦截器,

它会自动包含

(included)

struts.xml

(

<

package  

extends

=

"struts-default"

>

)

struts2-core.jar

中找到这个文件。

 

5

)其它配置文件

 

velocity.properties

struts-default.vm

struts-plugin.xml 

4.

MyEclipse

提示

xml

信息

 

当我们在编写

struts.xml

时,发现

eclipse

并不会给出帮助提示,那是因为

MyEclipse

默认并不支持

struts2

,所以我们需要

手工导入

dtd

以支持提示。步骤:

[window][preferences][MyEclipse][Files and Editors][XML][xml Catelog]

然后在右边点

add

添加:

location

dtd

文件所在的位置(

struts-2.0.dtd

文件

struts2-core-2.1.6.jar

中可以得到)

KeyType

选择

URI

Key

struts-2.0.dtd

文件中文档声明的内容(

http://struts.apache.org/dtds/struts-2.0.dtd

,在

struts.xml

文件中也

有此

key

值。

 

5.

如何使用

alt+/

提示

 

MyEclipse6.5

,

默认的提示为

Ctrl+Space

而它会与我们的输入法切换冲突,

使提示失效。

找到

key

先取消

Content 

Assist

命令的绑定,再用“

alt+/

”来绑定。

 

6.

实例

 

步骤一,新建

myStruts2

项目

,并导入

struts2

的六个基本

jar

包。

 

步骤二,建立

LoginAction

文件,主要代码如下:

 

package

 com.asm; 

import

 com.opensymphony.xwork2.Action; 

publicclass

 LoginAction 

implements

 Action { 

 

private

 String 

username

 

private

 String 

password

...

省略

get/set

方法

 

 

 

public

 String execute() 

throws

 Exception { 

 

 

if

 (

username

.equals(

"struts2"

)) { 

 

 

 

return

"loginSuccess"

 

 

else

 { 

 

 

 

return

"loginFailure"

 

 

 

说明

:实现了

Action

接口,主要是为了保证

execute

的正确定义,其实我们也可以不实现此接口,只要能保证

execute

方法书写

的正确书写(方法名,返回值)。

 

步骤三,在

struts.xml

文件中注册

LoginAction

。此配置文件要放在

src

目录下,实质就是成为

classpath

环境变量下的文件。主

要代码如下:

 

<?

xml 

version

=

"1.0" 

encoding

=

"UTF-8" 

?>

 

<!

DOCTYPE 

struts 

PUBLIC

 

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

 

"http://struts.apache.org/dtds/struts-2.0.dtd"

>

 

<

struts

>

 

 

<

package 

name

=

"myFirst" 

namespace

=

"/" 

extends

=

"struts-default"

>

 

 

 

<

action 

name

=

"login" 

class

=

"com.asm.LoginAction"

>

 

 

 

 

<

result 

name

=

"loginSuccess"

>

/success.jsp

</

result

>

 

 

 

 

<

result 

name

=

"loginFailure"

>

/failure.jsp

</

result

>

 

 

 

</

action

>

 

 

</

package

>

 

</

struts

说明

package

后面会有详细说明。

action

元素中的

name

属性值指定了此

action

所指定的请求路径为“

login.action

”。后

login.jsp

中的

<form action=...>

属性值就会参照此

name

属性。

 

步骤四、提供

jsp

页面

 

login.jsp

主要代码:

 

<

body

 

 

<

form 

action

="

<%=

request.getContextPath()

%>

/login.action

"

method

=

"get"

>

 

 

 

户名:

<

input 

type

=

"text" 

name

=

"username"

><

br

>

 

 

 

密码:

<

input 

type

=

"password" 

name

=

"password"

><

br

>

 

 

 

<

input 

type

=

"submit" 

value

=

"login"

>

 

 

 

</

form

>

 

</

body

>

 

failure.jsp

主要代码

 

<%@ 

page 

language

=

"java" 

import

=

"java.util.*" 

pageEncoding

=

"UTF-8"

%>

 

<%@ 

taglib 

uri

=

"/struts-tags" 

prefix

=

"s" 

%>

 

<

html

>

 

 

<

body

>

 

 

 

登录失败,错误的用户名:

<

s:property 

value

=

"username"

/><

br

>

 

 

 

<

href

="

<%=

request.getContextPath()

%>

/login.jsp

"

>

返回

</

a

>

 

 

</

body

>

 

</

html

说明

:使用了标签库,在

struts2

中使用标签库非常简单,只需要像上面那样导入标签库便可以使用所有的

struts2

的所有标签

 

success.jsp

主要代码

 

<

body

>

 

登录成功!

</

body

>

 

步骤五、配置

web.xml

。完成核心监听器注册。内容如下:

 

<?

xml 

version

=

"1.0" 

encoding

=

"UTF-8"

?>

 

<

web-app 

id

=

"WebApp_9" 

version

=

"2.4"

 

 

xmlns

=

"http://java.sun.com/xml/ns/j2ee"

 

 

xmlns:xsi

=

"http://www.w3.org/2001/XMLSchema-instance"

 

 

xsi:schemaLocation

=

"http://java.sun.com/xml/ns/j2ee 

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

>

 

 

<

filter

>

 

 

 

<

filter-name

>

struts2

</

filter-name

>

 

 

 

<!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

 

 

 

-->

 

 

 

<

filter-class

>

 

 

浏览后50页
分享到:
嵌入播放器:
预览 复制
你可能喜欢
Spring源码分析86页免费
Spring源码分析之IoC容器篇62页免费
Spring源码分析_Spring IOC9页免费
Spring_Security源码分析74页1财富值
Spring 源码分析:ApplicationCo...4页2财富值
更多与“Spring源码分析”相关的文档>>
Struts2教程22页免费
Struts2教程_旺旺老师34页免费
Struts2教程0126页免费
Struts2教程0219页免费
Struts2教程0624页1财富值
更多与“Struts2教程”相关的文档>>
Struts2、Spring和Hibernate应...41页免费
Struts+Spring+Hibernate整合...16页免费
简单易学_Struts_Spring__Hiber...101页免费
Struts+Spring+Hibernate整合...16页免费
Struts2,Spring与Hibernate整...15页免费
更多与“Struts Spring Hibernate”相关的文档>>
马士兵hibernate学习笔记(原版)-你信不信...31页免费
马士兵Struts2学习笔记201133页免费
马士兵Spring学习笔记201117页免费
马士兵struts2学习笔记(详细版)14页免费
'Struts2 学习笔记'-马士兵41页免费
更多与“马士兵 学习笔记”相关的文档>>
Spring教程22页免费
Spring基础教程41页免费
Spring初学者入门教程48页1财富值
Spring笔记,教程,教案11页免费
Spring深入浅出教程33页免费
更多与“Spring教程”相关的文档>>
多图详解Spring框架的设计理念与设计模式34页2财富值
多图详解Spring框架的设计理念与设计模式38页免费
Spring框架详解38页5财富值
多图详解Spring框架的设计理念与设计模式(3)暂无评价3页2财富值
详解Spring框架的设计理念与设计模式暂无评价34页免费
更多与“Spring框架详解”相关的文档>>
1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,。青玉案元夕东风夜放花千树更吹落星如雨宝马雕车香满路凤箫声动玉壶光转一夜鱼龙舞蛾儿雪柳黄金缕笑语盈盈暗香去众里寻他千百度暮然回首那人却在灯火阑珊处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值