一个用于J2EE应用程序的Backbase Ajax前端

  动态HTML技术已经出现了多年。最近,Google的最新Web应用程序GMail、Google Suggests和Google Maps,在前端页面中重新引入了基于标准的DHTML开发模型。Google证明了,DHTML开发模型能够让开发人员创建具有可视化吸引力和高度交互式的Rich Internet Application(丰富网络应用程序,RIA)。

  Adaptive Path公司的Jesse James Garrett为这个基于标准的RIA开发模型创造了术语Ajax (Asynchronous JavaScript + XML)。与传统的基于页面的Web应用程序模型相比,Ajax有3点不同之处:

  • 有一个客户端引擎担任用户界面(UI)和服务器之间的中介。
  • 用户行为由客户端引擎处理,而不是生成发往服务器的页面请求。
  • XML数据在客户端引擎和服务器之间传输。

  换言之,Ajax解决方案包括一个客户端引擎,它用于呈现用户界面,并使用XML格式与服务器通信。这个引擎由很多JavaScript函数组成,位于Web浏览器中,它不需要插件,也不需要用户安装。

  基于Ajax的RIA正在迅速成为Web应用程序前端的基准,因为它可以同时提供二者的优点:丰富性和可达性。Ajax应用程序和桌面应用程序一样丰富,响应高度灵敏,并且可以在一个页面上提供所有数据,无需刷新页面。它们还拥有基于标准的浏览器应用程序的可达性特点,这类应用程序可以在不具备浏览器插件或客户端applet的情况下进行部署。

  Backbase所提供的Ajax软件具有以下特点:基于标准、功能全面且易于使用。Backbase Presentation Client (BPC)基于Ajax技术,它使用称为Backbase XML (BXML)的附加标签扩展了DHTML。Backbase XML Server Edition for J2EE (BXS)包含了一些服务器端的组件,利用这些组件,J2EE开发人员可以快速开发J2EE应用程序的Ajax前端。

  在本文中,我使用Backbase为Java Pet Store开发了一个基于Ajax的前端。该案例分析说明了如何使用Backbase技术作为J2EE应用程序的Ajax表示层。您可以查看文中所描述的应用程序的在线演示,网址是http://www.backbase.com/xmlserver

Backbase Ajax表示层

  Web开发人员应该能够轻松创建具有以下特点的Rich Internet Application (RIA):完全基于HTML标准(W3C),不需要最终用户安装插件,速度超快,能够在所有浏览器上进行操作,并与J2EE运行时和开发环境完全集成。RIA利用客户端(Web浏览器)资源创建和管理用户界面,从而为最终用户提供一个响应灵敏而且具有应用程序风格的用户界面。

  这种方法最近被称为Ajax。Ajax这个术语的灵感来源于Gmail、Google Maps和Google Suggests这类应用程序,它把现有的浏览器技术提高到了一个新的水平上。RIA从根本上改进了在线应用程序的可用性和有效性。Ajax RIA只使用标准的浏览器技术(如JavaScript、XHTML和XMLHttpRequest对象)就做到了这一点。通过使用XMLHttpRequest,在将数据异步加载到界面中时就无需刷新页面。

  Backbase在J2EE架构中提供一个Ajax表示层,它结合了目前的J2EE服务器和先进的富客户端技术的优点。Backbase表示层控制了富用户界面的每个方面:与最终用户的交互模型,与后端系统的集成,以及整个客户端-服务器通信。Backbase直接提供了用于聚合来自任意位置的XML的下一个范型,将数据绑定到先进的富用户界面控件,并在一个统一的富用户界面中交付组合应用程序。

  Backbase表示层由一个客户机和一个服务器组成。Backbase Presentation Client (BPC)是一个基于Ajax的GUI引擎,它允许开发人员以声明性的方式快速构建RIA。Backbase XML(BXML)是对XHTML的扩展。它为开发人员提供了交付富前端功能的附加标签(B tag)。Backbase XML Server (BXS)提供一种XML流水线架构,利用它可以从Web服务、数据库或Java对象获取数据,可以聚合和转换这些数据,并将其绑定到BPC中的UI元素。BPC和BXS相结合,可以在Web浏览器和应用服务器之间搭建一座功能强大的桥梁,并提供一个分布在客户端和服务器上的完整的富Internet表示层。

  图1说明了在逻辑和物理应用程序架构中,Backbase所处的位置。应用程序由一个J2EE后端和一个基于Ajax的RIA前端组成。从逻辑上说,Backbase提供了表示层,而J2EE提供了业务逻辑和数据层。从物理上说,表示层分布在客户端和服务器上。在客户端上,Backbase使用BPC扩展了浏览器。在服务器上,Backbase使用BXS扩展了应用服务器。

图1. Backbase富Internet表示层

Pet Store案例分析

  我们将使用Java Pet Store作为案例来分析如何为J2EE应用程序添加Backbase RIA前端。Java Pet Store Demo是Sun Microsystems提供的一个示例应用程序,其目的是为了演示如何使用Java 2 Platform, Enterprise Edition(J2EE)构建Web应用程序(详情请参见http://java.sun.com/developer/releases/petstore)。

  Java Pet Store是业内一个著名的参考应用程序(pet store还有.NET和Flash版本)。由于以下两个原因,它成为为J2EE应用程序添加基于Ajax的RIA前端的完美案例:

  • Java Pet Store是一个完整的Web应用程序。

    Sun设计Pet Store的目的是演示所有常见的Web应用程序功能。通过使用Pet Store作为案例,我可以说明为J2EE应用程序添加RIA层的所有方面。

    作为一个典型的在线商店,它包含以下功能:

    • 浏览产品类别。
    • 在购物车中添加和删除物品。
    • 填写订单表单。
    • 提交订单。
  • Java Pet Store有一个传统的HTML前端。

    使用RIA前端的目的是提供更简单和响应更灵敏的GUI,以及通常更为丰富的Web用户体验。我将说明,如何通过Backbase RIA技术极大地改进应用程序的前端,同时无需对后端和总体系统需求做任何修改。

    Pet Store的RIA前端将通过以下方式改善可用性:

  • 把前端变为一个单页面的界面(SPI)。
  • 提供更先进的UI控件(如模态弹出式菜单)。
  • 使用可视化效果(例如,把宠物放入购物车)。
  • 更加有效地利用电脑屏幕的操作区域。

RIA Pet Store前端

  在这一节中,我将讨论经过改进的新Pet Store RIA前端。

  下面的两个屏幕快照演示了前端的改进。要获得对Backbase RIA前端更直观的感受,请访问http://www.backbase.com/xmlserver上的在线演示,或者到http://www.backbase.com/download下载Backbase社区版本。

下面两个图对两个前端进行了可视化的比较。图2显示的是原来静态的多页面HTML前端。图3显示的是新的Backbase SPI前端:

图2. 原始HTML前端

图3. 新Backbase前端

  Backbase为创建丰富的单页面Web界面提供了许多可能性。下面列出了一些Pet Store所使用的例子。

  • 选项卡式的单页面浏览

    在Web界面上,不同的动物种类(狗、猫等等)被表示为不同的选项卡。点击一个选项卡就会打开相应的类别,显示可供出售的宠物。

    在Backbase SPI中,无需刷新页面就可以打开选项卡。BPC只从服务器请求所需的数据,然后更新客户端的视图。SPI机制可以极大地缩短响应时间,让客户随心所欲地在类别之间来回穿梭。

  • 活动的多功能界面

    界面有三个主要功能——类别浏览、购物车和页面引导历史记录,它们在界面上都是一直可见的。因此,购物者总是能够查看购物车的当前内容或最近看过的宠物的记录。

    这些功能是高度同步的:浏览一个宠物时,历史记录将自动更新为在记录中显示该宠物。定购一个宠物时,它将被添加到购物车中。上述一切都发生在客户端的一个页面上(例如,无需重新加载页面就可以更新界面的各个部分)。

  • 界面变化的流畅可视化效果

    进行浏览时,客户将会看到不断变化的界面视图。例如,他可以按照价格和名称对宠物进行排序。界面需要根据新的排列顺序显示更新以后的宠物清单。

    在Backbase RIA前端中,以前的视图被使用可视化效果的新视图所代替,新视图向最终用户显示什么正在改变。图4说明了如何通过流畅的定位效果,把按名称排列的顺序转变为按价格排列的顺序:

    图4.类别视图的排列顺序转换

  • 用于提高转换速度的信息栏验证

  为了执行购买,购买者必须在一份表单中填入个人详细信息。Backbase极大地简化了这个购买过程,通过客户端的信息栏验证提供即时的反馈,并在提供所有数据的过程中提供逐步的指南和概述。

  图5显示了在填写表单的第一个步骤中,对于e-mail地址信息栏的验证。当购买者填写下一栏时,就会提供即时的反馈。

图5. 信息栏验证—e-mail栏

Backbase RIA Pet Store的架构

  增强Pet Store(或其他任何Web应用程序)的前端时,我们将继续依赖于以下两条架构基本原则:

  • 最终用户仍然使用标准的Web浏览器访问Pet Store,无需添加任何插件。
  • 由J2EE业务逻辑和数据组成的整个后端保持不变。

  现有的后端在开发期间是完全孤立的,而且不会改变,这个事实对于架构师和IT管理人员十分有利。通过一个规整的、模块化的架构,他们将能够控制风险和成本,同时显著提高Web应用程序的用户友好性。

  Backbase的富表示层技术由两个模块组成,它们将被加入到架构中。在客户端,BPC管理着SPI,并通过异步响应事件来处理与最终用户之间的交互。在服务器端,Backbase XML Server这个灵活的XML管道可以连接到任意服务器端的数据源,包括Web服务、文件、数据库或本地Java对象。图6说明了BPC和BXS如何共同为RIA提供一个声明式的、基于XML的端到端表示层。

图6. 声明式的端到端表示层

Backbase表示客户端

  BPC是一个基于Ajax的GUI引擎,它运行在标准的Web浏览器中。运行时,BPC被加载到浏览器中,然后它会接收BXML代码,构造对应的B树,并不断地把这种表示转换为浏览器所呈现的DOM树。图7说明了运行时转换过程。

图7. BPC运行时

Backbase XML

  Backbase XML (BXML)是XHTML的扩展。开发人员通过创建BXML应用程序来开发富前端,包括BXML标签、标准的XHTML和CSS。BXML是一种声明性语言,它包含了XHTML中所没有的标签(B标签)

  BXML包含用于下列用途的标签:

  • 定义屏幕分区()
  • 交互式客户端控制()
  • 处理标准的用户交互事件(onClick)
  • 处理高级的用户交互事件(拖放和调整大小)
  • 管理客户端状态
  • 处理可视化效果(使修改任意CSS属性的过程动画化)
  • 数据绑定
  • 使用XSLT的一个子集进行客户端转换

用于J2EE的Backbase XML Server

  Backbase XML Server (BXS)是一个服务器端的引擎,用于把BPC链接到任意J2EE后端。和BPC一样,BXS是完全基于XML的,其编程是声明性的。它使用一种XML管道架构,提供功能强大的服务器端转换和聚合。

  BXS附带一些用于访问最常用的数据源(包括Web服务、数据库、文件系统和本地Java对象)的开箱即用任务。我们使用Backbase标签对从这些源获得的数据进行聚合,然后使用XSLT进行转换。结果以无格式XML数据或BXML表示代码的形式返回给BPC。

  BXS还提供一些应用服务,包括身份验证、授权、日志记录和用户跟踪。图8显示了BXS的总体架构。

图8. BXS架构

Eclipse开发工具

  为了让J2EE开发人员可以只使用一种开发工具就能创建完整的Web应用程序,包括富前端,Backbase提供了一个Eclipse插件。如图9所示,该插件提供了在Eclipse中突出显示语法和Backbase标签代码自动完成的功能。

图9. Backbase Eclipse插件

  注意:Eclipse的可视化拖放开发插件还处在开发阶段。

部署到BEA WebLogic

  BXS是一个与标准兼容的J2EE应用程序,可以将其部署到任何J2EE应用服务器上。图10显示了如何使用WebLogic控制台把BXS部署到BEA WebLogic Server

图10. 把BXS部署到BEA WebLogic

实现Backbase RIA Pet Store

  下面的顺序图包括更多详细信息,可以帮助您更好地理解如何实现Backbase pet store。该顺序图显示了在应用程序的初始化加载期间BPC与BXS之间的交互,如图11所示,它包括以下4个步骤:

  • 初始化:用户在浏览器中输入宠物商店的URL;对BPC进行初始化。
  • 应用程序布局:触发正在构造的事件;BPC构建整体应用程序布局;宠物类别被加载并显示在选项卡中。
  • 默认数据:默认情况下加载狗的类别;最初显示8张狗的图片,并带有向前/向后和排序功能。

  用户交互:用户点击Next按钮便可显示编号从9到16的狗图片。

图11.顺序图:富商店前端

  • 初始化

    从用户在浏览器中输入宠物商店的URL开始,这将导致从Web服务器请求一个索引页面。

    索引页面包含用于实例化BPC的代码。索引页面是XHTML和BXML标签的结合,包含负责启动富前端的初始化事件处理程序。

    BPC初始化代码:

    <...>
    
    <...>
    
      
    
        <s:loading>
    
          <div style="position:absolute;width:20%;
    
                         top: 50px;left: 35%;">
    
            <center>Please wait while loading...
    
            </center>
    
          </div>
    
        </s:loading>
    
        <...>
    
        <!-- Include petshop specific behaviors -->
    
        <s:include b:url="petshop.xml"/>
    </pre></li> 
       <li>应用程序布局 <p>加载页面之后,BPC就会处理正在构造的事件,以便开始构建总体的应用程序布局。</p><p>应用程序布局由几个面板组成,它们将屏幕划分为几个部分。顶行有一个固定高度的宠物商店徽标,接下来的主行是实际的商店,大小可以调整。主行分为两列,左边一列是产品类别,右边一列是购物车和历史记录。</p>产品类别使用选项卡式的导航,每个宠物类别一个选项卡。这些选项卡是动态构造的,具体过程是通过BXS从一个XML文件加载类别,然后通过一个客户端模板把这些类别转换为选项卡,该转换模板的BPC代码如下: <pre class="code"><s:task b:action="transform"
    
        b:stylesheet="b:xml('categories')"
    
        b:xmldatasource="b:url('categories.xml')"
    
        b:destination="id('main-content')" 
    
        b:mode="aslastchild" />
    
    </pre><p>下面是用于从文件系统把类别加载为XML的BXS代码:</p><pre class="code"><bsd:pipeline equals="categories.xml"
    
                                     access="public">
    
        <bsd:readxml input="file:/categories.xml"/>
    
    </bsd:pipeline>
    </pre><p>下面是用于创建选项卡式导航的BPC客户端模板:</p><pre class="code"><b:tabrow>
    
      <s:for-each b:select="categories/category">
    
        <b:tab>
    
          <s:attribute b:name="b:followstate">
    
            id('<s:value-of b:select="name"/>')
    
          </s:attribute>
    
          <s:value-of b:select="name"/>
    
        </b:tab>
    
      </s:for-each>
    
    </b:tabrow>
    </pre><p>所有BPC代码(用蓝色表示)都在客户端执行,而所有BXS代码(用红色表示)都在服务器端执行。注意,在本例中,我选择了在客户端进行转换,因为数据集很小。下面我会给出一个在服务器端转换的例子。两种转换都要用到XSLT语法。Backbase的一个强大功能就是,前端开发人员可以根据情况选择在客户端还是服务器端处理表示逻辑。语法似乎允许轻松地把代码从客户端移到服务器端,或者反之。</p><p>以上的代码示例应该可以使您了解到,借助于Backbase,Ajax编程变得多么轻松。结合了DHTML的声明性方法则更容易上手。使用附加的B标签不仅可以使界面更加丰富,而且可以使开发人员的效率更高。诸如<b:tab>之类的单个标签可以代替多行HTML和JavaScript代码,而且保证可以用于各种浏览器。</p></li> 
       <li>默认数据 <p>显示商店前端时,默认情况下显示的是狗的类别。对于本案例,BXS负责此项操作。BXS从一个Web服务获得数据,将其放入缓存,然后生成BXML表示代码,再把这些表示代码发回给BPC。服务器还通过一项配置设置确定一个页面上可以显示的动物数量,并根据需要加入了Next和Previous按钮。最后,服务器还提供了按照名称或价格进行排序的功能。</p><p>下面的代码片断演示了服务器功能。外部管道products-overview.xml首先调用catalog.xml子管道。该子管道要么返回缓存中的宠物信息,要么调用另一个子管道catalog.ws。在缓存没有命中的情况下,内部管道catalog.ws会从Web服务获取宠物信息。</p><p>外部管道获得宠物信息,然后进行XSLT转换,从而以4x2表格显示这些信息,并带有Next和Previouse按钮,然后把BXML格式的代码发回给BPC。BPC呈现它接收到的BXML。</p><p>有3个嵌套的BXS管道分别用于从Web服务获取数据、将其放入缓存,以及通过XSLT转换创建BXML输出: </p><pre class="code"><bsd:pipeline equals="products-overview.xml"
    
                                  access="public"/>
    
      <bsd:callpipe pipe="catalog.xml"/>
    </pre><pre class="code"><bsd:pipeline equals="catalog.xml" access="private">
    
      <bsd:exist field="{global:petstore-catalog}">
    
        <bsd:readxml>{global:petstore-catalog}
    
        </bsd:readxml>
    
        <bsd:otherwise>
    
          <bsd:callpipe pipe="catalog.ws"/>
    </pre><pre class="code"><bsd:pipeline equals="catalog.ws"
    
                                   access="private">
    
      <bsd:try>
    
        <bsd:callws wsdl="PetstoreCatalog.wsdl"
    
                                   method="getAll"/>
    
        <bsd:callpipe pipe="strip-root-ns"/>
    
        <bsd:catch>
    
          <bsd:xslt xslt="error.xslt">
    
            <bsd:param name="errormsg">{error:message}
    
            </bsd:param>
    
            <bsd:param name="errorsrc">{error:source}
    
            </bsd:param>
    
          </bsd:xslt>
    
        </bsd:catch>
    
      </bsd:try>
    
    </bsd:pipeline>
          <bsd:writexml>{global:petstore-catalog}
    
          </bsd:writexml>
    
        </bsd:otherwise>
    
      </bsd:exist>
    
    </bsd:pipeline>
    <bsd:extractfilter xpath=
    
      "category[name/text()='{requestparam:category}']"/> 
    
      <bsd:xslt xslt="products/products-overview.xslt">
    
        <bsd:param name="category">
    
          {requestparam:category}
    
        </bsd:param>
    
        <bsd:param name="stepsize">
    
          {global:stepsize}
    
        </bsd:param>
    
        <bsd:param name="sortorder">
    
          {requestparam:sortorder}
    
        </bsd:param>
    
        <bsd:param name="sortfield">
    
          {requestparam:sortfield}
    
        </bsd:param>
    
      </bsd:xslt>
    
    </bsd:pipeline>
    </pre><p>代码示例再次清楚地说明了,借助于Backbase,以声明性的方式创建Ajax前端是多么容易的事情。例如,只要使用带有一个WSDL引用作为属性的<bsd:callws>标签,就可以调用一个Web服务。</p></li> 
       <li>用户交互 <p>现在,最终用户可以与宠物商店类别进行交互。可以使用Next或Previous按钮或者排序功能在动物类别中进行浏览。或者,只要点击一下相应的选项卡,就可以转到另一个类别中。</p><p>BPC和BXS对这种交互进行了无缝处理。显示已经在客户端上的数据时,无需与服务器进行任何通信。例如,购物者已经从狗类别转到了猫类别,然后再回到狗类别。客户端仍然拥有狗类别的数据,所以可以马上显示出来,这使得购物体验变得更完美。其他的类别需要从BXS获取。BXS要么立即从其缓存返回它们,要们访问Web服务来获得新数据。</p></li> 
      </ul> 
      <p>  为了详细说明Backbase Ajax宠物商店的实现,我把重点放在了初始化的步骤上。完整的宠物商店(可以从<font color="#002c99">http://www.backbase.com/xmlserver</font>下载)还包括以下功能:</p> 
      <ul> 
       <li> 
        <ul> 
         <li>商店前端 
          <ul> 
           <li>初始化。 </li> 
           <li>使用从文件加载的宠物类别创建选项卡。 </li> 
           <li>默认情况下从Web服务加载Dog选项卡。 </li> 
           <li>通过缓存浏览Dog并对其进行排序。 </li> 
          </ul></li> 
         <li>宠物详细情况 
          <ul> 
           <li>使用跟踪聚合来自缓存和数据库的宠物详细情况。 </li> 
           <li>创建可视化历史记录。 </li> 
          </ul></li> 
         <li>购物车 
          <ul> 
           <li>使用跟踪添加到购物车。 </li> 
          </ul></li> 
         <li>登录 
          <ul> 
           <li>登录和身份验证。 </li> 
          </ul></li> 
         <li>退出 
          <ul> 
           <li>退出和授权。 </li> 
           <li>确认。 </li> 
          </ul></li> 
        </ul></li> 
      </ul> 
      <p><strong>结束语</strong></p> 
      <p>  最近有很多人都在研究Ajax。Ajax的优点已经在实践中得到了证明。定制Ajax的缺点在于它的复杂性和不兼容性。大量客户端JavaScript的出现意味着开发人员很可能陷入到浏览器实现差别的泥潭中去。另外,JavaScript这种语言不适用于复杂的应用程序。</p> 
      <p>  为了开发易于管理的、可伸缩的和适应未来变化的Ajax解决方案,开发人员所需使用的工具应该具有比定制部件开发更多的功能。Backbase Ajax软件提供了一个功能全面的客户端GUI管理引擎(Backbase Presentation Client)、一个灵活的服务器端XML管道(Backbase XML Server)和一种声明性的基于标签的UI语言,BXML(Backbase eXtensible Markup Language)。该方法具有几个优点。</p> 
      <p>  首先,Backbae易于使用。它的声明性语言水平地扩展了DHTML;它完全对开发人员隐藏了浏览器兼容性的问题;而且它带有一套开发和调试工具。</p> 
      <p>  其次,Backbase是一个功能全面的Ajax GUI管理系统。Backbase的先进性大大超过了其他Ajax框架,它完全把重点放在提供一个部件库或客户端-服务器通信(如DWR)上。在控件和客户端-服务器通信的基础上,Backbase提供了用于如下用途的标签:提供电影效果,随需应变的数据加载,数据绑定和客户端的数据转换,对于Back和Forward按钮的支持,完善的GUI状态管理,等等。所有这些功能对于目前的Ajax Web应用程序来说都是必需的。</p> 
      <p>  最后,Backbase是以兼容的方式提供所有客户端和服务器端的功能。用户可以使用富Ajax前端扩展现有的应用程序,同时无需修改后端。对于整个表示层来说,它的架构是时新的、模块化的,而且它基于XML。</p> 
      <p><strong>参考资料</strong></p> 
      <ul> 
       <li><font color="#002c99">Java Pet Store Demo</font>。 </li> 
       <li><font color="#002c99">Ajax: A New Approach to Web Applications</font>,作者Jesse James Garrett(Adaptive Path,2005年2月)。 </li> 
      </ul> 
      <p><strong>原文出处</strong></p> 
      <p>A Backbase Ajax Front-end for J2EE Applications</p> 
      <p><font color="#002c99">http://dev2dev.bea.com/pub/a/2005/08/backbase_ajax.html</font> </p> 
      <div class="dot001">  
      </div> 
      <table width="100%" border="0"> 
       <tbody> 
        <tr valign="bottom"> 
         <td colspan="2" height="20"> <span class="h2b">作者简介</span></td> 
        </tr> 
        <tr> 
         <td valign="top" align="center"></td> 
         <td><font color="#002c99">Mark Schiefelbein</font>自2005年2月以来一直担任Backbase的产品管理主管。Mark极大地推动了Backbase Rich Internet Application的全球推广。 </td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
    </div>
                                </div>
                            </div>
                        </div>
                        <!--PC和WAP自适应版-->
                        <div id="SOHUCS" sid="1187955553436016640"></div>
                        <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                        <!-- 文章页-底部 动态广告位 -->
                        <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                    </div>
                    <div class="col-md-3">
                        <div class="row" id="ad">
                            <!-- 文章页-右侧1 动态广告位 -->
                            <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                            </div>
                            <!-- 文章页-右侧2 动态广告位 -->
                            <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                            </div>
                            <!-- 文章页-右侧3 动态广告位 -->
                            <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                                <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="container">
            <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(AJAX)</h4>
            <div id="paradigm-article-related">
                <div class="recommend-post mb30">
                    <ul class="widget-links">
                        <li><a href="/article/1903035030670733312.htm"
                               title="$.ajax()方法详解" target="_blank">$.ajax()方法详解</a>
                            <span class="text-muted">小二爱编程·</span>
    <a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                            <div>jquery中的ajax方法参数总是记不住,这里记录一下。目录1.url2.type3.timeout4.async5.cache6.data7.dataType8.beforeSend9.complete10.success11.error12.contentType13.dataFilter14.dataFilter15.global16.ifModified17.jsonp18.userna</div>
                        </li>
                        <li><a href="/article/1902757292042940416.htm"
                               title="01.AJAX 概念和 axios 使用" target="_blank">01.AJAX 概念和 axios 使用</a>
                            <span class="text-muted">Lv547</span>
    <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/AJAX/1.htm">AJAX</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>01.AJAX概念和axios使用1.什么是AJAX?使用浏览器的XMLHttpRequest对象与服务器通信浏览器网页中,使用AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数组以后,展示到网页2.什么是服务器?可以暂时理解为提供数据的一台电脑3.为何学AJAX?以前我们的数据都是写在代码里固定的,无法随时变化现在我们的数据可以从服务器</div>
                        </li>
                        <li><a href="/article/1902752749120974848.htm"
                               title="深入理解Ajax原理" target="_blank">深入理解Ajax原理</a>
                            <span class="text-muted">lfsf802</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF/1.htm">前端技术</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/xmlhttprequest/1.htm">xmlhttprequest</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/asynchronous/1.htm">asynchronous</a>
                            <div>1.概念ajax的全称是AsynchronousJavaScriptandXML,其中,Asynchronous是异步的意思,它有别于传统web开发中采用的同步的方式。2.理解同步异步异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。举个例子来说同步和异步,同步就好像我们买楼一次性支付,而异步就是买楼分期付款。所以</div>
                        </li>
                        <li><a href="/article/1902568357689880576.htm"
                               title="JQ实现异步请求的几种方法" target="_blank">JQ实现异步请求的几种方法</a>
                            <span class="text-muted">CsharpDev-奶豆哥</span>
    <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>在jQuery中,实现异步请求(AJAX)有多种方法。以下是几种常见的实现方式及其示例代码。1.$.ajax()方法$.ajax()是jQuery中最通用的AJAX方法,支持高度定制化。示例$.ajax({url:'你的请求地址',//请求URLmethod:'GET',//请求方法dataType:'json',//预期返回的数据类型success:function(response){cons</div>
                        </li>
                        <li><a href="/article/1902560294362738688.htm"
                               title="Promise 原理与实战:从基础到高级的完整教程" target="_blank">Promise 原理与实战:从基础到高级的完整教程</a>
                            <span class="text-muted">D.eL</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%8C%96%E4%BB%8E%E6%97%A0/1.htm">前端工程化从无</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E9%80%9A/1.htm">通</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>一、前言:为什么会出现Promise?Promise的重要性我认为没有必要多说,概括起来就是五个字:必!须!得!掌!握!。而且还要掌握透彻,在实际的使用中,有非常多的应用场景我们不能立即知道应该如何继续往下执行。最常见的一个场景就是ajax请求,通俗来说,由于网速的不同,可能你得到返回值的时间也是不同的,这个时候我们就需要等待,结果出来了之后才知道怎么样继续下去。letxhr=newXMLHttp</div>
                        </li>
                        <li><a href="/article/1902326726910865408.htm"
                               title="deepseek 对于 Web 前端过去,现在,未来的看法!称未来可能不叫前端工程师..." target="_blank">deepseek 对于 Web 前端过去,现在,未来的看法!称未来可能不叫前端工程师...</a>
                            <span class="text-muted">CoderBin_</span>
    <a class="tag" taget="_blank" href="/search/%E4%B8%8Edeepseek%E7%9A%84%E5%AF%B9%E8%AF%9D/1.htm">与deepseek的对话</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                            <div>一、你对于过去的web前端有什么看法?对早期的Web前端开发(大致在2000年代至2010年代初),可以总结出以下几个关键看法:1.技术原始,但充满探索精神基础技术简单:主要依赖HTML、CSS和原生JavaScript,缺乏现代框架和工具链的支持。兼容性噩梦:不同浏览器(尤其是IE6/7)的渲染差异极大,开发者需要大量Hack代码(如条件注释、CSS滤镜)来适配。创新萌芽:AJAX(2005年)</div>
                        </li>
                        <li><a href="/article/1901983305918640128.htm"
                               title="Axios和ajax的异同点详解以及在express后端使用redirect重定向对ajax无效的原因!" target="_blank">Axios和ajax的异同点详解以及在express后端使用redirect重定向对ajax无效的原因!</a>
                            <span class="text-muted">char56789</span>
    <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/reactjs/1.htm">reactjs</a>
                            <div>问题描述:在express中使用redirect进行重定向时,页面显示是301状态码,页面不跳转!(说明在express中不能使用redirect进行重定向)究其原因:使用ajax后,后端无法直接让前端进行页面跳转。需要前端进行状态码和后端返回的数据的判断,然后前端自己进行跳转页面。因为ajax(axios只是对ajax进行了封装,ajax在此处的特性对axios也适用)是一个完整的请求和回掉的过</div>
                        </li>
                        <li><a href="/article/1901916599753961472.htm"
                               title="前端面试:ajax 和 xhr 是什么关系?" target="_blank">前端面试:ajax 和 xhr 是什么关系?</a>
                            <span class="text-muted">returnShitBoy</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a>
                            <div>在前端开发中,AJAX(AsynchronousJavaScriptandXML)和XHR(XMLHttpRequest)是两个密切相关但有些不同的概念。以下是对这两者的详细解释及其关系:1.AJAX定义:AJAX是一个用于创建异步web应用程序的技术。它允许网页在不完全重新加载整页的情况下,与服务器交换数据并更新部分网页内容。主要特征:异步操作:AJAX使得页面可以在后台与服务器进行数据交换,用</div>
                        </li>
                        <li><a href="/article/1901579231226294272.htm"
                               title="Ajax原理笔记" target="_blank">Ajax原理笔记</a>
                            <span class="text-muted">小鱼ccd</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                            <div>1.后端如何把数据传给前端?后端通常通过HTTP接口(API)把数据传给前端,一般流程如下:(1)后端提供API接口后端使用SpringBoot开发API,通常返回JSON数据。例如,在Controller层定义一个接口,返回商品列表:@RestController@RequestMapping("/api/products")publicclassProductController{@GetMa</div>
                        </li>
                        <li><a href="/article/1901423401986224128.htm"
                               title="深入探索Ajax技术与应用实践" target="_blank">深入探索Ajax技术与应用实践</a>
                            <span class="text-muted">Javen Fang</span>
    
                            <div>本文还有配套的精品资源,点击获取简介:Ajax技术允许在不刷新整个页面的情况下进行网页内容的局部更新,大大提升了用户体验。文章详细解析了Ajax的核心组件和工作流程,并强调了其在Web开发中的重要性。此外,还探讨了Ajax的优点、应用场景以及在实际开发中需要注意的问题。通过学习Ajax,开发者可以设计出更加动态和高效的网页应用。1.Ajax技术概述和定义Ajax技术概述Ajax技术的核心在于其异步</div>
                        </li>
                        <li><a href="/article/1901412304969330688.htm"
                               title="AJAX PHP:深入理解与实际应用" target="_blank">AJAX PHP:深入理解与实际应用</a>
                            <span class="text-muted">wjs2024</span>
    <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                            <div>AJAXPHP:深入理解与实际应用引言随着互联网技术的不断发展,前端与后端交互变得更加频繁。AJAX(AsynchronousJavaScriptandXML)和PHP(HypertextPreprocessor)作为两种流行的技术,在实现动态网页和应用程序方面扮演着重要角色。本文将深入探讨AJAXPHP的工作原理、应用场景以及实际开发中的注意事项。AJAXPHP概述AJAXAJAX是一种基于Ja</div>
                        </li>
                        <li><a href="/article/1901397799287713792.htm"
                               title="selenium 等待ajax,如何等待Selenium IDE中的所有ajax请求完成?" target="_blank">selenium 等待ajax,如何等待Selenium IDE中的所有ajax请求完成?</a>
                            <span class="text-muted">华西怀</span>
    <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E7%AD%89%E5%BE%85ajax/1.htm">等待ajax</a>
                            <div>我有一阵子没用过IDE。这是我用于WebDriver的。但算法翻译;JavaScript是JavaScript。这就是说,这取决于你的框架。对于角度,我用这个:publicbooleanwaitForAngularToLoad(WebDriverdriver,intwaitTimeInSeconds){WebDriverWaitwait=newWebDriverWait(driver,waitTi</div>
                        </li>
                        <li><a href="/article/1901307252019621888.htm"
                               title="JavaEE系统架构师学习路线(基础篇)" target="_blank">JavaEE系统架构师学习路线(基础篇)</a>
                            <span class="text-muted">淘小五</span>
    
                            <div>大纲:第1阶段(Java程序员)-Java语言基础第2阶段(Java初级软件工程师)-JSP、Servlet、HTML、CSS、JS、Bootstrap、XML、AJAX、MySQL、SQLServer、Oracle第3阶段(Java中级软件工程师)-Struts2、Spring、Hibernate、SpringMVC、Mybatis、Shiro、JVM第4阶段(Java高级软件工程师)-WebS</div>
                        </li>
                        <li><a href="/article/1900790301304352768.htm"
                               title="XMLHttpRequest、Fetch、Axios和AJAX的关系" target="_blank">XMLHttpRequest、Fetch、Axios和AJAX的关系</a>
                            <span class="text-muted">冰镇屎壳郎</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>一、基于http协议用于前后端通信的工具1、XMLHttpRequest(原生JS对象)XMLHttpRequest(XHR)是原生JavaScript对象。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据。特性:浏览器广泛支持功能丰富:可以跟踪请求的状态、支持进度事件、文件上传、同步请求等可同步可异步不支持PromiseAPI2、Fetch(浏览器原生API)(1</div>
                        </li>
                        <li><a href="/article/1900774415688331264.htm"
                               title="前台实时获取数据" target="_blank">前台实时获取数据</a>
                            <span class="text-muted">爱吃虾的五花肉</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                            <div>实现网站实时通信·四种方式,第二三四种方式需要服务器端做操作的写计时器进行Ajax轮询//每秒调用一次http请求setInterval(function(){varxhr=newXMLHttpRequest();xhr.open('POST','url',true);xhr.setRequestHeader('Content-Type','application/json');xhr.send(</div>
                        </li>
                        <li><a href="/article/1900714498755457024.htm"
                               title="前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例" target="_blank">前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例</a>
                            <span class="text-muted">软件工匠师</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例1.AJAX——传统的异步请求1.1基本用法示例1.2AJAX特点2.FetchAPI——现代化请求方案2.1基本用法示例2.2Fetch特点3.Axios——第三方HTTP请求库3.1安装Axios3.2基本用法示例3.3Axios特点4.总结前端请求全面解</div>
                        </li>
                        <li><a href="/article/1900642088417030144.htm"
                               title="前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例" target="_blank">前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例</a>
                            <span class="text-muted">二进制忍者</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例1.AJAX——传统的异步请求1.1基本用法示例1.2AJAX特点2.FetchAPI——现代化请求方案2.1基本用法示例2.2Fetch特点3.Axios——第三方HTTP请求库3.1安装Axios3.2基本用法示例3.3Axios特点4.总结前端请求全面解</div>
                        </li>
                        <li><a href="/article/1900234897813991424.htm"
                               title="使用 AJAX 前后端传递数据" target="_blank">使用 AJAX 前后端传递数据</a>
                            <span class="text-muted">学c真好玩</span>
    <a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                            <div>使用异步操作(ajax)前后端传递数据1、传递对象1.1、jsp文件--%>//创建userinfo对象,具备两个属性username,passwordfunctionuserinfo(username,password){this.username=username;this.password=password;}functionsendAjax1(){//创建对象实例,初始化数据varuser</div>
                        </li>
                        <li><a href="/article/1900233133979136000.htm"
                               title="封装AJAX(带详细注释)" target="_blank">封装AJAX(带详细注释)</a>
                            <span class="text-muted">Rverdoser</span>
    <a class="tag" taget="_blank" href="/search/okhttp/1.htm">okhttp</a>
                            <div>封装AJAX请求是前端开发中常见的需求,可以帮助我们简化代码,提高可重用性。下面我将通过JavaScript(使用XMLHttpRequest对象)和现代JavaScript(使用FetchAPI)两种方式来展示如何封装AJAX请求。1.使用XMLHttpRequest封装AJAXfunctionajax(method,url,data,callback){//创建XMLHttpRequest对象</div>
                        </li>
                        <li><a href="/article/1899857149723471872.htm"
                               title="基于springboot的旅游出行指南" target="_blank">基于springboot的旅游出行指南</a>
                            <span class="text-muted">超级无敌暴龙战士塔塔开</span>
    <a class="tag" taget="_blank" href="/search/Java%E8%AF%BE%E8%AE%BE%E4%B8%8E%E6%AF%95%E8%AE%BE%E8%B5%84%E6%BA%90/1.htm">Java课设与毕设资源</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                            <div>文章目录项目介绍主要功能截图:部分代码展示设计总结项目获取方式作者主页:超级无敌暴龙战士塔塔开简介:Java领域优质创作者、简历模板、学习资料、面试题库【关注我,都给你】文末获取源码联系项目介绍基于springboot的旅游出行指南,java项目。eclipse和idea都能打开运行。推荐环境配置:eclipse/ideajdk1.8mavenmysql前端技术:vue,Ajax,Json后端技术</div>
                        </li>
                        <li><a href="/article/1899790462659653632.htm"
                               title="Struts 2.0核心架构详解与实战应用" target="_blank">Struts 2.0核心架构详解与实战应用</a>
                            <span class="text-muted">赵阿萌</span>
    
                            <div>本文还有配套的精品资源,点击获取简介:Struts2.0是一个广泛使用的JavaWeb框架,基于MVC设计模式,简化了Web应用开发流程。它包含多个关键组件,如Action类、配置文件、拦截器、OGNL表达式语言等,支持国际化、异常处理和Ajax集成。开发者可以通过继承ActionSupport类实现业务逻辑,并利用配置文件定义Action映射和拦截器链。Struts2.0还支持注解配置,提高了开</div>
                        </li>
                        <li><a href="/article/1899714202038235136.htm"
                               title="Java过滤器" target="_blank">Java过滤器</a>
                            <span class="text-muted">淋风沐雨</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                            <div>BWH_Steven的碎碎念javaweb体系只剩ajax和json加maven的讲解了,这段时间我会开始推送算法与数据结构结构的文章,从他们的入门知识到一些很实用的算法了解,亦或我们在java学习中留下的坑,我整理了两张A4纸,日后也打算推送一些大家需要的工具或者资源,暂时学校的事情还是比较多,每晚我都写到很晚,不过我尽最大可能给大家更新,如果你有什么想了解的也可以私信,或者发送邮件和我交流,至</div>
                        </li>
                        <li><a href="/article/1899676770290954240.htm"
                               title="Django解析跨域问题" target="_blank">Django解析跨域问题</a>
                            <span class="text-muted">信阳农夫</span>
    <a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                            <div>跨域问题解决CORS(跨域资源共享,Cross-OriginResourceSharing)是一种跨域访问的机制,可让Ajax实现跨域访问。其实,在服务器的responseheader中,加入“Access-Control-Allow-Origin:*”便可支持CORS,很是的简单,apache/nginx等怎么配置,见参考文档。在Django中,有人开发了CORS-header的middlewa</div>
                        </li>
                        <li><a href="/article/1899662768068423680.htm"
                               title="AJAX请求(axios篇)" target="_blank">AJAX请求(axios篇)</a>
                            <span class="text-muted">码农白衣</span>
    <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86/1.htm">前端知识</a><a class="tag" taget="_blank" href="/search/JS/1.htm">JS</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                            <div>目录一、axios介绍1.概念2.功能3.好处二、axios用法1.安装方法2.GET方法3.POST方法4.执行多个并发请求5.axiosAPI6.请求方法的别名7.async/await异步请求三、axios实例四、总结一、axios介绍1.概念AJAX是“AsynchronousJavaScriptandXML”的缩写,它是一种用于创建交互式网页应用程序的技术。AJAX允许在不重新加载整个网</div>
                        </li>
                        <li><a href="/article/1899595565394620416.htm"
                               title="js 封装ajax方法吗,原生JS封装ajax方法" target="_blank">js 封装ajax方法吗,原生JS封装ajax方法</a>
                            <span class="text-muted">里小咸</span>
    <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E5%B0%81%E8%A3%85ajax%E6%96%B9%E6%B3%95%E5%90%97/1.htm">封装ajax方法吗</a>
                            <div>jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只需要ajax,这时引入jquery库会造成资源浪费,也会显得页面臃肿。这时我们就需要用原生JS写一个ajax函数了。/*封装ajax函数*@param{string}opt.typehttp连接的方式,包括POST和GET两种方式*@param{string}opt.url发送请</div>
                        </li>
                        <li><a href="/article/1899589136151539712.htm"
                               title="ASP.NET站点配置以及VS2008下C#、JavaScript联合调试(Ajax) ----以最短路径Dijstra最短路问题为例" target="_blank">ASP.NET站点配置以及VS2008下C#、JavaScript联合调试(Ajax) ----以最短路径Dijstra最短路问题为例</a>
                            <span class="text-muted">刘一哥GIS</span>
    <a class="tag" taget="_blank" href="/search/%E3%80%8AVS%2FC%2FC%2B%2B%2FC%23%E3%80%8B/1.htm">《VS/C/C++/C#》</a><a class="tag" taget="_blank" href="/search/ASP.NET/1.htm">ASP.NET</a><a class="tag" taget="_blank" href="/search/IIS/1.htm">IIS</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84/1.htm">最短路径</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a>
                            <div>实验任务描述:用VS2008构造ASP.NET站点开发环境;用ASP.NET完成JavaScript开发调试;用Ext3.0.0完成一个简单的树显示站;WebService程序设计,Dijstra最短路Web服务;JavaScript通过Ajax技术调用WebService;一、Windows下WEB共享设置打开你的WINDOWS,鼠标点开“我的电脑”,寻找下你机器的WINDOWS版本信息,如果你</div>
                        </li>
                        <li><a href="/article/1899588127173963776.htm"
                               title="Ajax 封装Ajax函数(含注释)" target="_blank">Ajax 封装Ajax函数(含注释)</a>
                            <span class="text-muted">夏沐_lk</span>
    <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/%E5%B0%81%E8%A3%85%E5%87%BD%E6%95%B0/1.htm">封装函数</a>
                            <div>封装好的Ajax函数/***发送一个AJAX请求*@param{String}method请求方法*@param{String}url请求地址*@param{Object}params请求参数*@param{Function}done请求完成过后需要做的事情(委托/回调)*/functionajax(method,url,params,done){//统一转换为大写便于后续判断method=met</div>
                        </li>
                        <li><a href="/article/1899580179144044544.htm"
                               title="前端(AJAX)学习笔记(CLASS 4):进阶" target="_blank">前端(AJAX)学习笔记(CLASS 4):进阶</a>
                            <span class="text-muted">肥肠可耐的西西公主</span>
    <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                            <div>1、同步代码和异步代码同步代码:浏览器按照书写代码的顺序一行一行去执行代码,逐行执行,需要原地等待结果后,才继续向下执行异步代码:调用后耗时,不阻塞代码继续执行,在将来完成后触发一个回调函数2、回调函数地狱和Promise链式调用概念:在回调函数中嵌套回调函数,从而形成回调函数地狱缺点:可读性差,异常无法捕获,耦合性严重,牵一发动全身promise-链式调用概念:依靠then()方法会返回一个新生</div>
                        </li>
                        <li><a href="/article/1899579044958105600.htm"
                               title="sap关账+策略模式(避免大量if elseif)" target="_blank">sap关账+策略模式(避免大量if elseif)</a>
                            <span class="text-muted">宜昌李国勇</span>
    <a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96/1.htm">代码优化</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                            <div>旧代码@Transactional(rollbackFor=Exception.class)publicAjaxResultpurchaseOrderReceiptOutSourceAfterSapCloseAccountingPeriod(Longid){SysPurorderPostingLogsysPurorderPostingLog=sysPurorderPostingLogMapper.</div>
                        </li>
                        <li><a href="/article/1899436895264370688.htm"
                               title="JavaEE 项目常见错误解决方案" target="_blank">JavaEE 项目常见错误解决方案</a>
                            <span class="text-muted">一弦一柱</span>
    <a class="tag" taget="_blank" href="/search/JavaEE/1.htm">JavaEE</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF/1.htm">常见错误</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a><a class="tag" taget="_blank" href="/search/JSP/1.htm">JSP</a><a class="tag" taget="_blank" href="/search/404/1.htm">404</a>
                            <div>JavaEE项目常见错误解决方案数据库连接JavaBean获取不到数据库字段值或出现意料之外的值业务中出现null或""404NOTFOUNDGET请求中文乱码form表单提交中文乱码最近的实训中,练了一个比较基础的项目,JSP+Servlet+JavaBean,完成两张表的CRUD操作,前端使用Bootstrap和JQuery,交互使用AJAX,IDE选用Eclipse,在时间比较仓促的情况下完</div>
                        </li>
                                    <li><a href="/article/58.htm"
                                           title="多线程编程之理财" target="_blank">多线程编程之理财</a>
                                        <span class="text-muted">周凡杨</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E4%BA%A7%E8%80%85/1.htm">生产者</a><a class="tag" taget="_blank" href="/search/%E6%B6%88%E8%B4%B9%E8%80%85/1.htm">消费者</a><a class="tag" taget="_blank" href="/search/%E7%90%86%E8%B4%A2/1.htm">理财</a>
                                        <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现实生活中,我们一边工作,一边消费,正常情况下会把多余的钱存起来,比如存到余额宝,还可以多挣点钱,现在就有这个情况:我每月可以发工资20000万元 (暂定每月的1号),每月消费5000(租房+生活费)元(暂定每月的1号),其中租金是大头占90%,交房租的方式可以选择(一月一交,两月一交、三月一交),理财:1万元存余额宝一天可以赚1元钱,</div>
                                    </li>
                                    <li><a href="/article/185.htm"
                                           title="[Zookeeper学习笔记之三]Zookeeper会话超时机制" target="_blank">[Zookeeper学习笔记之三]Zookeeper会话超时机制</a>
                                        <span class="text-muted">bit1129</span>
    <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                        <div>首先,会话超时是由Zookeeper服务端通知客户端会话已经超时,客户端不能自行决定会话已经超时,不过客户端可以通过调用Zookeeper.close()主动的发起会话结束请求,如下的代码输出内容 
    Created /zoo-739160015 
    CONNECTEDCONNECTED 
    .............CONNECTEDCONNECTED 
    CONNECTEDCLOSEDCLOSED 
    </div>
                                    </li>
                                    <li><a href="/article/312.htm"
                                           title="SecureCRT快捷键" target="_blank">SecureCRT快捷键</a>
                                        <span class="text-muted">daizj</span>
    <a class="tag" taget="_blank" href="/search/secureCRT/1.htm">secureCRT</a><a class="tag" taget="_blank" href="/search/%E5%BF%AB%E6%8D%B7%E9%94%AE/1.htm">快捷键</a>
                                        <div>ctrl + a : 移动光标到行首ctrl + e :移动光标到行尾crtl + b: 光标前移1个字符crtl +&nbsp;f: 光标后移1个字符crtl +&nbsp;h&nbsp;: 删除光标之前的一个字符ctrl + d :删除光标之后的一个字符crtl + k :删除光标到行尾所有字符crtl +&nbsp;u : 删除光标至行首所有字符crtl + w:&nbsp; 删除光标至行首</div>
                                    </li>
                                    <li><a href="/article/439.htm"
                                           title="Java 子类与父类这间的转换" target="_blank">Java 子类与父类这间的转换</a>
                                        <span class="text-muted">周凡杨</span>
    <a class="tag" taget="_blank" href="/search/java+%E7%88%B6%E7%B1%BB%E4%B8%8E%E5%AD%90%E7%B1%BB%E7%9A%84%E8%BD%AC%E6%8D%A2/1.htm">java 父类与子类的转换</a>
                                        <div>&nbsp; &nbsp; 最近同事调的一个服务报错,查看后是日期之间转换出的问题。代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象。报java.lang.ClassCastException。 
    &nbsp; 
    &nbsp; &nbsp; 代码: 
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
                                    </li>
                                    <li><a href="/article/566.htm"
                                           title="可视化swing界面编辑" target="_blank">可视化swing界面编辑</a>
                                        <span class="text-muted">朱辉辉33</span>
    <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a>
                                        <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天发现了一个WindowBuilder插件,功能好强大,啊哈哈,从此告别手动编辑swing界面代码,直接像VB那样编辑界面,代码会自动生成。 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先在Eclipse中点击help,选择Install New Software,然后在Work with中输入WindowBui</div>
                                    </li>
                                    <li><a href="/article/693.htm"
                                           title="web报表工具FineReport常用函数的用法总结(文本函数)" target="_blank">web报表工具FineReport常用函数的用法总结(文本函数)</a>
                                        <span class="text-muted">老A不折腾</span>
    <a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8%E5%B7%A5%E5%85%B7/1.htm">web报表工具</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E8%BD%AF%E4%BB%B6/1.htm">报表软件</a><a class="tag" taget="_blank" href="/search/java%E6%8A%A5%E8%A1%A8/1.htm">java报表</a>
                                        <div>文本函数 
    CHAR 
    CHAR(number):根据指定数字返回对应的字符。CHAR函数可将计算机其他类型的数字代码转换为字符。 
    Number:用于指定字符的数字,介于1Number:用于指定字符的数字,介于165535之间(包括1和65535)。 
    示例: 
    CHAR(88)等于“X”。 
    CHAR(45)等于“-”。 
    &nbsp; 
    CODE 
    CODE(text):计算文本串中第一个字</div>
                                    </li>
                                    <li><a href="/article/820.htm"
                                           title="mysql安装出错" target="_blank">mysql安装出错</a>
                                        <span class="text-muted">林鹤霄</span>
    <a class="tag" taget="_blank" href="/search/mysql%E5%AE%89%E8%A3%85/1.htm">mysql安装</a>
                                        <div>[root@localhost ~]# rpm -ivh MySQL-server-5.5.24-1.linux2.6.x86_64.rpm&nbsp;Preparing...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #####################</div>
                                    </li>
                                    <li><a href="/article/947.htm"
                                           title="linux下编译libuv" target="_blank">linux下编译libuv</a>
                                        <span class="text-muted">aigo</span>
    <a class="tag" taget="_blank" href="/search/libuv/1.htm">libuv</a>
                                        <div>下载最新版本的libuv源码,解压后执行: 
    ./autogen.sh 
    &nbsp; 
    这时会提醒找不到automake命令,通过一下命令执行安装(redhat系用yum,Debian系用apt-get): 
    # yum -y install automake 
    # yum -y install libtool 
    &nbsp; 
    &nbsp; 
    如果提示错误:make: *** No targe</div>
                                    </li>
                                    <li><a href="/article/1074.htm"
                                           title="中国行政区数据及三级联动菜单" target="_blank">中国行政区数据及三级联动菜单</a>
                                        <span class="text-muted">alxw4616</span>
    
                                        <div>近期做项目需要三级联动菜单,上网查了半天竟然没有发现一个能直接用的! 
    呵呵,都要自己填数据....我了个去这东西麻烦就麻烦的数据上. 
    哎,自己没办法动手写吧. 
    现将这些数据共享出了,以方便大家.嗯,代码也可以直接使用 
    &nbsp; 文件说明 
     
     lib\area.sql -- 县及县以上行政区划分代码(截止2013年8月31日)来源:国家统计局 发布时间:2014-01-17 15:0</div>
                                    </li>
                                    <li><a href="/article/1201.htm"
                                           title="哈夫曼加密文件" target="_blank">哈夫曼加密文件</a>
                                        <span class="text-muted">百合不是茶</span>
    <a class="tag" taget="_blank" href="/search/%E5%93%88%E5%A4%AB%E6%9B%BC%E5%8E%8B%E7%BC%A9/1.htm">哈夫曼压缩</a><a class="tag" taget="_blank" href="/search/%E5%93%88%E5%A4%AB%E6%9B%BC%E5%8A%A0%E5%AF%86/1.htm">哈夫曼加密</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%8F%89%E6%A0%91/1.htm">二叉树</a>
                                        <div>&nbsp;在上一篇介绍过哈夫曼编码的基础知识,下面就直接介绍使用哈夫曼编码怎么来做文件加密或者压缩与解压的软件,对于新手来是有点难度的,主要还是要理清楚步骤; 
    &nbsp; 
    加密步骤: 
    &nbsp;1,统计文件中字节出现的次数,作为权值 
    &nbsp; 
    2,创建节点和哈夫曼树 
    &nbsp; 
    3,得到每个子节点01串 
    &nbsp; 
    4,使用哈夫曼编码表示每个字节 
    &nbsp; 
    </div>
                                    </li>
                                    <li><a href="/article/1328.htm"
                                           title="JDK1.5 Cyclicbarrier实例" target="_blank">JDK1.5 Cyclicbarrier实例</a>
                                        <span class="text-muted">bijian1013</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a><a class="tag" taget="_blank" href="/search/Cyclicbarrier/1.htm">Cyclicbarrier</a>
                                        <div>CyclicBarrier类 
    一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。 
    CyclicBarrier支持一个可选的 Runnable 命令,</div>
                                    </li>
                                    <li><a href="/article/1455.htm"
                                           title="九项重要的职业规划" target="_blank">九项重要的职业规划</a>
                                        <span class="text-muted">bijian1013</span>
    <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                                        <div>一. 学习的步伐不停止&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 古人说,活到老,学到老。终身学习应该是您的座右铭。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 世界在不断变化,每个人都在寻找各自的事业途径。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您只有保证了足够的技能储</div>
                                    </li>
                                    <li><a href="/article/1582.htm"
                                           title="【Java范型四】范型方法" target="_blank">【Java范型四】范型方法</a>
                                        <span class="text-muted">bit1129</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                        <div>范型参数不仅仅可以用于类型的声明上,例如 
    &nbsp; 
    package com.tom.lang.generics;
    
    import java.util.List;
    
    public class Generics&lt;T&gt; {
        private T value;
        public Generics(T  value) {
            this.value = </div>
                                    </li>
                                    <li><a href="/article/1709.htm"
                                           title="【Hadoop十三】HDFS Java API基本操作" target="_blank">【Hadoop十三】HDFS Java API基本操作</a>
                                        <span class="text-muted">bit1129</span>
    <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                        <div>&nbsp; 
    package com.examples.hadoop;
    
    import org.apache.hadoop.conf.Configuration;
    
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoo</div>
                                    </li>
                                    <li><a href="/article/1836.htm"
                                           title="ua实现split字符串分隔" target="_blank">ua实现split字符串分隔</a>
                                        <span class="text-muted">ronin47</span>
    <a class="tag" taget="_blank" href="/search/lua+split/1.htm">lua split</a>
                                        <div>LUA并不象其它许多&quot;大而全&quot;的语言那样,包括很多功能,比如网络通讯、图形界面等。但是LUA可以很容易地被扩展:由宿主语言(通常是C或 C++)提供这些功能,LUA可以使用它们,就像是本来就内置的功能一样。LUA只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从 而适合嵌入在别的程序里。因此在lua中并没有其他语言那样多的系统函数。习惯了其他语言的字符串分割函</div>
                                    </li>
                                    <li><a href="/article/1963.htm"
                                           title="java-从先序遍历和中序遍历重建二叉树" target="_blank">java-从先序遍历和中序遍历重建二叉树</a>
                                        <span class="text-muted">bylijinnan</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                        <div>
    
    public class BuildTreePreOrderInOrder {
    
    	/**
    	 * Build Binary Tree from PreOrder and InOrder
    	 *  _______7______
           /              \
        __10__          ___2
       /      \        /
       4</div>
                                    </li>
                                    <li><a href="/article/2090.htm"
                                           title="openfire开发指南《连接和登陆》" target="_blank">openfire开发指南《连接和登陆》</a>
                                        <span class="text-muted">开窍的石头</span>
    <a class="tag" taget="_blank" href="/search/openfire/1.htm">openfire</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/1.htm">开发指南</a><a class="tag" taget="_blank" href="/search/smack/1.htm">smack</a>
                                        <div>第一步 
    &nbsp;&nbsp;&nbsp; 官网下载smack.jar包 
    &nbsp;&nbsp;&nbsp; 下载地址:http://www.igniterealtime.org/downloads/index.jsp#smack 
    第二步 
    &nbsp;&nbsp;&nbsp; 把smack里边的jar导入你新建的java项目中 
     
    开始编写smack连接openfire代码 
     
    p</div>
                                    </li>
                                    <li><a href="/article/2217.htm"
                                           title="[移动通讯]手机后盖应该按需要能够随时开启" target="_blank">[移动通讯]手机后盖应该按需要能够随时开启</a>
                                        <span class="text-muted">comsci</span>
    <a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8/1.htm">移动</a>
                                        <div>&nbsp;&nbsp;&nbsp; 看到新的手机,很多由金属材质做的外壳,内存和闪存容量越来越大,CPU速度越来越快,对于这些改进,我们非常高兴,也非常欢迎 
     
    &nbsp;&nbsp;&nbsp;&nbsp; 但是,对于手机的新设计,有几点我们也要注意 
     
    &nbsp;&nbsp;&nbsp;&nbsp; 第一:手机的后盖应该能够被用户自行取下来,手机的电池的可更换性应该是必须保留的设计,</div>
                                    </li>
                                    <li><a href="/article/2344.htm"
                                           title="20款国外知名的php开源cms系统" target="_blank">20款国外知名的php开源cms系统</a>
                                        <span class="text-muted">cuiyadll</span>
    <a class="tag" taget="_blank" href="/search/cms/1.htm">cms</a>
                                        <div>内容管理系统,简称CMS,是一种简易的发布和管理新闻的程序。用户可以在后端管理系统中发布,编辑和删除文章,即使您不需要懂得HTML和其他脚本语言,这就是CMS的优点。 
    在这里我决定介绍20款目前国外市面上最流行的开源的PHP内容管理系统,以便没有PHP知识的读者也可以通过国外内容管理系统建立自己的网站。 
    1.&nbsp;Wordpress 
    WordPress的是一个功能强大且易于使用的内容管</div>
                                    </li>
                                    <li><a href="/article/2471.htm"
                                           title="Java生成全局唯一标识符" target="_blank">Java生成全局唯一标识符</a>
                                        <span class="text-muted">darrenzhu</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/uuid/1.htm">uuid</a><a class="tag" taget="_blank" href="/search/unique/1.htm">unique</a><a class="tag" taget="_blank" href="/search/identifier/1.htm">identifier</a><a class="tag" taget="_blank" href="/search/id/1.htm">id</a>
                                        <div>How to generate a globally unique identifier in Java 
     
     
     
    http://stackoverflow.com/questions/21536572/generate-unique-id-in-java-to-label-groups-of-related-entries-in-a-log 
     
     
    http://stackoverflow</div>
                                    </li>
                                    <li><a href="/article/2598.htm"
                                           title="php安装模块检测是否已安装过, 使用的SQL语句" target="_blank">php安装模块检测是否已安装过, 使用的SQL语句</a>
                                        <span class="text-muted">dcj3sjt126com</span>
    <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                        <div>       
    SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern'] 
    SHOW TABLES列举了给定数据库中的非TEMPORARY表。您也可以使用mysqlshow db_name命令得到此清单。 
    本命令也列举数据库中的其它视图。支持FULL修改符,这样SHOW FULL TABLES就可以显示第二个输出列。对于一个表,第二列的值为BASE T</div>
                                    </li>
                                    <li><a href="/article/2725.htm"
                                           title="5天学会一种 web 开发框架" target="_blank">5天学会一种 web 开发框架</a>
                                        <span class="text-muted">dcj3sjt126com</span>
    <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a>
                                        <div>web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的经验写了一个to do list,按照这个清单,一条一条的学习,事半功倍,很快就能掌握 一共25条,即便很磨蹭,2小时也能搞定一条,25*2=50。只需要50小时就能掌握任意一种web框架 
    各类web框架大同小异:现代web开发框架的6大元素,把握主线,就不会迷路 
    建议把本文</div>
                                    </li>
                                    <li><a href="/article/2852.htm"
                                           title="Gson使用三(Map集合的处理,一对多处理)" target="_blank">Gson使用三(Map集合的处理,一对多处理)</a>
                                        <span class="text-muted">eksliang</span>
    <a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/gson/1.htm">gson</a><a class="tag" taget="_blank" href="/search/Gson+map/1.htm">Gson map</a><a class="tag" taget="_blank" href="/search/Gson+%E9%9B%86%E5%90%88%E5%A4%84%E7%90%86/1.htm">Gson 集合处理</a>
                                        <div>转载请出自出处:http://eksliang.iteye.com/blog/2175532 一、概述 
    &nbsp; &nbsp; &nbsp; &nbsp;Map保存的是键值对的形式,Json的格式也是键值对的,所以正常情况下,map跟json之间的转换应当是理所当然的事情。 二、Map参考实例 
    package com.ickes.json;
    
    import java.lang.refl</div>
                                    </li>
                                    <li><a href="/article/2979.htm"
                                           title="cordova实现“再点击一次退出”效果" target="_blank">cordova实现“再点击一次退出”效果</a>
                                        <span class="text-muted">gundumw100</span>
    <a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                        <div>基本的写法如下: 
     
    
    
    document.addEventListener(&quot;deviceready&quot;, onDeviceReady, false);
    			
    function onDeviceReady() {
    	//navigator.splashscreen.hide();
            document.addEventListener(&quot;b</div>
                                    </li>
                                    <li><a href="/article/3106.htm"
                                           title="openldap configuration leaning note" target="_blank">openldap configuration leaning note</a>
                                        <span class="text-muted">iwindyforest</span>
    <a class="tag" taget="_blank" href="/search/configuration/1.htm">configuration</a>
                                        <div>hostname // to display the computer name 
    hostname &lt;changed name&gt; // to change 
    go to: /etc/sysconfig/network, add/modify HOSTNAME=NEWNAME to change permenately 
    dont forget to change /etc/hosts</div>
                                    </li>
                                    <li><a href="/article/3233.htm"
                                           title="Nullability and Objective-C" target="_blank">Nullability and Objective-C</a>
                                        <span class="text-muted">啸笑天</span>
    <a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a>
                                        <div>https://developer.apple.com/swift/blog/?id=25 
    &nbsp; 
    http://www.cocoachina.com/ios/20150601/11989.html 
    &nbsp; 
    http://blog.csdn.net/zhangao0086/article/details/44409913 
    &nbsp; 
    http://blog.sunnyxx</div>
                                    </li>
                                    <li><a href="/article/3360.htm"
                                           title="jsp中实现参数隐藏的两种方法" target="_blank">jsp中实现参数隐藏的两种方法</a>
                                        <span class="text-muted">macroli</span>
    <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a>
                                        <div>在一个JSP页面有一个链接,//确定是一个链接?点击弹出一个页面,需要传给这个页面一些参数。//正常的方法是设置弹出页面的src=&quot;***.do?p1=aaa&amp;p2=bbb&amp;p3=ccc&quot;//确定目标URL是Action来处理?但是这样会在页面上看到传过来的参数,可能会不安全。要求实现src=&quot;***.do&quot;,参数通过其他方法传!//////</div>
                                    </li>
                                    <li><a href="/article/3487.htm"
                                           title="Bootstrap A标签关闭modal并打开新的链接解决方案" target="_blank">Bootstrap A标签关闭modal并打开新的链接解决方案</a>
                                        <span class="text-muted">qiaolevip</span>
    <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a>
                                        <div>Bootstrap里面的js modal控件使用起来很方便,关闭也很简单。只需添加标签&nbsp;data-dismiss=&quot;modal&quot; 即可。 
    可是偏偏有时候需要a标签既要关闭modal,有要打开新的链接,尝试多种方法未果。只好使用原始js来控制。 
    &nbsp; 
    &lt;a href=&quot;#/group-buy&quot; class=&quot;btn bt</div>
                                    </li>
                                    <li><a href="/article/3614.htm"
                                           title="二维数组在Java和C中的区别" target="_blank">二维数组在Java和C中的区别</a>
                                        <span class="text-muted">流淚的芥末</span>
    <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a>
                                        <div>Java代码: 
    &nbsp; 
    public class test03 {
    	public static void main(String[] args) {
    		int[][] a = {{1},{2,3},{4,5,6}};
    		System.out.println(a[0][1]);
    	}
    } 
    &nbsp;运行结果: 
    Exception in thread &quot;mai</div>
                                    </li>
                                    <li><a href="/article/3741.htm"
                                           title="systemctl命令用法" target="_blank">systemctl命令用法</a>
                                        <span class="text-muted">wmlJava</span>
    <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/systemctl/1.htm">systemctl</a>
                                        <div>对比表,以 apache / httpd 为例   任务 旧指令 新指令   使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service   使某服务不自动启动 chkconfig --level 3 httpd off systemctl disable httpd.service   检查服务状态 service h</div>
                                    </li>
                    </ul>
                </div>
            </div>
        </div>
    
    <div>
        <div class="container">
            <div class="indexes">
                <strong>按字母分类:</strong>
                <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                    href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                    href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                    href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                    href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                    href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                    href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                    href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                    href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
            </div>
        </div>
    </div>
    <footer id="footer" class="mb30 mt30">
        <div class="container">
            <div class="footBglm">
                <a target="_blank" href="/">首页</a> -
                <a target="_blank" href="/custom/about.htm">关于我们</a> -
                <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
                <a target="_blank" href="/sitemap.txt">Sitemap</a> -
                <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
            </div>
            <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
    <!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
            </div>
        </div>
    </footer>
    <!-- 代码高亮 -->
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
    <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
    <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
    <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>
    
    
    
    
    
    </body>
    
    </html>