Struts2 教程 :为Hello World程序编写JSP文件,Java文件和配置文件

2009-11-26 20:03:02 已被阅读: 发表评论

本章中我们将会创建Struts 2 Hello World程序所需的JSP文件,Java文件和必要的配置文件.现在Struts2使用struts.xml来配置程序.

认识程序

我们的程序是很简单的,只显示Hello World信息以及服务器的日期和时间.当用户点击教程主页“Run Struts 2 Hello World Application”的链接的时候,一个请求被发送到了Struts2框架,之后Struts2将输入信息发送给了Action类(在我们的例子中是Struts2HelloWorld.java). Action执行之后,结果通过资源“/pages/HelloWorld.jsp”来呈递响应.

在这个例子中,我们得配置三部分视图,Action类和映射(struts.xml)来连接Action和页面.通过创建这三个组件,我们将程序分成了三部分:视图,模型,控制器.

创建视图 : 下面的代码用来将结果显示在浏览器中. HelloWorld.jsp在我们的程序中属于视图部分.在Struts2tutorial\pages目录中创建HelloWorld.jsp并添加如下内容 :

Html代码
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts 2 Hello World Application!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
<p>Current date and time is: <b><s:property value="currentTime" /></b>
</body>
</html>

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts 2 Hello World Application!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
<p>Current date and time is: <b><s:property value="currentTime" /></b>
</body>
</html><%@ taglib prefix="s" uri="/struts-tags" %>这行声明了struts2的数据标签库。Struts2的数据标签是用来显示动态数据的。<s:property value="message" />和<s:property value="currentTime" />各自调用了Struts2HelloWorld Action类的getMessage()方法和getCurrentTime()方法,并且同响应合并了数值。

创建Action(与Model互相配合)

现在创建Struts2HelloWorld.java并将其存放在"struts2tutorial\WEB-INF\src\java\net\roseindia"。这就是Struts2HelloWorld.java的代码

Java代码
package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;

public class Struts2HelloWorld extends ActionSupport {

public static final String MESSAGE = "Struts 2 Hello World Tutorial!";

public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}

private String message;

public void setMessage(String message){
this.message = message;
}

public String getMessage() {
return message;
}

public String getCurrentTime(){
return new Date().toString();
}
}

package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;

public class Struts2HelloWorld extends ActionSupport {

public static final String MESSAGE = "Struts 2 Hello World Tutorial!";

public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}

private String message;

public void setMessage(String message){
this.message = message;
}

public String getMessage() {
return message;
}

public String getCurrentTime(){
return new Date().toString();
}
}创建Controller配置文件

Struts2使用struts.xml来配置程序,在"struts2tutorial\WEB-INF\src"创建一个struts.xml并添加如下内容 :


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>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="roseindia" namespace="/roseindia" extends="struts-default">

<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>

<!-- Add actions here -->
</package>

<!-- Add packages here -->

</struts>

<?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>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="roseindia" namespace="/roseindia" extends="struts-default">

<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>

<!-- Add actions here -->
</package>

<!-- Add packages here -->

</struts>
Xml代码

struts.xml应该存放在程序的类路径中,你既可以把它放在一个jar文件中然后将其放在程序的lib目录中,又可以把它放置在web程序的类路径中.在我们的程序中,我们使用了ant构建工具将其放在了jar文件中.

构建程序 : 我假设你已经在你的电脑上安装了ant构建工具.由于我们使用了ant构建工具,构建程序变得非常简单.打开命令提示符,进入我们项目的Struts2tutorial\WEB-INF\src目录,键入ant来构建我们的程序.ant构建工具会编译java文件并在web程序的lib目录中创建一个Struts2tutorial.jar文件.这是ant构建工具的输出信息 :

>ant
Buildfile: build.xml

clean:
[delete] Deleting directory C:\apache-tomcat-6.0.10\apache-tomcat-6.0.10\webapps\Struts2tutorial\WEB-INF\classes
[mkdir] Created dir: C:\apache-tomcat-6.0.10\apache-tomcat-6.0.10\webapps\Struts2tutorial\WEB-INF\classes

prepare:

resources:

compile:
[javac] Compiling 1 source file to

C:\apache-tomcat-6.0.10\apache-tomcat-6.0.10\webapps\Struts2tutorial\WEB-INF\src\classes
[jar] Building jar:

C:\apache-tomcat-6.0.10\apache-tomcat-6.0.10\webapps\Struts2tutorial\WEB-INF\lib\Struts2tutorial.jar

project:

all:

测试Struts 2 Hello World程序 : 在上面我们已经编译了我们的程序,现在我们终于要对它进行测试了.启动Tomcat,打开http://localhost:8080/Struts2tutorial/然后在列表中选择"Run Struts 2 Hello World Application"来对我们的程序进行测试.

下面是我们程序主页的截图 :

点击Run Struts 2 Hello World Application 链接,我们的第一个程序"Struts 2 Hello World"应该看上去像下面这样 :

程序会显示信息"Struts 2 Hello World Tutorial!"以及服务器的日期与时间.

程序是如何工作的 ?

下面是一个Struts 2 Hello World程序如何工作的一个简单描述 :

你的浏览器通过URL(http://localhost:8080/tutorial/HelloWorld.action)向服务器发送请求

1.当你点击"Run Struts 2 Hello World Application"链接,浏览器通过URL(http://localhost:8080/Struts2tutorial/roseindia/HelloWorld.action.)发送请求.容器发送HelloWorld.action请求. struts blank程序的默认web.xml文件设置了所有发往*.action的请求都由org.apache.Struts2.dispatcher.FilterDispatcher来处理.这就是web.xml的配置 :

Xml代码
<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>

<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>

2.框架查找action "HelloWorld"的映射,之后生成了对应的类的实例并调用了execute()方法.这里Action类是Struts2HelloWorld.下面的struts.xml定义了action的映射 :

Xml代码
<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>

<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>3.之后execute方法对message进行了设置并返回了SUCCESS

Java代码
public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}

public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}下载程序和源代码 : 你可以下载教程的程序和源代码来节省你的时间并尽量去花时间在你的程序配置上.点击下载代码

我们的目标是提供基于ant构建工具的程序的框架.所以你可以下载程序并用ant工具来编译java文件.程序放在了分解的目录结构中并且可以配载在Tomcat服务器中.如有任何发现或问题请与我们联系,我们希望你能与我们分享你的经验.


作者: 饕尽天下