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
>
<
a
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
>
你可能喜欢
Spring源码分析 | 86页 | 免费 | |
Spring源码分析之IoC容器篇 | 62页 | 免费 | |
Spring源码分析_Spring IOC | 9页 | 免费 | |
Spring_Security源码分析 | 74页 | 1财富值 | |
Spring 源码分析:ApplicationCo... | 4页 | 2财富值 | |
更多与“Spring源码分析”相关的文档>> |
Struts2教程 | 22页 | 免费 | |
Struts2教程_旺旺老师 | 34页 | 免费 | |
Struts2教程01 | 26页 | 免费 | |
Struts2教程02 | 19页 | 免费 | |
Struts2教程06 | 24页 | 1财富值 | |
更多与“Struts2教程”相关的文档>> |
马士兵hibernate学习笔记(原版)-你信不信... | 31页 | 免费 | |
马士兵Struts2学习笔记2011 | 33页 | 免费 | |
马士兵Spring学习笔记2011 | 17页 | 免费 | |
马士兵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框架详解”相关的文档>> |