Struts 2下的helloword.docx
- 文档编号:11038700
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:40
- 大小:33.40KB
Struts 2下的helloword.docx
《Struts 2下的helloword.docx》由会员分享,可在线阅读,更多相关《Struts 2下的helloword.docx(40页珍藏版)》请在冰豆网上搜索。
Struts2下的helloword
本章要点
—Struts2的下载和安装
—纯手工创建一个Web应用
—纯手工创建一个Struts2应用
—实现Struts2的Action
—配置Struts2的Action
—在Action中访问HttpSession
—在JSP中输出Action的返回值
—使用Struts2的表单标签
—程序国际化初步
—数据校验初步
前面已经简要介绍了Struts2的起源,以及Struts2的两个前身:
Struts1和WebWork,并详细对比了Struts2和Struts1的差异,对比了Struts2和WebWork的差异,而且指出:
Struts2是WebWork的升级,而不是Struts1的升级。
虽然Struts2提供了与Struts1的兼容,但已经不是Struts1的升级。
对于已有Struts1开发经验的开发者而言,Struts1的开发经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很好的借鉴意义。
下面将以一个Struts2的HelloWorld应用为例,介绍Strust2MVC框架如何拦截用户请求,如何调用业务控制器处理用户请求,并介绍Action处理结果和资源之间的映射关系。
本HelloWorld应用是一个简单的应用:
用户进入一个登录页面,允许用户输入用户名、密码,如果用户输入的用户名和密码符合要求,则进入一个欢迎页面;如果用户输入错误,则进入一个提示页面。
当用户提交表单时,本应用会有基本的数据校验。
2.1下载和安装Struts2框架
下面我们从下载、安装Struts2开始,慢慢开始体验Struts2MVC框架的魅力。
笔者写本书的时候,Struts2已经发布了其产品化GA(GeneralAvailability)版,其实最新的产品化GA版是Struts2.06,故本书的所有应用都是基于该版本的Struts2。
建议读者下载Struts2.06版,而不是下载最新的Beta版,如果Struts2有最新的GA版,读者也可以下载更新的GA版,相信不会有太大差异。
下载和安装DWR请按如下步骤进行。
登录http:
//struts.apache.org/download.cgi#Struts206站点,下载Struts2的最新GA版。
在Struts2.06下有如下几个选项:
—FullDistribution:
下载Struts2的完整版。
通常建议下载该选项。
—ExampleApplications:
下载Struts2的示例应用,这些示例应用对于学习Struts2有很大的帮助,下载Struts2的完整版时已经包含了该选项下全部应用。
—BlankApplicationonly:
仅下载Struts2的空示例应用,这个空应用已经包含在ExampleApplications选项下。
—EssentialDependencies:
仅仅下载Struts2的核心库,下载Struts2的完整版时将包括该选项下的全部内容。
—Documentation:
仅仅下载Struts2的相关文档,包含Struts2的使用文档、参考手册和API文档等。
下载Struts2的完整版时将包括该选项下的全部内容。
—Source:
下载Struts2的全部源代码,下载Struts2的完整版时将包括该选项下的全部内容。
—AlternativeJava4JARs:
下载可选的JDK1.4的支持JAR。
下载Struts2的完整版时将包括该选项下的全部内容。
通常建议读者下载第一个选项:
下载Struts2的完整版,将下载到的Zip文件解压缩,该文件就是一个典型的Web结构,该文件夹包含如下文件结构:
—apps:
该文件夹下包含了基于Struts2的示例应用,这些示例应用对于学习者是非常有用的资料。
—docs:
该文件夹下包含了Struts2的相关文档,包括Struts2的快速入门、Struts2的文档,以及API文档等内容。
—j4:
该文件夹下包含了让Struts2支持JDK1.4的JAR文件。
—lib:
该文件夹下包含了Struts2框架的核心类库,以及Struts2的第三方插件类库。
—src:
该文件夹下包含了Struts2框架的全部源代码。
将lib文件夹下的Struts2-core-2.0.6.jar、xwork-2.0.1.jar和ognl-2.6.11.jar等必需类库复制到Web应用的WEB-INF/lib路径下。
当然,如果你的Web应用需要使用Struts2的更多特性,则需要将更多的JAR文件复制到Web应用的WEB-INF/lib路径下。
如果需要在DOS或者Shell窗口下手动编译Struts2相关的程序,则还应该将Struts2-core-2.0.6.jar和xwork-2.0.1.jar添加到系统的CLASSPATH环境变量里。
提示大部分时候,使用Struts2的Web应用并不需要利用到Struts2的全部特性,因此没有必要一次将该lib路径下JAR文件全部复制到Web应用的WEB-INF/lib路径下。
编辑Web应用的web.xml配置文件,配置Struts2的核心Filter。
下面是增加了Struts2的核心Filter配置的web.xml配置文件的代码:
xmlversion="1.0"encoding="GBK"?
>
--web-app是Web应用配置文件的根元素,指定Web应用的Schema信息-->
xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //java.sun. com/xml/ns/j2ee/web-app_2_4.xsd"> --定义Struts2的FilterDispatcher的Filter--> --定义核心Filter的名字--> --定义核心Filter的实现类--> --FilterDispatcher用来初始化Struts2并且处理所有的Web请求--> 经过上面3个步骤,我们已经可以在一个Web应用中使用Struts2的基本功能了,下面将带领读者进入Struts2MVC框架的世界。 2.2从用户请求开始 Struts2支持大部分视图技术,当然也支持最传统的JSP视图技术,本应用将使用最基本的视图技术: JSP技术。 当用户需要登录本系统时,用户需要一个简单的表单提交页面,这个表单提交页面包含了两个表单域: 用户名和密码。 下面是一个最简单的表单提交页面,该页面的表单内仅包含两个表单域,甚至没有任何动态内容,实际上,整个页面完全可以是一个静态HTML页面。 但考虑到需要在该页面后面增加动态内容,因此依然将该页面以jsp为后缀保存。 下面是用户请求登录的JSP页面代码: <%@pagelanguage="java"contentType="text/html;charset=GBK"%>
--提交请求参数的表单-->
用户登录
--用户名的表单域-->
--密码的表单域-->
type="reset"value="重填"/> 正如前面介绍的,该页面没有包含任何的动态内容,完全是一个静态的HTML页面。 但我们注意到该表单的action属性: login.action,这个action属性比较特殊,它不是一个普通的Servlet,也不是一个动态JSP页面。 可能读者已经猜到了,当表单提交给login.action时,Struts2的FilterDispatcher将自动起作用,将用户请求转发到对应的Struts2Action。 注意Struts2Action默认拦截所有后缀为.action的请求。 因此,如果我们需要将某个表单提交给Struts2Action处理,则应该将该表单的action属性设置为*.action的格式。 该页面就是一个基本的HTML页面,在浏览器中浏览该页面,看到如图2.1所示的界面。 整个页面就是一个标准的HTML页面,整个单独的页面还没有任何与用户交互的能力。 下面我们开始动手创建一个Struts2的Web应用。 2.3创建Struts2的Web应用 Struts2的Web应用就是一个普通的Web应用,然后增加Struts2功能,该应用就可以充分利用Struts2的MVC框架了。 2.3.1创建Web应用 笔者一直相信: 要想成为一个优秀的程序员,应该从基本功练起,所有的代码都应该用简单的文本编辑器(包括EditPlus、UtraEdit等工具)完成。 笔者经常见到一些有两三年开发经验的程序员,一旦离开了熟悉的IDE(集成开发环境,如Eclipse、JBuilder等),完全不能动手写任何代码。 而他们往往还振振有词: 谁会不用任何工具来开发? 实际上,真正优秀的程序员当然可以使用IDE工具,但即使使用VI(UNIX下无格式编辑器)、记事本也一样可以完成非常优秀的项目。 笔者对于IDE工具的态度是: 可以使用IDE工具,但绝不可依赖于IDE工具。 学习阶段,千万不要使用IDE工具;开发阶段,才去使用IDE工具。 提醒对于IDE工具,业内有一个说法: IDE工具会加快高手的开发效率,但会使初学者更白痴。 为了让读者更加清楚Struts2应用的核心,笔者下面将“徒手”建立一个Struts2应用。 建立一个Web应用请按如下步骤进行。 在任意目录新建一个文件夹,笔者将以该文件夹建立一个Web应用。 在第1步所建的文件夹内建一个WEB-INF文件夹。 进入Tomcat,或任何Web容器内,找到任何一个Web应用,将Web应用的WEB-INF下的web.xml文件复制到第2步所建的WEB-INF文件夹下。 修改复制的web.xml文件,将该文件修改成只有一个根元素的XML文件,修改后的web.xml文件代码如下: xmlversion="1.0"encoding="GBK"? > --web-app是Web应用配置文件的根元素,指定Web应用的Schema信息--> xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //java.sun. com/xml/ns/j2ee/web-app_2_4.xsd"> 在第2步所建的WEB-INF路径下,新建两个文件夹: classes和lib,它们分别用于保存单个*.class文件和JAR文件。 经过上面步骤,已经建立了一个空Web应用。 将该Web应用复制到Tomcat的webapps路径下,该Web应用将可以自动部署在Tomcat中。 将2.2节所定义的JSP页面文件复制到第1步所建的文件夹下,该JSP页面将成为该Web应用的一个页面。 该Web将有如下文件结构: Struts2qs |-WEB-INF ||-classes ||-lib ||-web.xml |-login.jsp 上面的Struts2qs是Web应用所对应文件夹的名字,可以更改;login.jsp是该Web应用下JSP页面的名字,也可以修改。 其他文件夹、配置文件都不可以修改。 启动Tomcat,在浏览器中浏览2.2节定义的JSP页面,将看到如图2.1所示的页面。 2.3.2增加Struts2功能 为了给Web应用增加Struts2功能,只需要将Struts2安装到Web应用中即可。 在Web应用中安装Struts2框架核心只需要经过如下三个步骤。 修改web.xml文件,在web.xml文件中配置Struts2的核心Filter。 将Struts2框架的类库复制到Web应用的WEB-INF/lib路径下。 在WEB-INF/classes下增加struts.xml配置文件。 下面是增加了Struts2功能后Web应用的文件结构: Struts2qs |-WEB-INF ||-classes(struts.xml) ||-lib(commons-logging.jar,freemarker.jar,ognl.jar,struts2-core.jar,xwork.jar) ||-web.xml |-login.jsp 在上面的文件结构中,lib下Struts2框架的类库可能有版本后缀。 例如commons-logging.jar,可能是commons-logging-1.1.jar;struts2-core.jar可能是struts2-core-2.0.6.jar。 修改后的web.xml文件在2.1节已经给出了,故此处不再赘述。 此处需要给读者指出的是,Struts2的Web应用默认需要Java5运行环境,需要Web容器支持ServletAPI2.4和JSPAPI2.0。 如果读者需要使用更低版本的Java运行时环境,则需要使用Struts2框架的JDK1.4支持。 为了简单起见,笔者建议读者使用Java5运行时环境,使用Tomcat5.5或者更高版本。 注意Struts2应用默认需要Java5运行时环境,需要支持ServletAPI2.4和JSPAPI2.0的Web容器。 2.4实现控制器 前面介绍MVC框架时,已经指出: MVC框架的核心就是控制器。 当用户通过2.2节的页面提交用户请求时,该请求需要提交给Struts2的控制器处理。 Struts2的控制器根据处理结果,决定将哪个页面呈现给客户端。 2.4.1实现控制器类 Struts2下的控制器不再像Struts1下的控制器,需要继承一个Action父类,甚至可以无需实现任何接口,Struts2的控制器就是一个普通的POJO。 实际上,Struts2的Action就是一个包含execute方法的普通Java类,该类里包含的多个属性用于封装用户的请求参数。 下面是处理用户请求的Action类的代码: //Struts2的Action类就是一个普通的Java类 publicclassLoginAction { //下面是Action内用于封装用户请求参数的两个属性 privateStringusername; privateStringpassword; //username属性对应的getter方法 publicStringgetUsername() { returnusername; } //username属性对应的setter方法 publicvoidsetUsername(Stringusername) { this.username=username; } //password属性对应的getter方法 publicStringgetPassword() { returnpassword; } //password属性对应的setter方法 publicvoidsetPassword(Stringpassword) { this.password=password; } //处理用户请求的execute方法 publicStringexecute()throwsException { //当用户请求参数的username等于scott,密码请求参数为tiger时,返回success 字符串 //否则返回error字符串 if(getUsername().equals("scott") &&getPassword().equals("tiger")) { return"success"; } else { return"error"; } } } 上面的Action类是一个再普通不过的Java类,该类里定义了两个属性: username和password,并为这两个属性提供了对应的setter和getter方法。 除此之外,该Action类里还包含了一个无参数的execute方法——这大概也是Action类与POJO唯一的差别。 实际上,这个execute方法依然是一个很普通的方法,既没有与ServletAPI耦合,也没有与Struts2API耦合。 提示表面上看起来,该Action的两个属性只提供了对应的setter和getter方法,很难理解请求参数在什么时候赋值给该Action的属性,事实上,因为Struts2的拦截器机制,它们负责解析用户的请求参数,并将请求参数赋值给Action对应的属性。 2.4.2配置Action 上面定义了Struts2的Action,但该Action还未配置在Web应用中,还不能处理用户请求。 为了让该Action能处理用户请求,还需要将该Action配置在struts.xml文件中。 前面已经介绍过了,struts.xml文件应该放在classes路径下,该文件主要放置Struts2的Action定义。 定义Struts2Action时,除了需要指定该Action的实现类外,还需要定义Action处理结果和资源之间的映射关系。 下面是该应用的struts.xml文件的代码: xmlversion="1.0"encoding="GBK"? > --指定Struts2配置文件的DTD信息--> DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd"> --struts是Struts2配置文件的根元素--> --Struts2的Action必须放在指定的包空间下定义--> --定义login的Action,该Action的实现类为lee.Action类--> --定义处理结果和资源之间映射关系。 --> 上面映射文件定义了name为login的Action,即: 该Action将负责处理向login.actionURL请求的客户端请求。 该Action将调用自身的execute方法处理用户请求,如果execute方法返回success字符串,请求将被转发到/welcome.jsp页面;如果execute方法返回error字符串,则请求被转发到/error.jsp页面。 2.4.3增加视图资源完成应用 经过上面步骤,这个最简单的Struts2应用几乎可以运行了,但还需要为该Web应用增加两个JSP文件,两个JSP文件分别是error.jsp页面和welcome.jsp页面,将这两个JSP页面文件放在Web应用的根路径下(与WEB-INF在同一个文件夹下)。 这两个JSP页面文件是更简单的页面,它们只是包含了简单的提示信息。 其中welcome.jsp页面的代码如下: <%@pagelanguage="java"contentType="text/html;charset=GBK"%>
您已经登录!
上面的页面就是一个普通的HTML页面,登录失败后进入的error.jsp页面也与此完全类似。
在如图2.1所示页面的“用户名”输入框中输入scott,在“密码”输入框中输入tiger,页面将进入welcome.jsp页面,将看到如图2.2所示的页面。
对于上面的处理流程,可以简化为如下的流程:
用户输入两个参数,即username和password,然后向login.action发送请求,该请求被FilterDispatcher转发给LoginAction处理,如果LoginAction处理用户请求返回success字符串,则返回给用户welcome.jsp页面;如果返回error字符串,则返回给用户error.jsp页面。
图2.3显示了上面应用的处理流程。
图2.3HelloWorld应用的处理流程
2.5改进控制器
通过前面介绍,读者已经可以完成简单的Struts2的基本应用了,但还可以进一步改进应用的Action类,例如该Action类可以通过实现Action接口,利用该接口的优势。
前面应用的Action类没有与JavaBean交互,没有将业务逻辑操作的结果显示给客户端。
2.5.1实现Action接口
表面上看起来,实现Struts2的Action接口没有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts 2下的helloword helloword