当前位置:首页 > 工作计划 > [迁移到Struts 2.0]微信聊天记录迁移
 

[迁移到Struts 2.0]微信聊天记录迁移

发布时间:2019-03-12 04:10:07 影响了:

  为了把现有的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配置文件。
  
  
  
  
  
  
  
  
  
    name="formDataForm"
  type="com.demo.action.FormDataAction"
  scope="request"
  validate="false">
  
  
  
  
  
  Struts 2的相应配置文件比较简单: 元素比较少,元素的属性也比较少。Struts 2中没有FormBeans这个概念。属性如今可以在Action类中直接定义。
  
  
  
  
  
  
  /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" : "https://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" : "https://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。

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3