开篇:润墨网以专业的文秘视角,为您筛选了一篇迁移到Struts 2.0范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
为了把现有的Struts 1应用迁移到struts 2,开发者需要改动许多地方。幸好,Struts 1和Struts 2其实可以共存在同一个应用中,这就简化了这种迁移。
■译自《JavaWorld》
如果Struts 2元素添加到了Struts 1应用中,原先存在的Struts 1动作处理*.do请求,而新的Struts 2动作则处理*.action请求。最简单的迁移方法就是,把Struts 2 JAR文件添加到应用上,然后每次把代码迁移到一个页面上。许多变化只是需要移除不需要的Struts 1类和标签,加入Struts 2需要的类和标签。在可选情况下,这两个版本的框架可使用一些共同特性,譬如Tiles配置和验证规则。
下面你可以比较一下为Struts 1编写的代码片段与相应的Struts 2代码片段。
Struts配置文件的变化
Struts配置文件出现了许多变化。最明显的也许就是它的新名称,在Struts 2中,该文件如今名为struts.xml,而不是struts-config.xml。以下代码显示了Struts 1配置文件。
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"jakarta.省略/struts/dtds/struts-config_1_3.dtd">
type="com.demo.form.FormDataForm">
name="formDataForm"
type="com.demo.action.FormDataAction"
scope="request"
validate="false">
Struts 2的相应配置文件比较简单: 元素比较少,元素的属性也比较少。Struts 2中没有FormBeans这个概念。属性如今可以在Action类中直接定义。
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"struts.省略/dtds/struts-2.0.dtd ">
/jspUserProfile.jsp
配置文件出现了许多变化。DTD必须符合Struts 2。配置文件中的根元素是,它必须包括struts-default.xml这个文件才能继承默认行为。因为不支持FormBeans,及相关标签被移除。标签取代了标签。标签属性出现了变化。元素被元素取代。进行所有这些变化,是为了让整个框架保持一致性,以便它与Spring和iBATIS等其他框架在一个水平上。进行这些变化的目的是为了利用版本2框架的许多新特性。譬如说,配置文件利用了智能默认值的优点,其中结果名默认值为“success”。
Action类的变化
Struts 2框架中不再出现ActionForm类。原本在ActionForm类中编写的任何内容如今成了Action类的一部分。Struts 2框架中的Action类比较简单。可以看一下以下代码。
package com.demo.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class FormDataAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
request.setAttribute("FORMDATA", form);
return (mapping.findForward("sucess")); }
}
Struts 2中的Action类一般由ActionSupport扩展而来,可选情况下,可实现Action接口。这里的优点是,任何POJO都可以用做Action。另外,Struts 2中的Action类不是单例类(singleton), Action类针对每个请求都要创建实例。因而,它不需要线程安全(thread safe),可能会有成员变量。下面的代码显示了Struts 2中的Action类,它对应于上述的Struts 1代码,它还集成了在Struts 1中需要封装到ActionForm类中的功能。
package com.demo.action;
import com.opensymphony.xwork2.ActionSupport;
public class FormData extends ActionSupport {
public String execute() throws Exception {
//拥有处理逻辑的代码
……
return (SUCCESS); }
private String strFirstName="";
private String strLastName="";
public void setFirstName(String strFirstName) {
this.strFirstName = strFirstName; }
public String getFirstName() {
return this.strFirstName; }
public void setLastName(String strLastName) {
this.strLastName = strLastName; }
public String getLastName() {
return this.strLastName; }
}
标签的变化
Struts 1中支持的bean标签已完全被标签取代。新标签在许多方面对Struts 1标签做了改进。Struts 2框架的标签一般分为两类: 通用标签和用户界面标签。通用标签用于处理显示页面的执行流程,还可用于数据抽取。通用标签又细分成控制标签和数据标签,前者用于流程控制函数,譬如if、else、append、iterate和merge等函数; 后者用于数据操纵、国际化、本地化、bean和bean属性等。通用标签一般直接输出标签内容。
用户界面标签旨在使用从数据标签获取的数据。这类标签一般用于显示HTML页面上的数据。用户界面标签又细分成表单标签和非表单标签: 前者用于指定表单元素; 后者用于指定动作中的错误、某个字段中的错误,或者高级的用户界面元素(如树或表)。用户界面标签使用模板和主题,其输出通常是混合的显示内容。以下代码表示了使用Struts 1 bean标签的简单示例。
This is a demo!
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-22575914-1']);_gaq.push(['_setDomainName', '.省略']);_gaq.push(['_trackPageview']);(function () {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'www') + '.省略/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.省略';var _siteid =691;var _istoken = 1;var _model = 'Model01'; WebPageSpeed =328; UrchinTrack();
同一个示例经过改动后,可使用Struts 2标签。
This is a demo!
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-22575914-1']);_gaq.push(['_setDomainName', '.省略']);_gaq.push(['_trackPageview']);(function () {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'www') + '.省略/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.省略';var _siteid =691;var _istoken = 1;var _model = 'Model01'; WebPageSpeed =328; UrchinTrack();
在该示例中,为了改动代码,@taglib命令的值被Struts标签所取代。这里的优点是,Struts标签会自动查找属性,因而不需要指定ActionForm。