首先简要介绍下我使用的开发环境吧:Eclipse3.3 IDE For Java EE Developers下载地址:http://www.eclipse.org/downloads/,JDK5或以上版本,Struts2.0.9(呵呵,在我写作的同时Struts2.0.11已经发布,下载地址http://struts.apache.org/download.cgi#struts206)将下载的struts-2.0.11-all.zip解压将struts2开发所必需的jar包加入你的classpath(在Eclipse wtp项目结构下拷贝到WebContent/WEB-INF/lib目录下即可),我的做法是在Eclipse下创建了一个struts库如图所示: struts2-core.jar Struts2的核心api,也是我们以后打交道最多的 xwork.jar Struts2(同Webwork一样)建立在XWork 2库的基础上 ognl.jar Object Graph Navigation Language (OGNL), 类似于jsp2.0中EL表达式的一门用于访问对象的表达式语言 freemarker.jar Struts2所有的ui标记的模板均使用freemarker编写,freemarker根据struts2 ui标记的模板渲染,可通过修改或重写模板使struts2的ui标记按你的要求渲染 commons-logging.jar 封装了通用的日志接口(在Log4J or JDK 1.4+日志api的基础上 ) 上图中Xwork和struts2 core展开的Source attaching和Javadoc location我分别配置了xwork和struts2 core的源代码和其文档的位置,方便开发中查看源代码和api函数的说明。如果你是按照我这样配置的话那么在Eclipse wtp下新建一个Dynamic Web Project取名为HelloWorld,选中该项目右键Build Path加入我们刚才配置好的Struts2库如下图
struts2-core.jar
Struts2的核心api,也是我们以后打交道最多的
xwork.jar
Struts2(同Webwork一样)建立在XWork 2库的基础上
ognl.jar
Object Graph Navigation Language (OGNL), 类似于jsp2.0中EL表达式的一门用于访问对象的表达式语言
freemarker.jar
Struts2所有的ui标记的模板均使用freemarker编写,freemarker根据struts2 ui标记的模板渲染,可通过修改或重写模板使struts2的ui标记按你的要求渲染
commons-logging.jar
封装了通用的日志接口(在Log4J or JDK 1.4+日志api的基础上 )
选择Add Library选择User Library加入Struts2所需的库。
见上图选择J2EE Module Dependencies勾选struts2库参看见下图
勾选struts2库后当Eclipse wtp将项目发布到Tomcat的时候strust2中的jar会拷贝项目WEB-INF下的lib目录下(以后的文章将不在强调,请切记将需要的库勾选,否则运行时会出现找不到某某类的错误,因为发布的时候Eclipse wtp不会将所需的jar拷贝到WEB-INF/lib目录下,所以程序在运行时位于该库的jar中的类会找不到)
在web.xml中注册一个FilterDispatcher该Filter拦截所有的请求(/*)使得struts2框架为您服务。
在项目src目录下新建一个struts.xml作为struts2的配置文件(项目发布到Tomcat的时候Eclipse会将src目录下的文件对应其目录结构中的文件拷贝到WEB-INF/classes下)如下所示:
Package类似于Java中的package,其实就是可以将Action分类,划分到不同的package中。extends="struts-default"顾名思义继承,那么继承谁呢?请大家查看struts2-core.jar包里有个struts-default.xml文件里面为我们的应用程序提供了默认配置,应用程序从classpath加载struts.xml的时候会从classpath中加载struts2-core中并读取struts-default.xml,以后我也会经常涉及这个struts-default文件(呵呵,其实我也不全了解这个文件里的配置,大家努力!!!)
那么到此Struts2的基本环境配置的模板搭建好了!
那么新建一个index.jsp
在这个页面中我将使用struts2标记,先注个册先如下:
<%@ taglib prefix="s" uri="/struts-tags"%>(在struts2-core.jar的META-INF/struts-tags.tld中的标记<uri>/struts-tags</uri>刚好与上面uri属性匹配, struts2的所有标记的配置信息估计都在这文件里,大家一起研究研究吧!)
新建一个Action代码如下:
按我上面所说的struts.xml的package中把这个Action注册进去吧
我们回过头来看看表单:
呵呵,看见message属性没,该表单发出的请求会被FilterDispatcher(web.xml配置的)拦截,然后读取struts.xml配置信息并找到HelloWorld这个Action
通过class属性找到tutorial.HelloWorld对象,由于表单有个message属性会调用set方法设置message的值(同webwork,hibernate的持久类不也是这样通过set对属性赋值,通过get对属性取值的吗,这里也是一样的)然后调用execute()方法返回一个字符串(我们在写Action的时候可以覆写这个方法,框架默认调用这个方法,当然我们也可以选择不覆写,定义自己的方法,以后在说好了),呵呵这个SUCCESS是个常量,它定义在所实现的Action接口中:public static final Sring SUCCESS = “success”;里面还定义了其它的常用的字符串,自己看看源码吧!(实际上HelloWorld继承ActionSupport而ActionSupport实现了Action接口,当然还有其它接口,有兴趣的去挖挖源码吧!)扯了半天就是execute()返回个”success的字符串”,然后从struts.xml的对应action配置中找到所匹配的result,然后将请求转发到/helloworld.jsp去(result中的name=”success”可以不写,默认的,老实说:到底struts默认了哪些东东,真希望官方搞张表全给我们列出来就好)
那么剩下的最后一个页面就是helloworld.jsp了
<s:property value="message" />就这个东东了,很简单输出Action中的message属性值。
运行下看看结果:
提交下
呵呵,大功告成!!!我会接着写的,下次也是老套路登录,呵呵,请关注博客更新!!!
Powered by: BlogJava Copyright © 爪哇园主