精通Struts技术第一章
第一章:
Jakarta Struts
项目的介绍和它的支持组件
我们所有的章节的Web服务器都是基于Jakarta Tomcat容器。在本章结束的时候,通过运行你建立的Struts应用程序,你可以对Struts的框架机制有个大致的了解
The Jakarta Struts 项目
The Jakarta Struts
项目是由
Apache Software Foundation
发起的开源项目,它在
java
服务器端实现了
MVC
(
Model-View-Controller
)设计模式。
The Jakarta Struts
项目最初是由
Craig McClanahan
在
2000
年五月创建的,但后来被开源组织所接收。
The Jakarta Struts
作为一个开源框架的主要意图是为了在创建
WEB
应用时能比较容易的分离表示层和业务数据层。自从它诞生以来收到大量开发人员的支持,并很快的成为开源社区中一个重要的成员。
理解 MVC 设计模式
为了更深刻的理解
Struts
框架,你必须先理解
MVC
设计模式,
Struts
技术的就是基于
MVC
设计模式的。
MVC
设计模式起源于
Smalltalk
语言,它由以下三个部分组成:模型(
model
)
,
视图(
view
),控制器(
Controller
)
.
表
1.1
定义了这些组件。
组件
|
描述
|
模型(
model
)
|
封装数据对象。模型用来封装和显示数据对象。
|
视图(
view
)
|
作为模型的显示,它表示数据对象的当前状态
|
控制器(
Controller
)
|
定义对用户的输入执行相应操作的接口,它用来操作模型(
model
)和数据对象
|
使用
MVC
的好处包括如下:
可靠性:
表示层和业务层别分离,这样就允许你更改你的表示层代码而不用重新编译你的模型(
model
)和控制器(
Controller
)代码
高重用和可适应性
: MVC
模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何
WEB
(
HTTP
)浏览器或则无线浏览器
(WAP)
。
较低的生命周期成本:
MVC
使降低开发和维护用户接口的技术含量成为可能。
快速的部署
:开发时间会得到相当大的缩减,它使程序员(
java
开发人员)集中精力于业务逻辑,界面程序员(
HTML
和
JSP
开发人员)集中精力于表现形式上。
可维护性
:
分离表示层和业务逻辑层也使得基于
Struts
的
Web
应用更易于维护和修改。
The Struts
架构图
在这章节,我们简要的画出一幅和
MVC
模式对应的
STRUTS
框架图
1.1
:
图1.1是Struts框架下应用程序请求流通过的路径。这个处理过程由5个基本的步骤组成。
下面是
处理步骤的描述。
1.
由显示视图产生一个请求。
2.
请求被
ActionServlet
(控制器)接收,它在
struts-config.xml
文件中寻找请求的
URI
,找到对应的
Action
类后,
Action
类执行相应的业务逻辑。
3.
Action类执行建立在模型组件基础上的业务逻辑,模型组件是和应用程序关联的。
4.
一旦Action类处理完业务逻辑,它把控制权返回给
ActionServlet
。,
Action
类提供一个键值作为返回的一部分,它指明了处理的结果。
ActionServlet
使用这个键值来决定在什么视图中显示
Action
的类处理结果。
5.
当
ActionServlet
把
Action
类的处理结果传送到指定的视图中,请求的过程也就完成了。
模型(
The Model
)
Struts
框架没有提供特定的模型组件,因此我们不会整章介绍模型组件,但我们会把它使用到我们的例子中去。
视图(
The View
)
Struts
框架中
视图组件对应于一个简单的
JSP
文件,这个
JSP
文件包含了
Struts
定义的标签,下面的代码片段是一个简单的
Struts
视图:
<%@page language="java">
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" >
<html:form action="loginAction.do"
name="loginForm"
type="com.wiley.loginForm" >
User Id: <html:text property="username"><br/>
Password: <html:password property="password"><br/>
<html:submit />
</html:form>
如你看到的那样,几个
JSP
的标签是
JSP
文件中的重点。这些标签在
Struts
框架中定义,它使
struts
应用项目和控制器之间实现松耦合。在第三章我们会建立一个真正可运行的
struts
视图,第五章中会对视图进行更详细的介绍。
控制器(
The Controller
)
控制器是
Struts
框架中的中枢,它由
org.apache.struts.action.ActionServlet
这个
servlet
来贯彻和执行的。这个
org.apache.struts.action.ActionServlet
接收所有客户端的请求,并把请求委派到指定的
Action
类
(
用户扩展自
org.apache.struts.action)
。
ActionServlet
委派请求是基于客户端传入的
URI
。一旦
Action
类完成处理,
ActionServlet
根据
Action
返回的键值来决定在什么视图中显示
Action
的类处理结果。
ActionServlet
类似于一个创建
Action
对象的工厂,由
Action
对象去执行应用中实际的业务逻辑。控制器是
Struts
框架中最重要的部分。我们会在第三章和第四章对控制器进行更详细的探讨。
Web 应用 ( WebApplications )
所有的Web应用被包含在一个目录结构中,首先你要在Web服务器下建立如下目录:
目录
|
内容
|
wileyapp
|
这是 Web应用的根目录,所有的JSP和HTML文件都在这个目录下。
|
/wileyapp/WEB-INF
|
这个目录包含了所有除根目录外需要的资源,
包括
WEB
应用部署信息。注意:
WEB-INF
目录下的不是公共文件,无法直接服务于客户端。
|
/ wileyapp/WEB-INF/classes
|
存放了所有的
servlet
类或实用类。
|
/ wileyapp/WEB-INF/lib
|
包含所有
WEB
应用中要用到的后缀为
JAR
的包文件
|
图1.2
如果你实用的是
Tomcat
服务器,你的缺省根目录为
<CATALINA_HOME >/webapps/
,在
<CATALINA_HOME >/webapps/
下建立
图1.2所示目录
注意:WEB服务器允许你编译你的类并存放到
/WEB-INF/classes
或
/WEB-INF/lib
下,但
/WEB-INF/classes
的类将被优先载入,即若你编译的类在两个目录下都存在,起作用的只有
/WEB-INF/classes
目录下的类。
Web
应用的部署描述
Web应用的核心是部署描述。部署描述存放在
/<SERVER_ROOT >/applicationname /WEB-INF/
下的
web.xml
文件中,它描述了所有
Web应用要使用的组件。如果你使用图1.2的目录结构,那么你的部署描述位于
/<SERVER_ROOT >/wileyapp /WEB-INF/web.xml
文件中。
部署描述中包括如下元素:
·
ServletContext init parameters
·
Localized content
·
Session configuration
·
Servlet/JSP definitions
·
Servlet/JSP mappings
·
Tag library references
·
MIME type mappings
·
Welcome file list
·
Error pages
·
Security information
下面的代码片段是部署描述的一个例子,它定义了一个简单的
servlet
。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.wiley.SimpleServlet</servlet-class>
</servlet>
</web-app>
打包 Web 应用
标准的
Web应用都被打包成后缀为war的文件,你可以使用
Java
打包命令来创建
WAR
文件:
jar cvf wileyapp.war
现在你就可以用
wileyapp.war
文件
发布你WEB应用了。
Tomcat 容器
Tomcat
是是基于
JAVA
的开源
WEB
应用服务器,我们的例子都以
Tomcat
为
WEB
应用服务器。在开始我们的学习前你需要下载
Tomcat4
地址:
http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.6/src/jakarta-tomcat-4.0.6-src.zip
JDK1.4
地址:
http://java.sun.com/webapps/download/Redirect/68949517/5847479377282807053505607246086069333228071972022813600060132859339008063305596058473206-3865/j2sdk-1_4_1_02-s1studio_ce-4u1-bin-windows.exe
操作系统为
Win2000
2
.在系统变量中设置
JAVA_HOME
= root
3
.
在系统变量中
设置
CATALINA_HOME
>
= root
4
.在
系统变量中
设置
CLASSPATH= root/lib/dt.jar
;
jar;root/lib/tools.jar
;
root/jre/rt.jar;
6.
在
系统变量中
PATH
下添加
root\bin
;
注意:
root
为你的安装目录
启动<CATALINA_HOME >\bin\startup.bat,在浏览器中输入 http://localhost:8080 ,
你若是能看到缺省的
Tomcat
主页面,表明你的配置成功了。如果未成功请查看你的
JDK
是否已经安装,或者
JDK
路径是否设置正确。
下一章将大致讲述
JSP
和
servlets
,若你对于这方面的技术已经了解,你可以跳过下一章节。
更多资料请访问http://www.universetech.net
精通struts技术第二章
<jsp:include>
用于在JSP中包含静态或动态的WEB组件。语法如下:
<jsp:include page="urlSpec" flush="true">
<jsp:param ... />
</jsp:include>
表2.9描述了<jsp:include>的属性:
属性
|
说明
|
page
|
要包含的资源的地址,基于URL
|
flush
|
指明是否缓冲。
|
通过一个例子来对include进行说明:
列表 2.13 include.jsp.
----------------------------------------------------------------
<html>
<head>
<title>Include Example</title>
</head>
<body>
<table width="100%" cellspacing="0">
<tr>
<td align="left">
<jsp:include page="header.jsp" flush="true">
<jsp:param name="user"
value=’<%= request.getParameter("user") %>’ />
</jsp:include>
</td>
</tr>
</table>
</body>
</html>
------------------------------------------------------------
include.jsp文件包含了一个简单的JSP文件header.jsp,文件显示如下:
列表 2.14. header.jsp.
------------------------------------------
<%
out.println("<b>Welcome: </b>" +
request.getParameter("user"));
%>
------------------------------------
header.jsp寻找名称为user的参数并输出“welcome……”字符串。复制JSP文件到:
<CATALINA_HOME >/webapps/wileyapp/ 目录,在浏览器中输入地址.:
http://localhost:8080/wileyapp/include.jsp?user=Bob
<jsp:forward>
在当前的WEB应用中告诉JSP引擎重定向当前请求到另外可用的资源上,包括静态资源,servlets,JSP等。<jsp:forward>能有效的终止当前执行的JSP。
注意:<jsp:forward>能包含<jsp:param>子属性,这个子属性作为从定向的目标资源。
语法如下:
<jsp:forward page="relativeURL">
<jsp:param .../>
</jsp:forward>
表2.10对<jsp:forward>的属性进行描述:
属性
|
说明
|
page
|
重定向的目标
|
列表:2.15使用<jsp:forward>的例子:检验请求参数并且重定向请求到包含对应参数的JSP页面。
列表2.15 forward.jsp.
-----------------------------------------------------------------
<html>
<head>
<title>JSP Forward Example</title>
</head>
<body>
<%
if ( (request.getParameter("role")).equals("manager") ) {
%>
<jsp:forward page="management.jsp" />
<%
}
else {
%>
<jsp:forward page="welcome.jsp">
<jsp:param name="user"
value=’<%=request.getParameter("user") %>’ />
</jsp:forward>
<%
}
%>
</body>
</html>
-------------------------------------------
forward.jsp简单的检验请求参数的角色类型,然后重定向请求到相应的页面。
目标资源文件之一:welcome.jsp.
------------------------------------------------
<html>
<!-- Set the scripting language to java -->
<%@ page language="java" %>
<HTML>
<HEAD>
<TITLE>Welcome Home</TITLE>
</HEAD>
<BODY>
<table>
<tr>
<td>
Welcome User: <%= request.getParameter("user") %>
</td>
</tr>
</table>
</body>
</HTML>
----------------------------------------------------------
目标资源文件之二:management.jsp
------------------------------------------------------
<html>
<!-- Set the scripting language to java -->
<%@ page language="java" %>
<HTML>
<HEAD>
<TITLE>Management Console</TITLE>
</HEAD>
<BODY>
<table>
<tr>
<td>
Welcome Manager: <%= request.getParameter("user") %>
</td>
</tr>
</table>
</BODY>
</HTML>
复制三个JSP文件到 <CATALINA_HOME >/webapps/ wileyapp/目录下,在浏览器中输入:
你可以通过修改输入的角色来重定向到不同的页面。
<jsp:plugin>
导致下载指定的applet和JavaBeans组件,并同步执行业务。
.<jsp:plugin>语法如下:
<jsp:plugin type="pluginType"
code="classFile"
codebase="relativeURLpath">
<jsp:params>
</jsp:params>
</jsp:plugin>
表2.11说明了 <jsp:plugin>的属性:
属性
|
说明
|
type
|
说明plug-in包含的类型(比如applet)
|
code
|
被plug-in执行的类名称
|
Codebase
|
寻找代码的绝对或相对路径
|
小结:
在这一章我们讲述了Struts技术的两个基础:servlet和JSP。我们试验了它们的结构和组件。了解了JSP和servlet 技术是如何在WEB应用中被装配使用的。下一章,我们将真正开始讲述Strutst技术。
第三章:开始学习Struts
在这一章,我们将开始学习Struts。在开始之前,我们必须先安装和配置Struts应用。我们将创建一个简单的应用来显示Struts是如何工作的。
这一章我们将提供一个Struts应用来让你快速入门。
获取和安装 Jakarta Struts项目
在开始你的Struts开发前,我们需要获取最新版本的Struts包。目前struts包为1.1
.地址如下:http://cvs.apache.org/builds/jakarta-struts/nightly/jakarta-struts-20031010.zip
一旦你获取了版本后,你在部署Struts应用前需要完成下面的预备工作。
1. 创建一个应用目录<CATALINA_HOME >/webapps/wileystruts
2. 复制struts的JAR文件到<CATALINA_HOME >/webapps/wileystruts/WEB-INF/lib目录下,jar文件列表如下:
struts.jar ¨
commons-beanutils.jar ¨
commons-collections.jar ¨
commons-dbcp.jar ¨
commons-digester.jar ¨
commons-logging.jar ¨
commons-pool.jar ¨
commons-services.jar ¨
commons-validator.jar ¨
3.在<CATALINA_HOME >/webapps/wileystruts/WEB-INF/下创建web.xml,在文件中添加如下代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
</web-app>
4.创建一个strut-config.xml文件,复制到
<CATALINA_HOME >/webapps/wileystruts/WEB-INF/ 目录下。
struts-config.xml是Struts应用的部署描述文件。它用来把MVC组件组合在一起。
它通常被放置在
<CATALINA_HOME >/webapps/ webappname /WEB-INF/目录下,我们将会频繁的使用到它。空的struts-config.xml如下:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-