随笔-34  评论-1965  文章-0  trackbacks-0

Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:

  • MVC 2模型的使用
  • 功能齐全的标志库(Tag Library)
  • 开放源代码

但是,所谓“金无赤金,人无完人”,Struts自身也有不少的缺点:

  • 需要编写的代码过多,容易引起“类爆炸”
  • 单元测试困难

这些缺点随着Web的发展越来越明显。这就促生了Struts 2.0,它的诞生能很好的解决上述问题。 好啦,废话就不多说了,现在就让我们感受一下的Struts 2.0的魅力吧。

  1. 搭建开发和运行环境
    1. 到Apache下载Struts 2.0包

    2. 打开Eclipse 3.2新建Web工程

      点击菜单File\New\Project,出现如图1所示对话框
      图1 新建工程对话框
      图1 新建工程对话框
      选择Web\Dynamic Web Project,点击“Next”,出现图2对话框

      图2 新建动态Web工程对话框
      图2 新建动态Web工程对话框
      在“Project Name”中键入Struts2_HelloWorld,点击“New”,出现以下对话框

      图3 新建服务器运行时对话框
      图3 新建服务器运行时对话框
      选择“Apache\Apache Tomat v5.5”,点击“Next”,出现以下对话框

      图4新建服务器运行时对话框
      图4新建服务器运行时对话框
      点击“Finish”,关闭对话框。

    3. 将Struts 2.0 lib下的jar文件加到工程的构建路径(build path)

      图5 Struts 2.0的lib目录
      图5 Struts 2.0的lib目录
      按ctr+a全选,复制,再转到Eclipse窗口,在“Project Explorer”子窗口中选中Struts2_HelloWorld\WebContent\WEB-INF\lib,然后粘贴。经过Eclipse自动刷新“Project Explorer”子窗口,刚才所粘贴的jar文件应该会出现在Struts2_HelloWorld\Java Resources: src\Libraries\Web App Libraries下,如图6所示:

      图6 Project Explorer子窗口
      图6 Project Explorer子窗口

    4. 打开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/dtd/web-app_2_3.dtd">
      <web-app>
          
      <display-name>Struts 2.0 Hello World</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>

    5. 新建struts.xml文件

      右键点击,Struts2_HelloWorld\Java Resources: src,出现如图7所示菜单
      图7 新建Other菜单
      图7 新建Other菜单
      点击“Other”,出现新建对话框,如图8所示

      图8 新建对话框
      图8 新建对话框
      点击“Next”,出现新建文件对话框,如图9所示

      图9 新建文件对话框
      图9 新建文件对话框
      在“File name”中键入sturts.xml,点击“Finish”,然后将struts.xml的内容修改为:

      <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
      >
      <struts>
          
      <include file="struts-default.xml"/>
      </struts>

    6. 新建index.html文件

      右键点击Struts2_HelloWorld\WebContent,出现如图10所示的菜单
      图10 新建Other菜单
      图10 新建Other菜单
      点击“Other”,出现新建对话框,如图11所示

      图11 新建对话框
      图11 新建对话框
      选择Web\HTML,点击“Next”出现如图12所示的对话框

      图12 新建HTML页面对话框
      图12 新建HTML页面对话框
      在“File Name”中键入index.html,点击“Next”,出现如图13所示的对话框

      图13 模板选择对话框
      图13 模板选择对话框
      点击“Finish”,将index.html的内容修改为以下内容:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Hello World</title>
      </head>
      <body>
      <h3>Hello World!</h3>
      </body>
      </html>

    7. 将应用程序打包到tomcat上

      右键点击Struts_HelloWorld,出现如图14所示的菜单
      图14 工程菜单
      图14 工程菜单
      点击“Export\WAR file”,出现如图15所示的对话框

      图15 输出对话框
      图15 输出对话框
      选择“Web\WAR file”,点击“Next”,出现如图16所示的对话框

      图16 输出路径对话框
      图16 输出路径对话框
      输入war文件的路径(如%tomcat%\webapps\Struts2_HelloWorld.war),点击“Finish”关闭对话框。

    8. 启动tomcat,运行应用程序

      打开你的Internet Explorer,键入http://localhost:8080/Struts2_HelloWorld/,窗口输出如图17所示
      图17 Hello World窗口
      图17 Hello World窗口

  2. 第一个Struts 2.0应用程序——Hello World
    1. 新建类包(package)

      右键点击Struts2_HelloWorld\Java Resources: src,出现如图18所示菜单
      图18 新建菜单
      图18 新建菜单"
      点击“New\Package”,出现如图19所示对话框

      图19新建Java类包对话框
      图19新建Java类包对话框
      在“Name”键入tutorial,点击“Finish”关闭对话框。

    2. 新建HelloWorld.java文件

      右键点击Struts2_HelloWorld\Java Resources: src\tutorial,出现如图20所示菜单
      图20 新建菜单
      图20 新建菜单
      点击“New\Class”,出现如图21所示对话框

      图21 新建Java类对话框
      图21 新建Java类对话框
      在“Name”中键入HelloWorld,在“Superclass”中键入com.opensymphony.xwork2.ActionSupport,点击“Finish”关闭对话框。将HelloWorld.java的内容修改为:

      package tutorial;

      import com.opensymphony.xwork2.ActionSupport;

      public class HelloWorld extends ActionSupport {
          
      private String name;
          
          
      public String getName() {
              
      return name;
          }

          
          
      public void setName(String name) {
              
      this.name = name;
          }

          
          
      public String execute() {
              name 
      = "Hello, " + name + "!"
              
      return SUCCESS;
          }

      }

    3. 在struts.xml中添加action映射(mapping)
      <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
              "http://struts.apache.org/dtds/struts-2.0.dtd"
      >
      <struts>
          
      <include file="struts-default.xml"/>
          
      <package name="tutorial" extends="struts-default">
              
      <action name="HelloWorld" class="tutorial.HelloWorld">
                  
      <result>HelloWorld.jsp</result>
              
      </action>
          
      </package>
      </struts>

    4. 新建SayHello.jsp

      参考“新建index.html文件”步骤,弹出如图22所示对话框
      图22 新建对话框
      图22 新建对话框
      点击“Next”, 进入下一步,如图23所示

      图23 新建JSP对话框
      图23 新建JSP对话框
      在“File name”键入SayHello.jsp,点击“Next”进入下一步,如图24所示

      图24 模板选择对话框
      图24 模板选择对话框
      点击“Finish”关闭对话框,并将SayHello.jsp的内容修改为:

      <%@ page contentType="text/html; charset=UTF-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
          
      <head>
              
      <title>Say Hello</title>
          
      </head>
          
      <body>
              
      <h3>Say "Hello" to: </h3>
              
      <s:form action="HelloWorld">
                  Name: 
      <s:textfield name="name" />
                  
      <s:submit />
              
      </s:form>
          
      </body>
      </html>

    5. 新建HelloWorld.jsp(请参考上一步),HelloWorld.jsp的内容为:
      <%@ page contentType="text/html; charset=UTF-8" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
          
      <head>
              
      <title>Hello</title>
          
      </head>
          
      <body>
              
      <h3><s:property value="name" /></h3>
          
      </body>
      </html>

    6. 重新打包发布应用程序

      先停止tomcat, 再将tomcat里webapps下的Struts2_HelloWorld.war和Struts2_HelloWorld文件夹删除,参照“将应用程序打包到tomcat上”重新发布应用程序。

    7. 启动tomcat,运行测试

      打开Internet Explorer,键入http://localhost:8080/Struts2_HelloWorld/SayHello.jsp,窗口输出如图25所示
      图25 SayHello.jsp
      图25 SayHello.jsp
      在“Name”键入字符串(如World),点击Submit,转到HelloWorld.jsp页面,如图26所示

      图26 HelloWorld.jsp
      图26 HelloWorld.jsp

  3. 单元测试Hello World

    在文章开始的时候提及,单元测试困难是Struts一大缺点。现在让我们在体验一下,在Struts 2.0中是如何进行测试的。

    1. 新建JUnit单元测试

      右键点击Struts2_HelloWorld\Java Resources: src\tutorial,弹出如图27所示对话框
      图27 新建菜单
      图27 新建菜单
      点击“Next\Other”

      图28 新建对话框
      图28 新建对话框
      选择“Java\JUnit\JUnit Test Case”,点击“Next”

      图29 新建JUnit 测试用例对话框
      图29 新建JUnit 测试用例对话框
      选择“New JUnit 4 test”,在“Name”中键入HelloWorldTest,在“Class under test”键入tutorial.HelloWorld,点击“Next”

      图30 选择方法对话框
      图30 选择方法对话框
      选中HelloWorld\execute方法,点击Finish。如果生成的HelloWorldTest.java文件的图标(Icon)出现红色交叉标志,请进行以下步骤添加JUnit 4的jar包。

      右键点击Struts2_HelloWorld,出现如图所示菜单。 图31 新建菜单
      图31 新建菜单
      点击“Build Path\Add Libararis”,弹出图32对话框

      图32 添加库对话框
      图32 添加库对话框
      选中“JUnit”,点击“Next”

      图33 选择版本对话框
      图33 选择版本对话框
      选择“JUnit 4”,点击“Finish”关闭对话框,并将HelloWorldTest.java的内容修改为:

      package tutorial;

      import static org.junit.Assert.assertTrue;

      import org.junit.Test;

      import com.opensymphony.xwork2.ActionSupport;

      public class HelloWorldTest {

          @Test
          
      public void testExecute() {
              HelloWorld hello 
      = new HelloWorld();
              hello.setName(
      "World");
              String result 
      = hello.execute();
              
              assertTrue(
      "Expected a success result!", ActionSupport.SUCCESS.equals(result));
              
              
      final String msg = "Hello, World!";
              assertTrue(
      "Expected the default message!", msg.equals(hello.getName()));
          }


      }

    2. 运行单元测试

      右键点击Struts2_HelloWorld\Java Resources: src\tutorial\HelloWorldTest.java,弹出如图34所示菜单
      图34 运行为菜单
      图34 运行为菜单
      点击“Run As\JUnit Test”,出现JUnit子窗口如图35所示

      图35 JUnit子窗口
      图35 JUnit子窗口
      图35的绿色矩形表示,所有单元测试通过。

  4. 总结

    上面的例子简单地演示了,Web 应用程序的基本操作,也即是,页面输入->Action处理->再输出到另外页面。Struts 2.0的简单易用、方便测试相信也会给大家留下不错的印象吧。我相信,Struts 2.0作为一个全新的Web架构,将会再次掀起Web开发的热潮。 不过,Struts 2.0还在测试中,正式版的发布还需些时日,所以文档方面可能有所欠缺。请大家继续留意我的博客,我会尽我所能为大家写更多关于Struts 2.0的文章。

posted on 2006-10-10 18:35 Max 阅读(125898) 评论(345)  编辑  收藏 所属分类: Struts 2.0系列
评论共4页: 上一页 1 2 3 4 

评论:
# re: 为Struts 2.0做好准备 2006-10-10 19:18 | stoneshao
step by step,ok  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 20:17 | pear
呵呵,不错不错,请问Struts还有没有象DispathAction这样的ActionSupport呢? 多个方法对应一个Action..  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 21:03 | badqiu1
struts2为何不学习ROR的convention over configuration,
写个helloworld要那么多步骤```

BTW:
spring MVC已经提供对convention over configuration的支持``  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 22:13 | Max
@pear
谢谢你们的留言,Struts 2.0有DispathAction的概念,而且比其更简单易用。这点我会在以后的文章中提及。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 22:21 | Max
@badqiu1
首先,要道个歉,我以前不常写Blog,所以有点过于繁锁。
不过,我只要是想在这篇文章把IDE的使用和Struts的配置说得详细一点。
其实,简而言之,要实现例子中的功能,只需要3个步骤:
1、编写ActionSupport类
2、配置struts.xml
3、编写JSP  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 22:32 | gf
恩,有点象webwork,我去下个看看  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-10 23:59 | jeffjie
根本就是Webwork。。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 08:28 | 坏男孩
顶  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 09:17 | SWAT
@jeffjie
引用Apache Struts官方网上一段话:
Struts 2 was originally known as WebWork 2. After working independently for several years, the WebWork and Struts communities joined forces to create Struts 2. The new framework is the best choice for teams who value elegant solutions to difficult problems.
看到这里相信大家对WebWork和Struts 2.0的关系已经清楚了。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 10:02 | 123bingbing
增开7群,号码 30440732
8群 30756649
9群 30178567
10群 28694497

我们的qq群:15096318 学习程序的都可以来  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 12:14 | 捕风
充分体现了struts的xionghuai  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 13:25 | 黑蝙蝠
大哥 我怎么也配置不上lomboz 我下的eclipse是3.2版本 ....  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-11 14:02 | Max
@黑蝙蝠
对不起,恐怕帮不了你。因为,我的不是lomboz,而是Eclipse的webtools,挺好用的。我建议您可以试一下。用Eclipse的Software Update或到http://www.eclipse.org/webtools/去下载都可以。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-13 09:37 | niyong
没意思,就是webwork2,没什么新颖的  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-13 14:03 | 1
如果你是编程高手,这里将是你一个展现自我的新舞台----www.mylinux.com.cn
  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-23 23:56 | Unmi
就是webwork啊  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-26 22:57 | esmiles
纠正一个错误:
HelloWorld.jsp中的<s:property name="name" />
name属性是错的。应该改成value属性,既:
<s:property value="name" />

  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-27 09:12 | Max
@esmiles
Thanks,已经改正。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-27 14:36 | 风人园
请问一个问题,我按照你的配置,他出现如下错误,在
classpath下加了 struts.properties这个文件还是说没有找到

Could not find or error in struts.properties
java.lang.IllegalStateException: struts.properties missing

请问有遇到这种问题吗 ?
  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-27 14:48 | Max
@风人园
我没有遇过这种情况。
其实不用加也是可以运行的,只不过在tomcat加载应用程序时会有提示。
加一个空白的struts.properties文件就可以解决。
Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
1、struts.xml用于应用程序相关的配置
2、struts.properties用于Struts 2.0的运行时(Runtime)的配置  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-29 17:15 | 张先生
请问struts-default.xml文件放哪合适?  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-29 22:17 | soddabao
楼主的Dynamic Web Project插件是什么插件,myeclipse么?  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-30 10:44 | Max
@张先生
struts-default.xml文件不用您自己加,它位于struts2-core-2.0.0.jar包中。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-30 10:45 | Max
@soddabao
不是,是Eclipse的webtools的。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-10-30 14:43 | Liangjava
还有就是一个,没有插件.在编辑方面不行,只能调试才看得出来  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-01 17:42 | 风人园
我按照你的步骤,但是老是提示说下面的资源不可用,这是怎么回事?

The requested resource (/strutstest/HelloWorld) is not available.

strutstest是项目名  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-02 09:49 | Max
@风人园
请问您的服务器是不是tomcat?  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-02 13:01 | 风人园
是的,用tomcat会有什么问题吗?
  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-02 23:14 | Tin
谢谢Max的教程。大家也可以到WebWork中文网站:http://webwork.javascud.org/
http://wiki.javascud.org/display/ww2cndoc/WebWork
看看。里面有WebWork 2.2的中文参考手册。
Struts 2.0.1目前还完全等于WebWork 2.2.x,所以可以参照WebWork2手册学习。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-03 15:15 | 张先生
我的服务器是weblogic,在struts.xml配置中,与tomcat大相径庭,我至现在都未配置好,有谁成果过,指点为盼!谢谢!  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-06 09:43 | 千里皑皑雁飞飞
1)标签库:<%@ taglib prefix="s" uri="/struts-tags" %>是否还在web.xml中配置?

2)我的服务器是weblogic8.1,是否weblogic8.1能支持struts2?

要是不支持struts2,我就不打算坚持下去了。
  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-06 13:41 | pear
@千里皑皑雁飞飞
1. 记得不用
2. 不支持weblogic? 呵呵,不大可能,我没try过,你try一下啦.  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-06 17:08 | Max
@千里皑皑雁飞飞
1)不用,Struts 2.0已经为您做了
2)肯定支持,因为所有的WEB服务器,如tomcat、weblogic等都必须遵循Servlet规范的。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-07 08:55 | 千里皑皑雁飞飞
谢谢pear和Max的回复,

不论是在JBuilder中调试,还是直接设置一个虚拟目录,用tomcat4.1、

tomcat5.0,还是weblogic总是报错,其中weblogic报两个JSP文件中

<%@ taglib prefix="s" uri="/struts-tags" %>引用错误,

我尽自己所能做的挽救,还是不行。


使用tomcat5.5可以在JBuilder 中调试通过。


奇怪了,难道Struts2是挑服务器的???


  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-07 20:09 | 张先生
情况属实,反正我是weblogic9,老是跳转页面,找不着路径?我已改.试了好几天,均不行!!就是struts.xml中的配置!!!  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-08 08:07 | 千里皑皑雁飞飞
to 张先生:

你的weblogic9是哪里down的???能否给一个连接。

昨天把程序退到webwork下,试了试,一切正常。


to Max:

struts2刚刚推出,网上帖子、介绍不多,希望博主能够多多介绍一些。


  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-10 00:47 | Goingmm[匿名]
简单易懂!测试通过

需要尝试的朋友,有一个细节需要注意:
我开始图方便是把所有包都引入。结果出现struts2-all-2.0.1.jar包和struts2-core-2.0.1.jar包冲突。原因很简单就是这2个包里面都有struts-default.xml文件。造成重复定义
结论:在struts-2.0.1的lib下面有很多jar包。做这个测试只需要引入图5显示的其中6个包(在版本2.0.1里面没有struts2-extras-2.0.0.jar,所以不用引这个包)
  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-11 09:59 | 千里皑皑雁飞飞
to Goingmm:
谢谢,谢谢,一会儿我再试试!  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-22 21:42 | 太行山人
default-config.xml有什么用?一定要include到struts.xml中吗?  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-26 18:32 | Max
Default-config.xml contains some interceptor stacks and common configurations. Including it can help you to create action easier  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-27 11:33 | breezedancer
转到www.51forum.uni.cc谢谢  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-27 12:36 | 太行山人
如果我不想用default-config.xml中的默认配置,而是自己对default-config.xml中的一些参数自定义,应该把这个文件放在哪里呢?还是直接覆盖jar包中的这个文件呢?
或者,在struts.xml中配置相应的元素,会覆盖default-config.xml中相应元素的配置?  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-11-28 23:52 | Max
在struts.xml中配置相应的元素,可以覆盖default-config.xml中相应元素的配置。  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-12-02 13:26 | jakki
@Max
警告: Could not find or error in struts.properties
java.lang.IllegalStateException: struts.properties missing

我老是遇到报这个错,我已经加了这个文件了,怎么还报  回复  更多评论
  
# re: 为Struts 2.0做好准备 2006-12-04 18:50 | 张先生
把struts.properties 放到classes下即可了!!  回复  更多评论
  
评论共4页: 上一页 1 2 3 4 

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


网站导航: