当前位置: 首页 > 图文教程 > Java技术 > Java Web开发 > 孙鑫老师原创:Struts 2初体验

Java Web开发
孙鑫老师原创:XML Schema初窥(二)
Java开源技术:J2EE应用服务器
用java开发Email工具之发送邮件
Java数据库程序中的存储过程设计
JAVA IO 设计模式彻底分析
Java Web开发:Java模式设计之单例模式(一)
Java Web开发:Java模式设计之单例模式(二)
Java Web开发:基于JVM的语言正在开始流行
Java Web开发:Java语言的十大问题,你能解决吗?
Java Web开发:Struts2 中.action和.do的奥秘
Java web:孙鑫老师谈Servlet的线程模型
java Web开发:孙鑫老师谈Session和Cookie的深入研究
Java Web开发:在线人数统计程序
Java Web开发:小编概述JSP技术
Java Web开发:FreeMarker模板使用方法讲解
Java Web开发:Tomcat和IIS的配合
Java Web开发:小编谈JFreeChart统计柱形图表事例
Java Web开发:程序员之家七月份Java Web开发总结
Java Web开发:Tomcat和Apache的配合
Java Web开发:iBATIS延迟加载的那点事

Java Web开发 中的 孙鑫老师原创:Struts 2初体验


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 162 ::
收藏到网摘: n/a

2.1   下载和安装Struts 2
 

要使用Struts 2,首先要从Apache Software Foundation的网站上下载Struts 2的开发包。Struts 2的下载地址如下:


 

http://struts.apache.org/download.cgi


 

在写作本书时,Struts 2的最新发行版本是2.0.11,该版本号称是“最佳可用”版本,本书使用的就是该版本。


 

下载Struts 2时,你会发现有很多可供下载的压缩包,每个压缩包的作用如下:


 

Ø  Full Distribution


 

这是Struts 2的完整版本,包含了示例应用程序、文档以及Struts 2的源代码。笔者下载的就是该选项下的压缩包,建议读者也下载这个压缩包。


 

Ø  Example Applications


 

Struts 2的示例应用程序,通过Struts 2文档和该示例程序的学习,是快速掌握Struts 2的一条捷径,不过Struts 2提供的某些示例程序有一些问题,读者在学习时要注意甄别。这个选项下的压缩包的内容已经包含在Struts 2的完整版中。


 

Ø  Blank Application only


 

一个空的示例程序,给出了Struts 2程序的基本结构,读者可以在这个示例程序的基础上进行应用的开发。这个示例程序已经包含在“Example Applications”中。


 

Ø  Essential Dependencies Only


 

该选项下的压缩包中只提供了Struts 2的核心类库以及它所依赖的类库。该压缩包的内容已经包含在Struts 2的完整版中。


 

Ø  Documentation


 

Struts 2的相关文档,包含了指南、向导,以及Struts 2API文档。该压缩包的内容已经包含在Struts 2的完整版中。


 

Ø  Source


 

Struts 2的源代码,通过研读Struts 2的源代码,可以更好地理解Struts 2的结构和运行机制。该压缩包的内容已经包含在Struts 2的完整版中。


 

Ø  Alternative Java 4 JARs


 

可选的JDK 1.4支持JAR包。该压缩包的内容已经包含在Struts 2的完整版中。


 

下载Struts 2的完整版后,对其解压缩,可以看到Struts 2的目录下有5个子目录,分别为:appsdocsj4libsrc,其中的内容分别对应了Struts 2 下载中的5个下载选项:Example ApplicationsDocumentationAlternative Java 4 JARsEssential Dependencies OnlySource。前面已经介绍了这5个子目录中的内容,此处就不再赘述了。


 

2.2   使用Subversion来获取Struts 2的源代码


 

Struts 2的开发团队使用Subversion作为Struts 2项目的版本控制系统,在Struts 2的网站上也允许开发者从Subversion服务器中检出(Check OutStruts 2的最新源代码。如果读者想要深入研究Struts 2框架,时刻跟踪Struts 2的最新变化,那么可以利用Subversion来获取Struts 2的最新源代码。


 

我们可以在MyEclipse中检出Struts 2的最新源代码,作为工作空间中的一个项目,一方面便于我们研究Struts 2的源代码;另一方面便于我们在调试Web应用程序时[1],可以跟踪进入到Struts 2的源代码,以便更好地定位错误发生时的代码位置,找出错误的原因。


 


Struts 2的完整下载版中包含了发行版的源代码,这个代码是稳定的,读者也可以将这个代码导入到Eclipse的项目中来学习和研究。


 


 

要在MyEclipse中访问远程Subversion服务器以获取Struts 2的源代码,你需要按照下面的步骤进行操作。


 


 

 安装Subclipse插件。


 

参看1.3节。


 

 单击【WindowOpen PerspectiveOther…】,如图2-1所示。


 

 在“Open Perspective”窗口中,选择“SVN资源库研究”,单击“OK”按钮,如图2-2所示。


 

 MyEclipse开发环境左边的“SVN资源库”视图中,单击鼠标右键,选择【新建】【资源库位置】,如图2-3所示。


 

                      


 

2-2  打开透视图窗口                        2-3  新建资源库位置


 

 在“添加SVN资源库”窗口中,输入URLhttp://svn.apache.org/repos/asf/struts/struts2 /trunk,单击“Finish”按钮,如图2-4所示。


 

 在“SVN资源库”视图中,在Struts 2的资源库URL上单击鼠标右键,选择【检出为】,如图2-5所示。


 

         


 

2-4  输入资源库的URL           2-5  Struts 2的资源库中检出Struts 2项目


 

 在“从SVN检出”窗口中,选中“做为工作空间中的项目检出”单选按钮,为项目取一个名称,例如“Struts 2,单击“Finish”按钮,如图2-6所示。


 


 


 

2-6  Struts 2源代码作为工作空间中的项目检出


 

 MyEclipse开发环境的右上角单击“MyEclipse Java Enterprise Perspective”按钮,打开MyEclipse自带的这个透视图,如图2-7所示。或者单击菜单【WindowOpen PerspectiveOther…】,选择“MyEclipse Java Enterprise”透视图打开。


 

 MyEclipse开发环境左边的“Package Explorer”视图中,依次展开“struts2coresrcmainjava”,如图2-8所示。


 

         
 

2-7  打开“MyEclipse Java Enterprise Perspective”透视图             2-8  Eclipse的包视图


 

java目录中代码就是Struts 2的核心源代码,org是源代码的顶级包名。plugins目录下是Struts 2自带的各种插件的源代码。


 

至此,Struts 2的最新源代码我们就获取完毕了。不过要注意的是,Struts 2WebWork 2一样,都是构建在XWork框架基础之上的,而XWork仍然是由opensymphony组织负责开发和维护的,所以你要想完整地学习和研究Struts 2,还需要获取XWork的源代码。在Struts 2的完整下载版中,只包含了Struts 2的源代码和XWork的类库,没有包含XWork的源代码。


 

XWork的下载地址是:http://www.opensymphony.com/xwork/download.action,如果你下载它的完整版本,其中就包含了XWork的源代码。Struts 2.0.11使用的XWork本是2.0.4


 

你也可以按照前述的方式,从Subversion中获取XWork的最新源代码,并将其作为Eclipse工作空间中的一个项目,XWork源代码的Subversion URL为:http://svn.opensymphony. com/svn/xwork/trunk


 






[1] MyEclipse提供了调试Web应用程序的功能,可以在代码中设置断点,当在调试状态下运行时,程序会自动在断点处暂停,以便于你跟踪程序的运行。


 

 


 

 


 

                                

 

HelloWorldAction类中,我们定义了一个字符串类型的message实例变量,并给出了一个JavaBean风格的getter方法getMessage(),用于获取message字段的内容。在execute()方法中,我们构造了一个问候语“Hello World!”,保存到message字段中,最后返回SUCCESS静态常量(在Action接口中定义),说明action已经成功执行。


 


Action返回的结果代码不一定非要对应一个要执行的result,例如,Action.NONE结果代码就没有对应任何的result


 


 

Action已经创建完毕,接下来我们编写一个JSP页面,向用户显示问候信息。


 

Step5:编写结果页面


 

在项目的WebRoot目录上单击鼠标右键,从弹出菜单中选择【NewFile】,输入文件名HelloWorld.jsp后,单击“Finish”按钮。


 

HelloWorld.jsp的代码如例2-3所示。


 

2-3  HelloWorld.jsp


 


<%@ page contentType="text/html;charset=GBK" %>


 


 

<%@ taglib prefix="s" uri="/struts-tags" %>


 

<html>


 

    <head><title>欢迎页面</title></head>


 

    <body>


 

        <h2><s:property value="message" /></h2>


 

    </body>


 


</html>


 


 

注意代码中以粗体显示的部分。与Struts 1相同,Struts 2框架也提供了一套标签库。在使用Struts 2标签时,通常为标签库指定前缀“s”。属性uri的值“/struts-tags”是固定的,书写时不要忘了前导的斜杠“/”。


 

Struts 2property标签带有一个value属性,在这里,我们给它的值是“message”。还记得HelloWorldAction中的getMessage()方法吗,此处的property标签将获取到getMessage()方法调用后的返回值,即“Hello World!”,这个问候语将作为2级标题向用户显示。要理解property标签的工作机制,请参看8.3.1.1节。


 

如果读者想要深入地了解自定义标签,可以参看笔者所著的《Java Web开发详解》第15章。


 

Step6:在struts.xml文件中配置action


 

一个action创建完成后,还需要为其配置一个URL,只有这样,FilterDispatcher才知道哪一个URL对应着哪一个action,当截获到访问该URL的请求时,FilterDispatcher就调用对应的action对请求进行处理。


 

除了为action配置一个URL外,还需要为action关联一个或多个结果页面,当action执行完毕后返回一个结果代码(一个字符串值,例如“success”),这个结果代码对应的页面就会被呈现给用户。


 

要对action进行配置,需要创建struts.xml文件。struts.xmlStruts 2框架的核心配置文件,默认的路径是WEB-INF/classes/struts.xml


 

MyEclipse开发环境中,我们只需在项目的src目录(源文件目录)下创建struts.xml文件即可,在src目录下的所有子目录和非Java源文件都会被自动复制到WebRoot/WEB- INF/classes目录(这是MyEclipse Web项目的默认输出目录)下。


 

src目录上单击鼠标右键,从弹出菜单中选择【NewFile】,输入文件名struts.xml后,单击“Finish”按钮。


 

struts.xml的完整代码如例2-4所示。


 

2-4  struts.xml


 


<?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="default" extends="struts-default">   


 

        <action name="HelloWorld" class="org.sunxin.struts2.ch02.action. HelloWorldAction"> 


 

            <result name="success">/HelloWorld.jsp</result>      


 

        </action>       


 

    </package>


 


</struts>


 


 

① 这是struts.xml配置文件的文档类型声明,注意不要写错了。


 

package元素将多个action元素组织为一个逻辑单元,从而简化了维护工作,提高了可重用性。name属性指定包的名字,可选的extends属性指定要扩展的包。Struts 2中的package可以扩展另外的package,从而“继承”原有包的定义。struts-default包的定义在struts-default.xml文件中,该文件已经包含在Struts 2的核心JAR包中了(针对本书,即struts2-core-2.0.11.jar)。


 

action元素用于对action进行配置。name属性为action指定一个名字,这个名字即用户访问的URLclass属性指定action的完整类名。任何对“/HelloWorld.action”的请求都会调用HelloWorldAction类。读者要注意的是:在为action取名时,一是不要在名字前面添加斜杠(/);二是不要在名字后面添加“.action”后缀名。


 

result子元素用于建立actionresult之间的关联,name属性指定result映射的名字,值“success”和HelloWorldActionexecute()方法返回的静态常量SUCCESS(值为“success”)是一致的。要注意的是,如果result的名字是“success”,那么可以省略name属性,即④处的代码等价于


 

<result>/HelloWorld.jsp</result>


 

 


 

Step7:发布并测试


 

现在是万事俱备,只欠东风了,我们只需将Hello World程序发布到Tomcat服务器中,然后启动服务器,打开浏览器,输入访问actionURL,就可以看到举世闻名的“Hello World!”了。?


 

可以直接在MyEclipse中发布Web应用程序,在MyEclipse开发环境左边的“Package Explorer”视图中选中项目目录ch02,单击工具栏上的“部署”按钮,如图2-16所示。


 


 

 


 

在接下来的“Project Deployments”窗口中,在“Project”下拉列表中选中ch02,单击“Add”按钮,如图2-17所示。


 


 


 

2-17  部署Web项目


 

在“New Deployment”窗口中,在“Server”下拉列表中选择配置好的“Tomcat 6.x”服务器,如图2-18所示。


 


 


 

2-18  部署到Tomcat服务器


 


果读者还没有在MyEclipse中配置Tomcat服务器,那么请参照1.3节进行配置。


 


 

单击“Finish”按钮开始部署ch02 Web程序,部署完毕后,将显示如图2-19所示的窗口。


 


 


 

2-19  部署成功


 

单击“OK”按钮,完成部署。


 

单击工具栏上的“运行服务器”按钮旁边的下拉箭头,选择【Tomcat 6.xStart】,启动Tomcat服务器,如图2-20所示。


 

打开浏览器,在地址栏中输入http://localhost:8080/ch02/HelloWorld.action(如果你的Tomcat监听的端口号不是8080,请自行修改),将看到如图2-21所示的页面。


 

                                         


 

2-20  启动Tomcat服务器                  2-21  举世闻名的“Hello World


 

至此,我们已经完成了一个最简单的基于Struts 2框架的“Hello WorldWeb应用程序,这个程序没有什么实用价值,其目的是为了帮助读者建立起使用Struts 2进行Web开发的感性认识。从下一章开始,我们将逐步深入地来学习使用Struts 2框架进行Web开发。


 

2.4   Struts 2项目开发总结


 

通过上一节“保姆式”的开发讲解,相信读者已经对Struts 2的开发步骤有所掌握了,这一节我们再对整个开发步骤做一个总结。


 

Struts 2的开发步骤主要分为:


 

 准备类库。不同的开发需求所用的类库是不一样的,但至少需要如下的5个类库。


 

  struts2-core-2.0.11.jar


 

  xwork-2.0.4.jar


 

  ognl-2.6.11.jar


 

  freemarker-2.3.8.jar


 

  commons-logging-1.0.4.jar


 

 web.xml文件中配置FilterDispatcher。这一步是固定的,读者可以编写好一个web.xml文件后保存起来,以后都用这个文件。


 

 开发action。针对每一个功能点,编写一个action类。


 

 编写相关的结果页面。针对action返回的结果代码,编写相应的结果页面。


 

 Web应用程序的WEB-INF/classes目录下创建struts.xml,对action进行配置,将action与结果页面关联在一起。


 

2.5   小结


 

本章主要介绍了Struts 2的下载,以及如何使用Subversion来获取Struts 2的最新源代码。作为一个学习者,通过研读框架的源代码来深入理解框架的运行和调用机制,是一种迅速获得提高的好方法。


 

本章还以一个“Hello WorldWeb程序带领读者体验了使用Struts 2框架开发的流程,并讲解了相关注意事项,最后我们还对Struts 2项目的开发做了一个总结。


 


 

 

2.3   Hello World程序

由于“Hello World”程序名扬四海,“程序中人”无人不知,无人不晓,我等写书之人亦不能免俗,首先给出一个使用Struts 2框架开发的“Hello WorldWeb程序。

Step1:新建Web项目

MyEclipse开发环境中,单击菜单【FileNewWeb Project】,如图2-9所示。

2-9  新建Web项目

在“New Web Project”窗口中,输入项目的名称,本例中输入的名称是“ch02”,如图2-10所示。

2-10  输入Web项目的相关信息

单击“Finish”按钮,完成Web项目的创建。Web项目的结构如图2-11所示。

2-11  Web项目的结构

通过MyEclipse的“Web Project”向导创建的Web项目,已经为你搭建好了项目开发的目录结构。src目录下存放Java源文件,源文件编译后会自动输出到WebRoot\WEB-INF\ classes目录下,WebRootWeb应用程序的根目录,其下的目录结构是按照Java Web应用程序所要求的目录层次结构建立的。

Step2:导入Struts 2类库

Struts 2安装目录下的lib子目录中,有很多JAR包,不同的应用需要的JAR包是不同的。表2-1给出了开发Struts 2程序最少需要的JAR包。

2-1  基于Struts 2Web应用程序所需要的最少类库

   

   

struts2-core-2.0.11.jar

Struts 2框架的核心类库

xwork-2.0.4.jar

XWork类库,Struts 2在其上构建

ognl-2.6.11.jar

对象图导航语言(Object Graph Navigation[s1]  Language),Struts 2框架使用的一种表达式语言

freemarker-2.3.8.jar

Struts 2UI标签的模板使用FreeMarker编写

commons-logging-1.0.4.jar

ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4JJDK 1.4+的日志记录。

MyEclipse中导入JAR包是非常简单的,只需要在Windows的资源管理器中复制这5JAR包,然后转到MyEclipse开发环境中的ch02项目,在WebRoot\WEB-INF\lib目录上单击鼠标右键,选择【Paste】,或者选中WebRoot\WEB-INF\lib目录,然后同时按下键盘上的“Ctrl+V”组合键,将这5JAR包复制到项目中,MyEclipse会自动将lib目录下所有的JAR包添加到项目的构建路径中。

如果想要从构建路径中删除某个JAR包,可以在ch02项目上单击鼠标右键,在弹出菜单的底部,选择【Properties】菜单项,出现如图2-12所示的窗口。

在项目属性窗口的左边选中“Java Build Path”,在右边选择“Libraries”标签页,出现如图2-13所示的窗口。

2-12  项目属性窗口

2-13  配置项目所依赖的JAR

在图2-13所示的窗口中,选中要从构建路径中删除的JAR包,单击窗口右边的“Remove”按钮。

从构建路径中删除的JAR包仍然存在于项目中,要从项目中彻底删除JAR包,打开“Package Explorer”视图,在项目的WebRoot\WEB-INF\lib目录下,选中要删除的JAR包,单击鼠标右键,从弹出菜单中选择【Delete】菜单项。

Step3:在web.xml文件中配置FilterDispatcher

Struts 2框架是基于MVC模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcherServlet过滤器来充当的。

你需要在web.xml文件中配置FilterDispatcher过滤器,指定要映射到FilterDispatcherURL样式,匹配这个URL样式的所有请求,都将被Web容器交由FilterDispatcher进行处理。

 

 

2-14  新建Java

 

在“Name:”处输入类名:HelloWorldAction,单击“Add”按钮,在“Choose Interfaces:”文本框中输入Action,选中“com.opensymphony.xwork2包中的Action接口,单击“OK”按钮,如图2-15所示。

 

 

 

2-15  选择要实现的接口

 

目前的MyEclipse版本还没有提供支持Struts 2开发的插件(对Struts 1有支持),在使用Struts 2框架进行开发时,很多工作都需要自己一步一步去完成,没有开发向导可供使用。

 

HelloWorldAction的代码如例2-2所示。

 

 

 

 

 

 

 

 

 

 

 

2-2  HelloWorldAction.java

 

package org.sunxin.struts2.ch02.action;

 

 

 

import com.opensymphony.xwork2.Action;

 

 

 

public class HelloWorldAction implements Action

 

{

 

    private String message;

 

   

 

    public String getMessage()

 

    {

 

        return message;

 

    }

 

 

 

    @Override

 

    public String execute() throws Exception

 

    {

 

        message = "Hello World!";

 

        return SUCCESS;

 

    }

 

}