Struts 2.0初体验--参照Tutorials来写第一个Struts 2.0程序

本文通过一个简单的HelloWorld示例介绍了Struts2.0的基本使用方法,包括搭建开发环境、创建JSP页面、编写Action类及配置文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        首先要说的是我昨天遇到的问题, 之前用的是Tomcat 5.0.28, 把Struts 2.0下的struts2-blank放到Tomcat下, 根本运行不了, 弄了半天也不成, 今天早上来了, 换了个Tomcat 5.5, 结果就OK了. 我想应该是Struts 2.0得要Tomcat 5.5以上的版本吧. 我的开发环境是:JDK5.0+Tomcat 5.5+Eclipse3.2
        好啦, 开始进入我们第一个Struts 2.0的例子吧, 按照惯例, 第一个当然是HelloWorld啦. 就照着Tutorials里的HelloWorld来做一个吧.
        先写一个显示页面, hello.jsp:

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

<html>
<head>
<title>The First Struts 2.0 Example</title>
</head>
<body>
    
<h2><s:property value="message" /></h2>
</body>
</html>

 注意这里的Tag, 跟Struts 1.x里是不一样的了.

        有了JSP页面, 下面该写我们的Action了, 代码如下:
package com.puras.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {
    
public static final String MESSAGE = "Struts 2.0 is up and running...";
    
    
private String message;
    
    
public void setMessage(String message) {
        
this.message = message;
    }

    
    
public String getMessage() {
        
return this.message;
    }

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

}
感觉是不是和1.x不一样啦, 呵呵, 看看这个execute方法, 没有了在1.x里的那四个参数, 这样在单元测试的时候, 就方便多啦.

        Action也OK了, 接下来就是配置它啦, 在2.0里面, 不再用1.x的struts-config.xml了, 而是改成了struts.xml与WebWork的配置文件相似, 其实感觉就是换了个名字, 哈.

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

在这里呢, 把Struts的配置, 分成了多个小块, 在struts.xml里面给引用过来, 这样就方便多啦, 在Action等众多的情况下, 分到多个文件里, 可以更方便我们管理和维护. 来看看example.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="example" namespace="/example" extends="struts-default">
        
<action name="hello" class="com.puras.struts2.HelloWorld">
            
<result>/hello.jsp</result>
        
</action>
    
</package>
</struts>

相当简单吧? 在Pageage里的namespace不是必须的, 其实只有Name是必须的, 但是NameSpace这个属性很有用哦, 给Action加一个前缀, 可以在我们写Action的时候, 少写一些东西, 要是在1.x里, 所有的Action都是以/struts/开头, 那我们就得在每个里面的Path上都写上/struts/啦, 不过在这里, 有了这个属性, 就可以不写啦.呵呵.

        Action的定义就相当简单啦, name等同于1.x里的Path,  Class呢就是我们刚写的Action啦, 跟1.x里的Type一样, 中间的Result, 就是Action处理完之后, 要返回的页面啦.呵呵, 是不是很简单?

        还要有一个struts.properties文件, 在里面配置一些Struts运行所需要的参数, 在里面加上一些设置:

struts.devMode = true
struts.enable.DynamicMethodInvocation = false

        把struts.xml和struts.properties都放到classes目录下就OK了.

        配置完了Struts的东西, 基本就差不多啦, 不过不要忘了, 在web.xml里定义上哦, 与1.x不同啦, 以1.x里, 用的是 一个Servlet, 在这里, 用的是Filter啦(PS:我也是刚刚接触, 只看到了用Filter的, 不知道还有没有其他的.呵呵.)

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

        这样你的程序基本就OK啦, 把Tomcat启动起来, 访问一下:http://localhost:8080/struts2/example/hello.action     看看结果撒.具体的URL要参照你自己的配置哦, 还有就是刚才说的那个namespace, 因为允许为空, 所以在空的时间, 是默认的 / .在这里我也只是为了测试一下看看效果.呵呵.

        WEB一块就算结束了, 这里要加几句, 在2.0里, 可以很方便的对Action进行测试, 针对于上面的Action, 可以写个测试为:

package com.puras.struts2;

import com.opensymphony.xwork2.ActionSupport;

import junit.framework.TestCase;

public class HelloWorldTest extends TestCase {
    
public void testHelloWorld() throws Exception {
        HelloWorld hello 
= new HelloWorld();
        String result 
= hello.execute();
        
        assertTrue(
"Expected a success result!", ActionSupport.SUCCESS.equals(result));
        
        assertTrue(
"Expected the default message!", HelloWorld.MESSAGE.equals(hello.getMessage()));
    }

}


        想想如果要是在1.x里做Action的测试, 会是个什么样子, 再看看2.0的, 感觉良好吧?

        好啦, 就写这么多吧, 抓紧时间去熟悉更多的东西喽~~~~~~~
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值