首先要说的是我昨天遇到的问题, 之前用的是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:
注意这里的Tag, 跟Struts 1.x里是不一样的了.
有了JSP页面, 下面该写我们的Action了, 代码如下:
感觉是不是和1.x不一样啦, 呵呵, 看看这个execute方法, 没有了在1.x里的那四个参数, 这样在单元测试的时候, 就方便多啦.
Action也OK了, 接下来就是配置它啦, 在2.0里面, 不再用1.x的struts-config.xml了, 而是改成了struts.xml与WebWork的配置文件相似, 其实感觉就是换了个名字, 哈.
在这里呢, 把Struts的配置, 分成了多个小块, 在struts.xml里面给引用过来, 这样就方便多啦, 在Action等众多的情况下, 分到多个文件里, 可以更方便我们管理和维护. 来看看example.xml吧.
相当简单吧? 在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.xml和struts.properties都放到classes目录下就OK了.
配置完了Struts的东西, 基本就差不多啦, 不过不要忘了, 在web.xml里定义上哦, 与1.x不同啦, 以1.x里, 用的是 一个Servlet, 在这里, 用的是Filter啦(PS:我也是刚刚接触, 只看到了用Filter的, 不知道还有没有其他的.呵呵.)
这样你的程序基本就OK啦, 把Tomcat启动起来, 访问一下:http://localhost:8080/struts2/example/hello.action 看看结果撒.具体的URL要参照你自己的配置哦, 还有就是刚才说的那个namespace, 因为允许为空, 所以在空的时间, 是默认的 / .在这里我也只是为了测试一下看看效果.呵呵.
WEB一块就算结束了, 这里要加几句, 在2.0里, 可以很方便的对Action进行测试, 针对于上面的Action, 可以写个测试为:
想想如果要是在1.x里做Action的测试, 会是个什么样子, 再看看2.0的, 感觉良好吧?
好啦, 就写这么多吧, 抓紧时间去熟悉更多的东西喽~~~~~~~
好啦, 开始进入我们第一个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 >
< 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;
}
}
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;
}
}
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 >
"-//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 >
"-//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.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 >
< 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()));
}
}
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的, 感觉良好吧?
好啦, 就写这么多吧, 抓紧时间去熟悉更多的东西喽~~~~~~~