J2EE应用(4)

繁简对译:[]  字体设置:[] 2010-05-11  作者:孙鑫  阅读  次

 天津清华IT教师推荐文章:

Hello World程序

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

Step1:新建Web项目

在MyEclipse开发环境中,单击菜单【File】→【New】→【Web 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目录下,WebRoot是Web应用程序的根目录,其下的目录结构是按照Java Web应用程序所要求的目录层次结构建立的。

Step2:导入Struts 2类库

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

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

   

   

struts2-core-2.0.11.jar

Struts 2框架的核心类库

xwork-2.0.4.jar

XWork类库,Struts 2在其上构建

ognl-2.6.11.jar

对象图导航语言(Object Graph Navigation 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的资源管理器中复制这5个JAR包,然后转到MyEclipse开发环境中的ch02项目,在WebRoot\WEB-INF\lib目录上单击鼠标右键,选择【Paste】,或者选中WebRoot\WEB-INF\lib目录,然后同时按下键盘上的“Ctrl+V”组合键,将这5个JAR包复制到项目中,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模式开发的,它提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的Servlet过滤器来充当的。

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

编辑WebRoot\WEB-INF\web.xml文件,添加FilterDispatcher过滤器的配置,web.xml的完整代码如例2-1所示。

例2-1  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<!-- 这是MyEclipse生成的Web项目自带的配置,可删除 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
 <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

粗体显示的代码是我们添加的内容。

要了解web.xml文件所有配置元素的含义,可参看笔者所著的《Java Web开发详解》附录D。

Step4:编写Action类

一个action就是一段只有特定的URL被请求时才会执行的代码。FilterDispatcher根据请求URL的不同,来执行对应的action。在Struts 2中,action执行的结果(成功或者失败)通常都对应着一个要呈现给用户的result,这个result可以是HTML页面,也可以是一个PDF文件,或者Excel电子表格。所有的result都是通过字符串名字来标识的,FilterDispatcher根据action返回的结果字符串来选择对应的result显示给用户。action与其对应的result是在一个名为struts.xml的配置文件中进行配置的,参见Step6。

在Struts 2中,可以用一个普通的Java类作为Action类,只要这个类提供如下的方法实现即可:

public String execute();

不过,通常情况下,我们所写的action类会选择实现com.opensymphony.xwork2.Action接口,在这个接口中除了定义了上述的execute()方法外,还定义了5个字符串类型的静态常量,如下:

public interface Action {
//action执行成功,要向用户显示成功页面,返回SUCCESS常量
public static final String SUCCESS = "success";
 //action执行成功,但不需要向用户显示结果页面,使用NONE常量
public static final String NONE = "none";
 //action执行失败,要向用户显示失败页面,返回ERROR常量
public static final String ERROR = "error";

//action的执行需要用户输入更多信息,要向用户显示输入页面,返回INPUT常量
public static final String INPUT = "input";

//由于用户没有登录,action不能执行,要向用户显示登录页面,返回LOGIN常量
public static final String LOGIN = "login";
}

Strtus 2中,所有的action必须返回一个字符串类型的结果代码,以标识要呈现给用户的result。

Action接口中定义的常量字符串,从语义上为你定义好了在action执行的不同情况下应该向用户呈现的result的名字,当然你可以为result取其他的名字,不过这种行为是不建议的,除非上述定义的字符串常量不能满足你的应用需求。

下面我们编写一个Action类HelloAction,实现com.opensymphony.xwork2.Action接口。

在项目的src目录上单击鼠标右键,从弹出菜单中选择【New】→【Package】,输入包名:org.sunxin.struts2.ch02.action。在org.sunxin.struts2.ch02.action包上单击鼠标右键,从弹出菜单中选择【New】→【Class】,出现如图2-14所示的窗口。

 
(点击查看大图)图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;
}
}

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

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

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

打印 收藏 关闭