posts - 297,  comments - 1618,  trackbacks - 0
  说明:本文翻译自struts-2.0.8-all\struts-2.0.8\docs\docs\hello-world.html,并根据笔者在学习过程中的实践增加了部分内容。

 当你提交一个HTML表单到这个框架中的时候,输入并不是被发送到服务页,而是被发送到你提供的Java类,这些类被称为Action。在这些Action执行完后,选择某一个资源来呈现返回结果,这个资源一般是页面,但也可以是PDF文件,或者是Excel文件,亦或是Java applet窗口。

 假设你想要创建一个“Hello World”的例子来呈现欢迎信息,在你准备好开发环境后,为了创建一个“Hello World”的例子,你需要做如下三件事情:

1.       创建一个jsp页面来呈现欢迎信息;

2.       创建一个Action类来创建信息;

3.       在配置文件中配置action和页面的映射关系。

注意:为了创建这个组件,我们将工作流分成几乎无人不晓的三部分:视图、模型和控制器。分离这三部分的原因是当系统变得越来月复杂的时候,我们能够更好的管理。

一.             准备工作

 建立web工程,其中工程名为tutorial,在WebRoot下引入struts2lib下的如下4个包:

 commons-logging-1.1.jar

 freemarker-2.3.8.jar

 ognl-2.6.11.jar

 struts2-core-2.0.8.jar

 xwork-2.0.3.jar

web.xml文件中增加struts2FilterDispatcher,修改后的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">
    
<display-name>tutorial</display-name>
    
<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>

    
<welcome-file-list>
        
<welcome-file>index.html</welcome-file>
    
</welcome-file-list>
</web-app>

二.             代码

 首先,我们需要一个jsp页面来呈现信息,HelloWorld.jsp页面代码如下所示:

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    
<head>
        
<title>Hello World!</title>
    
</head>
    
<body>
        
<h2><s:property value="message" /></h2>
    
</body>
</html>

接着,我们需要一个Action类来创建信息,代码如下:

package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
    
public static final String MESSAGE = "Struts is up and running ";
    
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;
    }

}

第三步,我们需要在配置文件中进行相应配置来将两者联系起来。让我们编辑src下的struts.xml文件,该文件内容如下:

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
    
<package name="tutorial" extends="struts-default">
        
<action name="HelloWorld" class="tutorial.HelloWorld">
            
<result>/HelloWorld.jsp</result>
        
</action>
        
<!-- Add your actions here -->
    
</package>
</struts>

代码已经完成,让我们来尝试运行它。部署该应用程序并打开http://localhost:8080/tutorial/HelloWorld.action,我们可以看到标题栏为:Hello World,并且显示“Struts is up and running!”的页面呈现在我们面前。

三.             代码是如何工作的?

 你的浏览器向Web服务器发送了的http://localhost:8080/tutorial/HelloWorld.action注:tutorial为部署Tomcat中的的项目名称URL请求后,服务器做了如下工作:

1.       容器接收到了Web服务器对资源HelloWorld.action的请求,根据web.xml中的配置,服务器将包含有.action后缀的请求转到org.apache.struts2.dispatcher.FilterDispatcher类进行处理。这个FilterDispatcher是框架的一个进入点;

2.       框架在struts.xml配置文件中找到名为HelloWorldaction对应的类。框架初始化该Action并且执行该Action类的execute方法;

3.       execute方法将信息放入message变量中,并返回成功。框架检查配置以查看当返回成功时对应的页面。框架告诉容器来获得请求返回的结果页面HelloWorld.jsp;

4.       HelloWorld.jsp执行完后,<s:property value="message" />标签调用HelloWorldAction类中的getMessage方法来获得message的值,并将合并了值的页面呈现给用户;

5.       一个纯粹的HTML页面显示在用户的浏览器上。

四.             测试Action

 测试Action很简单,以下是上述HelloWorldAction类的测试类的代码:

package tutorial;
import junit.framework.TestCase;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldTest extends TestCase {
 
public void testHelloWorld() throws Exception {
    HelloWorld hello_world 
= new HelloWorld();
    String result 
= hello_world.execute();
    assertTrue(
"Expected a success result!",
      ActionSupport.SUCCESS.equals(result));
    assertTrue(
"Expected the default message!",
      HelloWorld.MESSAGE.equals(hello_world.getMessage()));
    }

}

五.             需要记住的东西

 本框架利用Action来处理HTML的表单以及其余请求。Action返回一个结果的名字字符串,例如SUCCESSERROR以及INPUT等,从struts.xml中获取映射信息。一个给定的结果字符串将选择一个页面或其他资源(图片或PDF)来返回给用户。

 当一个jsp被载入的时候,通常有一些动态变化的元素需要Action来载入。为了更加容易的显示动态数据,本框架提供了一些可以跟HTML配合使用的标签。

六.             问题汇总

 对于出现启动失败,例如Cannot locate the chosen ObjectFactory implementation: spring等错误的朋友,请仔细检查你引入的包。关于需引入的包,请参见第一节(准备工作)。也希望遇到其余问题的朋友留言或发Email给我,在此进行汇总。

 下一篇:基础篇:使用Struts2的标签
 上一篇:基础篇:序言

posted on 2007-07-27 00:01 阿蜜果 阅读(4117) 评论(21)  编辑  收藏 所属分类: Struts2


FeedBack:
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 08:30 | vagrant
记得上次看到写的关于spring的aop,今天又看到关于struts2,好强......学习中  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 08:36 | chenge
不错!  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 08:57 | Tortoise
技术强。e文也牛。厉害!  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 09:35 | sterning
加油.支持  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 09:43 | cresposhi
厉害厉害
up  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 11:00 | kenzhang
写的很详细,看的很明白。支持!  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-27 11:56 | Hmilyld
不错,支持下.
等待下一篇.:)  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇[未登录]
2007-07-27 12:54 | beansoft
友情支持一下.  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇[未登录]
2007-07-27 21:12 | -274°C
好文章,好人。  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-07-28 11:14 | Blake
期待下文  回复  更多评论
  
# re: Struts2学习进阶(二)——Hello World篇
2007-08-01 11:49 | kittow
好贴,学到了,顶一下  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-12 22:34 | 夏日火鸡
PLMM
你好厉害
小生佩服  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-21 14:34 | liulin
我运行了你的例子 ,怎么不行啊。  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-21 21:20 | 阿蜜果
@liulin
可以的,我等下把那个工程的源码发到你邮箱吧。你核对一下什么地方弄错了  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-23 17:44 | liulin
好的。谢谢啊!!!  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-24 10:19 | liulin
严重: Error filterStart
2007-8-24 10:00:27 org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors
你发我的好象不是那个HelloWorld 的例子 ,但是这个列子也报了这个错误。不好意思,问一下。  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-08-26 23:26 | 大佑
我做你那個範例~HelloWorld.jsp運行不了~
  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World[未登录]
2007-08-27 09:03 | 阿蜜果
@ liulin
不好意思,上次发错了,刚才又发了一次helloworld的例子,请查收!
@大佑
你一个运行不了,我无法给你确定答复,要不留下邮箱,我将那个hello world工程发给你。  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-10-08 19:38 | beijixuem
我也想要代码
邮箱地址:dragonmxg@163.com
谢谢了!  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2007-10-09 08:51 | 阿蜜果
@beijixuem
已经发了,请查收!  回复  更多评论
  
# re: Struts2学习进阶(基础篇二)——Hello World
2009-08-14 10:48 | pnpe
我的也要出错
org.apache.catalina.core.StandardContext start
严重: Error filterStart
org.apache.catalina.core.StandardContext start
严重: Context [/helloworld] startup failed due to previous errors

麻烦你也发给我哈吧 谢谢!
pnpe@163.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2280247
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜