精华内容
下载资源
问答
  • Python用来做Web开发的优缺点,你心里必须要记得这些 技术标签: python 程序员 编程 Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念化。从1991年的第一个版本到成为...

    (转自:https://www.pianshen.com/article/6580697192/)
    Python用来做Web开发的优缺点,你心里必须要记得这些
    技术标签: python 程序员 编程

    Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念化。从1991年的第一个版本到成为开源项目的2.0版本,它已经走了很长一段路,直到今天,它正在聚集一个庞大且专业的社区,该社区正在不断改进技术。
    目前而言一些顶级公司在其技术堆栈中使用Python(例如Instagram)

    Facebook旗下的一个图片社交网站
    Python适合从简单到复杂的各种Web项目。它广泛用于旅行,医疗保健,交通运输,金融等不同领域,用于Web开发和软件测试,脚本编写和生成。

    Python的受欢迎程度与其提供的各种好处有关,例如简单性和优雅性吸引了这些大公司。但是,尽管使用Python进行Web开发有很多优点,但是也有一些缺点,下面一起来看看。

    在这里插入图片描述在这里插入图片描述
    来自TIOBE排行榜
    优点:为什么要选择Python进行Web开发?
    在这里插入图片描述

    Python的优点
    1、易于使用和阅读

    有几个因素可以简化Python在Web开发中的使用:

    低入门门槛 Python与我们日常生活中使用的英语相似。语法的简单性使您可以处理复杂的系统,并确保所有元素之间都具有明确的关系。因此,更多的新手程序员可以学习该语言并更快地加入编程社区。

    良好的可视化 效果通过使用不同的图和图表,可以以易于理解的格式表示数据。它们是可视化呈现和理解数据的有效方法。Web开发公司利用Python库(例如Matplotlib)来可视化数据并创建清晰且易于理解的报告。

    Python非常易于阅读,因此开发人员通常在理解由其他程序员编写的代码时不会遇到任何问题。这可以促使从事同一项目的开发人员之间的通信效率更高。

    2、异步编码

    由于没有死锁或研究争执或任何其他令人困惑的问题,因此使用Python 编写和维护异步代码无需花费太多精力。此类代码的每个单元分别运行,从而使您能够更快地处理各种情况和问题。

    3、较少限制的编程方法

    与其他编码语言(例如Java)相比,Python具有较少限制的编程方法。它具有多种范例,可以支持多种编程风格,包括过程性,面向对象和功能性(命令性)。这使Python成为初创公司的绝佳语言,因为项目可能需要随时更改方法。

    包括:

    快速发展。 Python不仅是发展最快的编码语言之一,还是一种允许快速原型设计和迭代的语言。这使工作更轻松,并且对开发人员而言生产率更高。
    OOP变得更容易。 面向对象的编程(也称为OOP)是一种将不同的行为和属性组织到多个对象和类中的范例。这些类中的每一个都有一个函数,因此,如果代码的某些部分发生错误,则其他部分不会受到影响。在Python中,OOP的操作已大大简化,这使得开发成本更低,更省时。
    丰富的标准库和生态系统。 Python的库具有大量的预编写代码。因此,开发人员无需浪费时间创建基本项目。这些库还允许程序员处理和转换机器学习(ML)中连续数据处理所需的数据。

    4、企业应用集成

    Python是企业软件应用程序的流行选择,这在很大程度上要归功于Python与传统上用于企业开发的其他语言(例如Java,PHP和.NET)的流畅集成。

    Python直接与Java,C ++或C代码进行调用,从而可以对大多数常用协议和数据格式进行大量的过程控制和实现。

    除此之外,它还可以用于组装基础结构的新旧片段,这是复杂移动应用程序中的典型情况。

    5、可以使用Python框架快速进行Web开发

    Python的另一个优点是它具有许多简化开发过程的框架。根据您的工作,可能需要不同的框架。

    下面是4个著名的框架:
    在这里插入图片描述

    4个著名的Python web框架
    Django:此框架非常适合成熟的Web应用程序和中档可扩展项目。它具有内置功能,并允许重复使用代码,对代码的不同组成部分进行一致的修改以及其他简化Web开发的功能。Django可与Oracle SQL,PostgreSQL,MySQL和其他知名数据库完美配合。
    Pyramid:使用此框架,您可以从小规模开始,并根据需要扩展规模。金字塔可以与各种数据库和应用程序一起使用,也可以与插件一起扩展-开发人员可以添加所需的任何功能。当您需要在一项任务中实施各种解决方案时,这很方便。
    TurboGears:TurboGears由Repoze,WebOb和Genshi等几个组件组成,并且基于MVC架构。这对于快速,高效的Web应用程序开发很有用,而且更易于维护。使用此框架,您可以分别使用最小或完整堆栈模式编写小型或复杂的应用程序。
    Flask:该框架的理念是提供一个易于管理的,易于定制的解决方案。Flask将自己定义为一个微框架,最常用于主要优先考虑精益功能的小型解决方案。该框架还用于创建原型。
    6、科学计算库方便

    有各种各样的软件包和库可用于开发科学和数字应用程序,以及工具包(例如VTK 3D和MayaVi),单独的成像库以及许多其他工具。最常用的是:

    5个常见的科学计算库:
    在这里插入图片描述

    SciPy(科学数字图书馆);
    Pandas(数据分析库);
    IPython(命令外壳);
    NumPy(基本数值软件包);
    Natural Language Toolkit (Library For Mathematical And Text Analysis : 用于数学和文本分析的库)。
    7、用于机器学习和AI

    机器学习(ML)和人工智能(AI)技术越来越受到关注,因此越来越多的开发人员正在尝试将它们纳入各种项目中。如果使用正确的语言,这是可能的。

    根据让·弗朗索瓦·普吉,IBM的机器学习部门的代表,Python是ML和AI项目的顶尖语言,许多开发商同意。Python具有高效的ML软件包,用于可视化结果的工具,并且远远超出了数据分析和其他使该应用程序领域受益的功能。

    Python确实是机器学习和人工智能最火热的语言,没有之一。

    最典型的用语在线语音合成,在线语音识别,如果你的项目是建立一个人工智能的web应用,那么Python再适合不过了。

    8、作为应用程序脚本

    由于Python与C,C ++和Java的强大集成,Python可以很方便地用于应用程序脚本编写。从一开始就被设计为可嵌入的,它对于自定义大型应用程序并为其进行扩展非常有用。

    不敢说Python可以代替Lua,不过Python可以和Lua那样被嵌入C/C++中。

    9、软件测试

    Python用于测试自动化。许多QA自动化专家选择Python是因为它具有简单的学习曲线-对于技术背景较为有限的人(强大的社区,清晰的语法和可读性)也非常有用。Python甚至有一个易于使用的单元测试框架(例如,您可以使用它对移动应用程序执行地理位置测试)。

    M年前我在一家路由生产商上班,那时候我看到测试部门用Tcl脚本去测试路由器端口,我当时就觉得很诧异,毕竟Tcl脚本的语法真的很怪异,相比这点,Python的语法真的干净简洁。

    10、在原型制作中使用

    用Python创建原型已被证明是一个快速而简单的过程。编程语言的敏捷性使代码重构变得容易,并且可以将初始原型快速开发为最终产品。

    11、开源

    Python具有开放源代码许可证,该许可证使用户可以轻松访问它,并有助于重新分发和无限制的修改。开发人员可以自由使用该语言并为它的改进做出贡献。

    12、服务器端脚本

    如上所述,使用Python进行服务器端脚本编写的优点之一是其简单的语法,从而大大加快了处理速度。该代码由功能模块及其之间的连接组成,可让您根据用户操作执行程序算法。Python还支持Web开发中所需的图形用户界面。

    13、便携性和交互性

    Python具有动态语义和快速原型制作的出色功能,这要归功于它的交互性和可移植性。它可以轻松地嵌入各种应用程序中,甚至是使用不同编码语言的应用程序。因此,您可以轻松修复新模块并扩展Python的核心词汇。它可以连接各种组件。难怪它有时被称为“胶水语言”。

    在Web应用程序中使用Python的缺点
    在这里插入图片描述

    尽管Python有很多优点,但是如果您打算在项目中使用这种语言,也要记住它的缺点。

    1、经验较少的开发人员

    当您需要为您创建一个应用程序时,您当然希望最有经验的开发人员来完成这项工作。但是,使用Python并不是那么简单,因为使用这种语言的专家并不多,特别是将它与Java进行比较时。

    2、缺乏真正的多处理器支持(伪线程)

    多重处理是编写应用程序的重要部分。Python确实支持多处理,尽管它可能不如其他语言灵活或方便。编写代码时,这可能会产生某些限制。

    3、速度限制

    Python经常因其速度而受到批评。它是一种解释型脚本语言,由于它使用的翻译代码方法不同,因此它比许多编译后的相对语言(例如C / C ++或Java)相对要慢。但是,某些Python基准测试比C和C ++更快。

    话虽这么说,Python并不是唯一存在速度问题的工具。Ruby,Perl甚至JavaScript的发展速度也相对较慢。

    与速度有关的一些问题已得到解决和优化,因此Python仍然是软件开发团队的首选之一。

    4、对移动开发,没有优势

    对于移动开发来说,这不是一种不好的语言。仅有少数公司为此目的使用它,而更喜欢iOS和Android的本机开发或React Native的开发。同样的原因,您可能也很难招募到拥有Python移动开发经验的开发人员。它在这个领域不如其他技术那么受欢迎。

    5、对于内存密集型任务不理想

    Python是一种以其数据类型的灵活性而著称的语言。这导致相当高的内存消耗,并使其不方便用于占用大量内存的任务。

    6、设计限制

    Python是动态类型的,这意味着它会在应用运行时执行某些任务,否则将以静态类型的语言完成。这对设计施加了一些限制。如果您的设计中加载了元素,则可能会使程序停顿并妨碍顺利运行。

    在为项目考虑使用Python时,您还应该注意的另一件事是,并发和并行性并不是要在Python中完美使用的。因此,设计可能看起来并不像您想要的那样复杂。

    总结思想

    Python使您能够开发清晰,简单的应用程序,这些应用程序很容易从一个小项目移植到功能全面的复杂应用程序。无论您是学习编程的新手程序员还是企业所有者,Python都是许多类型项目的理想选择。

    它被公认为是初创企业最好的编程语言之一,并且很容易理解为什么当您比较并行Python的优势以及初创企业的目的是什么。初创企业一直在寻找确定性并降低风险,它们的资源有限,并且需要增长的空间。另一方面,Python灵活且易于扩展,不需要庞大的团队,可用于构建原型和MVP。

    Python Web开发公司 Django Stars 使用该语言已有很多年了。我们已经完成了各种复杂的项目,并在电子商务,房地产和金融等领域取得了许多成功的例子。这些包括:

    PADI Travel –来自世界各地的潜水员使用的电子商务和旅行预订平台。
    Sindeo –一个房地产平台,提供有关贷方和抵押的信息。
    MoneyPark –瑞士公司,提供有关保险和抵押的个性化财务建议。
    因此,无论您从事哪个领域的工作,Python都值得您关注。它提供了简单的解决方案,而没有不必要的细节,节省了时间,并确保了高度的安全性。

    许多知名公司都使用和信任Python。一些最大和最受信任的全球公司都将Python和Django平台一起使用Python作为主要编码语言。Instagram,Pinterest,Bitbucket和Dropbox是一些使用Python Web开发服务的公司的例子。

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/sdafhkjas/article/details/102589026

    展开全文
  • Ajax的优缺点 IBM Rational Software Delivery Platform桌面产品V7 为了支持新的V7产品,请查阅以下资源: JSF和Ajax:使用Rational Application Developer V7简化了Web 2.0应用程序 IBM Rational ...

    jsf标签<p:ajax>

    Ajax的优缺点

    尽管不是真正的新事物,也不是革命性的,但Ajax技术在过去一两年中已变得非常流行。 许多主要的网站(例如Google,Yahoo!,Amazon和Netflix)都使用它来改善用户体验。 实际上,改善用户体验是Ajax的全部宗旨。

    在过去十年中开发的常规Web应用程序中,用户与浏览器之间以及浏览器与服务器之间的交互是定义明确的且可见的:用户在浏览器中看到一个页面,然后采取行动(从上下文下拉菜单中选择内容,或选中一些复选框),然后通过单击链接或“提交”按钮指示浏览器与服务器进行通信。 浏览器将请求发送到服务器,并在该请求中传递用户的输入。 服务器处理该请求并发送回响应,该响应可以是新页面或相同页面,但是已更新。

    这种Web应用程序现在通常称为Web 1.0。 从用户体验的角度来看,它们有两个明显的弱点:

    • 浏览器和服务器之间的交互是由页面上有限数量的控件(通常仅由链接和按钮)启动的。 在用户选择页面上的复选框或在组合框中标记选择之后,很少会立即通知服务器。
    • 浏览器和服务器之间的交互导致更新整个浏览器窗口。 这通常太慢了,以至于用户不得不等待大量时间才能更新页面。 更糟糕的是,当同一页面被重新加载或刷新时,它通常在浏览器窗口中闪烁。

    新一代的Web应用程序(通常称为Web 2.0)通过使用Ajax技术(对于异步JavaScript和XML也为AJAX)来解决这些薄弱环节。 在Ajax中,浏览器和服务器之间的交互是在后台发生的,用户并未注意到。 它们也比通常的浏览器-服务器交互更具针对性,因为只能将页面的一部分发送给服务器,并且服务器只能返回页面的一部分进行更新。 作为这种方法的结果,几乎可以通过任何事件来启动浏览器与服务器之间的通信,例如组合框或复选框中的选择更改或鼠标指针悬停。 这带来了明显的好处:

    • 通信速度更快,因为传输的数据更少。
    • 用户停留在同一页面上,因为需要更少的页面导航。
    • 重新加载的页面不会闪烁,因为每个Ajax请求只会更新页面的较小区域。

    Ajax背后的想法非常简单:在浏览器中监听事件,向服务器发送后台请求,并在服务器响应时更新页面的一部分。 但是实现可能非常复杂。 它需要对JavaScript™,客户端-服务器通信协议和服务器端代码有深入的了解。 主要浏览器版本之间的差异使开发和调试变得更加棘手。 但是,IBM®Rational®Application Developer版本7发行版提供了开发支持Ajax的Web应用程序所需的一切, 而无需实现所有低级细节。

    Rational Application Developer V7提供:

    • JSF扩展,允许在JavaServer™Framework(JSF)中处理Ajax请求
    • 一个JavaScript™库,可以在主要浏览器的所有最新版本中启动Ajax请求,并通过仅更新页面的一部分来处理服务器响应

    Rational Application Developer V7中Ajax和JSF实现的技术细节不在本文讨论范围之内,但是让我们研究一下如何一起使用这两种技术。

    如何将Ajax与JSF组件一起使用

    将Ajax添加到JSF页面需要四个步骤:

    1. 确定将由Ajax请求更新的页面区域。 在Rational Application Developer V7中,您可以将Ajax与几乎所有面板组件的内容一起使用。 面板的范围从简单的容器(例如<h:panelGroup><h:panelGrid> )到功能丰富的面板(例如菜单( <hx:panelMenu> )和对话框( <hx:panelDialog> )。
    2. 选择要使用的Ajax请求的类型。 Rational Application Developer V7 JSF库中支持三种不同类型的Ajax请求:
      • 相同页面的GET请求( <hx:ajaxRefreshRequest>
      • 相同页面的POST请求( <hx:ajaxSubmitRequest>
      • GET请求另一个页面( <hx:ajaxExternalRequest>
    3. 配置参数以通过Ajax请求传递到服务器。
      • 对于GET请求,您可以在页面上传递各种输入字段的值。
      • 对于POST请求,将提交整个表单。
    4. 确定启动Ajax请求的事件。 这可以是任何客户端JavaScript事件,例如,按钮的onclick ,输入字段的onblur或复选框的onchange

    让我们使用“ Hello,world”类型的应用程序的简单示例逐步完成所有这些步骤。 您将构建一个包含两个字段的页面:输入和输出。 用户在输入字段中跳出之后,您将使用Ajax将用户输入的值发送到服务器,并用问候语更新输出字段。

    设置您的Web项目

    首先,创建一个Web项目(请参见图1 ):

    • 从菜单中选择文件 > 新建 > 项目 > 动态Web项目
    • 在“ 新建项目”向导中:
      1. 输入项目名称(例如, HelloWorld )。
      2. 选择Faces Project配置。
      3. 选择将项目添加到EAR
    • 点击完成
    图1. New Dynamic Web Project屏幕
    图1. New Dynamic Web Project屏幕显示

    要创建一个网页(请参见图2 ):

    • 在“ 项目资源管理器”中右键单击项目名称
    • 从上下文菜单中选择“ 新建” >“ 网页”
    • 在“ 新建网页”向导中,输入页面名称(例如hello )。
    • 点击完成
    图2.新建网页向导
    图2.新建网页向导

    将组件添加到页面

    现在您有了可以使用的页面,接下来将添加组件。 您将在文本字段中使用inputText组件,用户将在其中键入名称,并使用outputText组件显示问候语。 因为要使用Ajax更新outputText ,所以需要将其放在面板组件中。 您将在此页面上使用panelGroup组件。

    要添加组件:

    • 输入组件从面板的“ 增强的Faces组件”抽屉拖到页面上。
    • 将“ 面板组”框组件从面板中拖到“输入”组件下方的页面上。 当提示您输入分组框类型时,选择“ 分组”
    • 输出组件从面板拖到“面板组”框中。

    向面板添加Ajax支持

    要通过Ajax(在本例中为“输出”字段)使面板的内容可更新,您需要将面板标记为“ Ajaxable”,并配置希望用户请求传递到服务器的参数。 (参见图3。

    1. 选择outputText组件,然后切换到Properties视图。
    2. 在“属性”视图中,选择h:panelGroup标记,该标记位于左侧标记导航器中h:outputText标记的正上方。
    3. 选择h:panelGroup标记的Ajax页面。
    4. 单击允许Ajax更新复选框。
    5. 选择Refresh作为Ajax请求类型。
    图3. panelGroup属性
    图3. panelGroup属性

    此示例使用Refresh请求来说明如何与Ajax请求一起传递参数。 或者,“提交”请求将提交整个表单。 在这种情况下,由于示例页面上的表单仅包含一个输入字段,因此根本不需要为Ajax请求配置参数。

    要为Ajax请求配置参数( 图4 ):

    • 选择“ 单击”以在Ajax属性页面上编辑Ajax请求属性 (请参见前面显示的图3 )。
    • hx:ajaxRefreshRequest标签的“ 属性”页面上:
      1. 单击“ 添加参数”以获取要从浏览器发送的参数。
      2. 从组合框中选择Input组件的名称(在本例中为text1 )。
    图4. ajaxRefreshRequest属性
    图4. ajaxRefreshRequest属性

    您已将panelGroup标记配置为由Ajax请求更新,并使用Input字段的值作为请求的参数。 剩下要做的唯一一件事就是使outputText组件使用此参数显示问候语(请参见图5 ):

    • 选择outputText组件。
    • 在“ 值”字段中输入Hello, #{param.text1}
    图5. outputText属性
    图5. outputText属性

    发起Ajax请求

    如果回头看使用Ajax所需的四个步骤 ,您将看到您已经完成了前三个步骤。 现在,您只需要确定将触发Ajax请求的事件。 要在用户跳出输入字段时立即更新问候语,您将在inputText组件上使用onblur事件(请参见图6 ):

    • 选择inputText组件。
    • 切换到快速编辑视图。
    • 在快速编辑视图中:
      1. 在左侧的事件列表中选择onblur事件。
      2. 单击使用预定义的行为复选框。
      3. 选择对指定标记操作的“ 调用Ajax”行为
      4. 选择panelGroup的名称(在本例中为group1 )作为目标。
    图6.快速编辑视图
    图6.快速编辑视图

    现在,您可以保存页面并在服务器上运行它。 当浏览器窗口打开时,您将看到一个输入字段及其下方的“ Hello”文本。 用户在该字段中键入任何内容然后跳出后,问候语将使用用户在输入字段中键入的文本进行更新。 (参见图7。

    图7.在服务器上运行网页
    图7.在服务器上运行网页

    如您所见,您能够使用标准JSF组件构建一个简单而功能强大的Ajax页面,并且绝对没有JavaScript代码。

    接下来,让我们看一个更复杂的例子。

    如何将Ajax添加到现有的JSF应用程序

    考虑一下任何现代电子商务Web应用程序的共同部分:购物车。 如果您曾经在网上购买过任何东西,那么您已经看过了。 典型的购物车显示用户浏览网站时添加到其中的产品的列表,输入字段以更新数量的按钮,进行结帐的按钮等。

    如果要查看各种购物车,您可能会注意到它们至少有两个共同点:

    • 通常有一个“更新”按钮,可根据用户在输入字段中输入的数量重新计算总计,税金和运输成本。
    • 购物车中的每个项目通常都是一个链接,可将用户带到产品详细信息页面。

    这些是我们在本文开头提到的缺点的很好的例子。 仅当用户单击按钮时,购物车才会更新,并且用户必须导航到另一页才能看到商品的详细说明。 使用Ajax技术,可以极大地改善用户的体验,因为可以在更改数量后立即更新总数,并且可以在同一页面(在设计区域或弹出窗口中)显示项目的详细信息。 。

    在本文结尾的“资源”部分中,有一个您可以下载项目,项目演示了如何轻松地将Web 1.0购物车转移到Web 2.0应用程序。 现在,我们将引导您完成该示例应用程序,以便您了解其构建方式以及如何对其进行修改以使用Ajax。

    注意:从现在开始,所有引用(JavaServer Pages™[JSP™]名称,组件ID等)都指向您可以下载的AjaxSample应用程序。 请将AjaxSample.zip文件保存到您的计算机系统,然后使用Project Interchange格式将其导入Rational Application Developer V7。

    购物车:旧方法

    此示例中的购物车使用三个Java™bean:Product,CartItem和ShoppingCart。 您可以在Project Explorer的Java Resources类别下的bean包中找到它们。

    • Product包含有关此网站出售的Product信息:ID,名称,描述,图像和价格。
    • CartItem跟踪购物车中每种产品的数量。
    • ShoppingCart保留购物车清单(产品和数量对); 计算总计,税金和运输成本; 并提供一种基于请求参数中传递的ID来帮助用户查找产品的方法。

    如图8所示, cart.jsp是购物车页面的相当简单的实现。

    图8.购物车
    图8.购物车

    该页面使用dataTable组件显示购物车中的所有项目。 数量列使用inputText字段让用户更改订购量。 用户完成所需的所有修改后,可以单击“重新计算”按钮以更新总计,税金和运输成本。 产品名称也是一个链接,可将用户带到另一个页面product.jsp,以查看产品详细信息。 产品的ID作为参数传递。 (参见图9。

    图9.产品详细信息
    图9.产品详细信息

    购物车:新方法

    在这里, cartajax.jsp是相同的购物车页面,但已使用Ajax进行了重新设计,以改善用户体验。 新的cartajax.jsp( 图10 )与原始的cart.jsp之间存在三个明显的区别:

    • 没有“重新计算”按钮。 一旦用户从输入字段中跳出,总数就会立即更新。
    • 当用户将鼠标指针移到产品名称上方时,将在弹出窗口中显示产品说明。
    • 当用户单击产品链接时,该产品的完整详细信息显示在购物车下方,而无需更新购物车本身。
    图10.带有Ajax的购物车
    图10.带有Ajax的购物车

    让我们看看这种转变是如何发生的。 为了说明目的,此页面使用所有三种Ajax请求。 另外,与本文开头仅使用IDE功能来设置Ajax功能不同,在这里您可以在“源”模式下看到JSF标记。

    摆脱重新计算功能

    您无需使用“重新计算”按钮,而是使用清单1所示的ajaxSubmitRequest标记将包含总计,税额和运费的面板声明为“ Ajaxable”。

    清单1. ajaxSubmitRequest代码
    <h:panelGrid id="totals" styleClass="panelGrid" columns="2" style="text-align:right;">
    	<h:outputText id="text4" styleClass="outputText" value="Sub-total:"></h:outputText>
    	<h:outputText id="textTotalPrice" value="#{cart.totalPrice}" styleClass="outputText">
    		<hx:convertNumber type="currency" />
    	</h:outputText>
    	... other output components ...
    </h:panelGrid> 
    <hx:ajaxRefreshSubmit id="refreshTotals" target="totals"></hx:ajaxRefreshSubmit>

    您在此处使用的是Ajax请求的Submit类型,因此无需传递任何参数,因为将提交整个购物车表单。 这使所有数量输入字段的值可用于服务器端代码。 面板和Ajax标记与ID和target属性相连,在本示例中,这些属性以粗体突出显示( 清单1 )。 一旦用户从输入字段中跳出,总数就会立即更新。 因此,您可以使用inputText组件的onblur事件来发起请求:

    清单2.通过Ajax启动Submit请求的代码
    <h:inputText id="textQuantity1" value="#{varproducts.quantity}" styleClass="inputText" 
    		size="3">
    	<hx:behavior event="onblur" behaviorAction="get" targetAction="totals">
    	</hx:behavior>
    </h:inputText>

    hx:behavior标记是将预定义JavaScript功能附加到JSF组件上的客户端事件的一种非常有效的方法。 在这种情况下,您将在inputText组件上使用onblur事件(事件属性)( hx:behaviorh:inputText的子级),并且您想要对totals组件执行get操作。 在这里, Totals是要更新的面板,而get操作的意思是“获取内容”,因此:使用Ajax更新。

    注意:选择cartajax.jsp ,然后选择“在服务器运行”以查看这些标签在浏览器中的协同工作。

    从表中的任何输入字段中跳出后,附加到onblur事件JavaScript代码就会立即运行。 它在页面上找到Totals组件,验证是否有与其关联的ajaxRefreshSubmit组件,然后通过将表单发送到服务器来发起Ajax POST请求。 服务器响应时,将使用服务器中的新内容更新“总计”面板。

    添加弹出说明

    下一个示例使用无模型的Dialog组件(这也是Rational Application Developer V7中的新组件)来显示购物车中物品的描述。 因为Dialog是一个面板,所以可以使用Ajax来更新其内容,就像之前更新panelGroup和panelGrid组件一样( 清单3 ):

    清单3.使用新的Dialog组件显示产品描述
    <hx:panelDialog type="modeless" id="descriptionPopup" styleClass="panelDialog"
    		style="background-color: #fff9ca" movable="false"
    		align="relative" valign="relative" saveState="false"
    		showTitleBar="false">
    	<h:outputText id="textDescription1d"
    		value="#{cart.selectedProduct.description}"
    		styleClass="outputText">
    	</h:outputText>
    </hx:panelDialog>
    <hx:ajaxRefreshRequest id="showPopup" target="descriptionPopup"	
    	params="$$AJAXROW$$form1:tableEx1:itemid"></hx:ajaxRefreshRequest>

    这与先前的标记非常相似,除了这次您使用的是Refresh类型的Ajax请求。 因此,您需要将一个参数传递给服务器-特别是要查看其说明的购物车商品的ID。 由于项目位于dataTable中,并且JSF仅保留表中每个组件的一个实例,因此必须让服务器端代码知道您要在活动行中使用该组件的值,这意味着该行生成了请求。 为此,将$$AJAXROW$$键放在组件ID之前。

    要在用户将鼠标悬停在某个项目上时显示或隐藏对话框,可以使用Link组件的onmouseoveronmouseout事件,如清单4所示:

    清单4.当用户将鼠标指针悬停在项目上时显示或隐藏对话框的代码
    <h:outputLink id="link1">
    	<h:outputText id="textName1" value="#{varproducts.product.name}"
    			styleClass="outputText">
    	</h:outputText>
    	<hx:behavior event="onmouseover" behaviorAction="get;show"
    			targetAction="form1:descriptionPopup;form1:descriptionPopup"></hx:behavior>
    	<hx:behavior event="onmouseout" behaviorAction="hide"
    			targetAction="form1:descriptionPopup"></hx:behavior>
    </h:outputLink>

    当用户将鼠标指针移到某个项目上时,您希望对话框的内容进行更新( get操作)并希望对话框显示( show操作)。 当鼠标指针不再位于项目上方时,您希望对话框被隐藏( hide动作)。

    在同一页面上显示产品详细信息

    您要做的最终改进是在购物车的同一页上显示产品详细信息。 您已经具有显示项目详细信息的页面:product.jsp。 因此,如果您不得不经历重新设计它的所有工作并在cartajax.jsp中重新实现相似的标签,那将是可耻的。 幸运的是,您可以在第三个Ajax请求类型的帮助下使用现有的JSP文件:外部请求(请参见清单5 ):

    清单5.在同一页面上显示产品详细信息的代码
    <h:panelGrid id="product" width="700" style="margin-top: 20px;"
    		styleClass="panelGrid">
    	<h:outputText id="text8" styleClass="outputText"
    		value="Click on a product to see its details here."
    		style="color: gray; font-size: 10pt">
    	</h:outputText>
    </h:panelGrid>
    <hx:ajaxExternalRequest id="showDetails" target="product"
    		href="product.faces" source="product"
    		params="$$AJAXROW$$form1:tableEx1:itemid">
    </hx:ajaxExternalRequest>

    您可能已经认识到这种模式:面板组件和关联的Ajax标记。 产品panelGrid充当产品详细信息的占位符。 如果用户未选择产品,则仅显示帮助者文本,该文本向用户解释该页面区域的用途。 当用户单击产品时,面板的内容将使用类似于product.jsp文件( href属性)中定义的panelGrid的panelGrid进行更新。

    这次,Link组件的onclick事件启动了Ajax请求,如清单6所示:

    清单6.使用onclick事件启动Ajax请求的代码
    <h:outputLink id="link1">
    	<h:outputText id="textName1" value="#{varproducts.product.name}"
    		styleClass="outputText">
    	</h:outputText>
    	<hx:behavior event="onclick" behaviorAction="get;stop"
    		targetAction="product">
    	</hx:behavior>
    </h:outputLink>

    行为( stop )中的第二个动作是防止事件在浏览器中冒泡。 在这种情况下,您不希望该链接像常规链接一样工作,而只是启动Ajax请求,然后停止处理该事件。

    您需要做的最后一项更改是关于当前所选产品的ID如何传递到服务器。 在购物车的cart.jsp版本中,使用链接导航到另一个页面,您将ID定义为链接参数( 清单7 ):

    清单7.定义为原始购物车中参数中的链接的ID
    <h:outputLink id="link1" value="product.faces">
    	<h:outputText id="textName1" value="#{varproducts.product.name}"
    		styleClass="outputText">
    	</h:outputText>
    	<f:param name="itemid" id="param1" value="#{varproducts.product.id}" />
    </h:outputLink>

    使用Ajax时,您不再具有真正的链接,并且使用Ajax标记的params属性将组件的值与请求一起传递。 因此,您需要创建一个隐藏的输入字段来保存链接旁边的ID,而不是在链接上使用参数,并将该组件用作Ajax参数(请参见清单8 ):

    清单8.创建一个隐藏的ID输入字段以用作Ajax参数
    <h:outputLink id="link1">
    	<h:outputText id="textName1" value="#{varproducts.product.name}"
    		styleClass="outputText">
    	</h:outputText>
    </h:outputLink>
    <h:inputHidden id="itemid" value="#{varproducts.product.id}" />
    
    <hx:ajaxExternalRequest id="showDetails" target="product"
    		href="product.faces" source="product"
    		params="$$AJAXROW$$form1:tableEx1:itemid">
    </hx:ajaxExternalRequest>

    进行此更改后,您对购物车的修改就完成了。

    使用Rational Application Developer Ajax工具的其他方式

    尽管您对本练习所做的更改显示了JSF标记,但仅出于说明目的,您可以在Rational Application Developer中通过拖放,“属性”视图和“快速编辑”视图轻松地重现它们。 这与构建“ Hello,world”应用程序时在本文第一部分中使用的过程完全相同。 因此,如您在这里所看到的,您可以极大地提高应用程序的可用性,但是您不必扔掉已经完成的任何工作。


    翻译自: https://www.ibm.com/developerworks/rational/library/06/1205_kats_rad2/index.html

    jsf标签<p:ajax>

    展开全文
  • 从1991年第一个版本到成为开源项目的2.0版本,它已经走了很长一段路,直到今天,它正在聚集一个庞大且专业社区,该社区正在不断改进技术。 目前而言一些顶级公司在其技术堆栈中使用Python(例如Instagram) ...

    Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念化。从1991年的第一个版本到成为开源项目的2.0版本,它已经走了很长一段路,直到今天,它正在聚集一个庞大且专业的社区,该社区正在不断改进技术。
    目前而言一些顶级公司在其技术堆栈中使用Python(例如Instagram)

    Facebook旗下的一个图片社交网站
    Python适合从简单到复杂的各种Web项目。它广泛用于旅行,医疗保健,交通运输,金融等不同领域,用于Web开发和软件测试,脚本编写和生成。

    Python的受欢迎程度与其提供的各种好处有关,例如简单性和优雅性吸引了这些大公司。但是,尽管使用Python进行Web开发有很多优点,但是也有一些缺点,下面一起来看看。

    在这里插入图片描述
    来自TIOBE排行榜
    优点:为什么要选择Python进行Web开发?

    在这里插入图片描述
    Python的优点
    1、易于使用和阅读

    有几个因素可以简化Python在Web开发中的使用:

    低入门门槛 Python与我们日常生活中使用的英语相似。语法的简单性使您可以处理复杂的系统,并确保所有元素之间都具有明确的关系。因此,更多的新手程序员可以学习该语言并更快地加入编程社区。

    良好的可视化 效果通过使用不同的图和图表,可以以易于理解的格式表示数据。它们是可视化呈现和理解数据的有效方法。Web开发公司利用Python库(例如Matplotlib)来可视化数据并创建清晰且易于理解的报告。

    Python非常易于阅读,因此开发人员通常在理解由其他程序员编写的代码时不会遇到任何问题。这可以促使从事同一项目的开发人员之间的通信效率更高。

    2、异步编码

    由于没有死锁或研究争执或任何其他令人困惑的问题,因此使用Python 编写和维护异步代码无需花费太多精力。此类代码的每个单元分别运行,从而使您能够更快地处理各种情况和问题。

    3、较少限制的编程方法

    与其他编码语言(例如Java)相比,Python具有较少限制的编程方法。它具有多种范例,可以支持多种编程风格,包括过程性,面向对象和功能性(命令性)。这使Python成为初创公司的绝佳语言,因为项目可能需要随时更改方法。

    包括:

    快速发展。 Python不仅是发展最快的编码语言之一,还是一种允许快速原型设计和迭代的语言。这使工作更轻松,并且对开发人员而言生产率更高。
    OOP变得更容易。 面向对象的编程(也称为OOP)是一种将不同的行为和属性组织到多个对象和类中的范例。这些类中的每一个都有一个函数,因此,如果代码的某些部分发生错误,则其他部分不会受到影响。在Python中,OOP的操作已大大简化,这使得开发成本更低,更省时。
    丰富的标准库和生态系统。 Python的库具有大量的预编写代码。因此,开发人员无需浪费时间创建基本项目。这些库还允许程序员处理和转换机器学习(ML)中连续数据处理所需的数据。

    4、企业应用集成

    Python是企业软件应用程序的流行选择,这在很大程度上要归功于Python与传统上用于企业开发的其他语言(例如Java,PHP和.NET)的流畅集成。

    Python直接与Java,C ++或C代码进行调用,从而可以对大多数常用协议和数据格式进行大量的过程控制和实现。

    除此之外,它还可以用于组装基础结构的新旧片段,这是复杂移动应用程序中的典型情况。

    5、可以使用Python框架快速进行Web开发

    Python的另一个优点是它具有许多简化开发过程的框架。根据您的工作,可能需要不同的框架。

    下面是4个著名的框架:
    在这里插入图片描述

    4个著名的Python web框架
    Django:此框架非常适合成熟的Web应用程序和中档可扩展项目。它具有内置功能,并允许重复使用代码,对代码的不同组成部分进行一致的修改以及其他简化Web开发的功能。Django可与Oracle SQL,PostgreSQL,MySQL和其他知名数据库完美配合。
    Pyramid:使用此框架,您可以从小规模开始,并根据需要扩展规模。金字塔可以与各种数据库和应用程序一起使用,也可以与插件一起扩展-开发人员可以添加所需的任何功能。当您需要在一项任务中实施各种解决方案时,这很方便。
    TurboGears:TurboGears由Repoze,WebOb和Genshi等几个组件组成,并且基于MVC架构。这对于快速,高效的Web应用程序开发很有用,而且更易于维护。使用此框架,您可以分别使用最小或完整堆栈模式编写小型或复杂的应用程序。
    Flask:该框架的理念是提供一个易于管理的,易于定制的解决方案。Flask将自己定义为一个微框架,最常用于主要优先考虑精益功能的小型解决方案。该框架还用于创建原型。
    6、科学计算库方便

    有各种各样的软件包和库可用于开发科学和数字应用程序,以及工具包(例如VTK 3D和MayaVi),单独的成像库以及许多其他工具。最常用的是:

    5个常见的科学计算库:
    在这里插入图片描述

    SciPy(科学数字图书馆);
    Pandas(数据分析库);
    IPython(命令外壳);
    NumPy(基本数值软件包);
    Natural Language Toolkit (Library For Mathematical And Text Analysis : 用于数学和文本分析的库)。
    7、用于机器学习和AI

    机器学习(ML)和人工智能(AI)技术越来越受到关注,因此越来越多的开发人员正在尝试将它们纳入各种项目中。如果使用正确的语言,这是可能的。

    根据让·弗朗索瓦·普吉,IBM的机器学习部门的代表,Python是ML和AI项目的顶尖语言,许多开发商同意。Python具有高效的ML软件包,用于可视化结果的工具,并且远远超出了数据分析和其他使该应用程序领域受益的功能。

    Python确实是机器学习和人工智能最火热的语言,没有之一。

    最典型的用语在线语音合成,在线语音识别,如果你的项目是建立一个人工智能的web应用,那么Python再适合不过了。

    8、作为应用程序脚本

    由于Python与C,C ++和Java的强大集成,Python可以很方便地用于应用程序脚本编写。从一开始就被设计为可嵌入的,它对于自定义大型应用程序并为其进行扩展非常有用。

    不敢说Python可以代替Lua,不过Python可以和Lua那样被嵌入C/C++中。

    9、软件测试

    Python用于测试自动化。许多QA自动化专家选择Python是因为它具有简单的学习曲线-对于技术背景较为有限的人(强大的社区,清晰的语法和可读性)也非常有用。Python甚至有一个易于使用的单元测试框架(例如,您可以使用它对移动应用程序执行地理位置测试)。

    M年前我在一家路由生产商上班,那时候我看到测试部门用Tcl脚本去测试路由器端口,我当时就觉得很诧异,毕竟Tcl脚本的语法真的很怪异,相比这点,Python的语法真的干净简洁。

    10、在原型制作中使用

    用Python创建原型已被证明是一个快速而简单的过程。编程语言的敏捷性使代码重构变得容易,并且可以将初始原型快速开发为最终产品。

    11、开源

    Python具有开放源代码许可证,该许可证使用户可以轻松访问它,并有助于重新分发和无限制的修改。开发人员可以自由使用该语言并为它的改进做出贡献。

    12、服务器端脚本

    如上所述,使用Python进行服务器端脚本编写的优点之一是其简单的语法,从而大大加快了处理速度。该代码由功能模块及其之间的连接组成,可让您根据用户操作执行程序算法。Python还支持Web开发中所需的图形用户界面。

    13、便携性和交互性

    Python具有动态语义和快速原型制作的出色功能,这要归功于它的交互性和可移植性。它可以轻松地嵌入各种应用程序中,甚至是使用不同编码语言的应用程序。因此,您可以轻松修复新模块并扩展Python的核心词汇。它可以连接各种组件。难怪它有时被称为“胶水语言”。

    在Web应用程序中使用Python的缺点
    在这里插入图片描述

    尽管Python有很多优点,但是如果您打算在项目中使用这种语言,也要记住它的缺点。

    1、经验较少的开发人员

    当您需要为您创建一个应用程序时,您当然希望最有经验的开发人员来完成这项工作。但是,使用Python并不是那么简单,因为使用这种语言的专家并不多,特别是将它与Java进行比较时。

    2、缺乏真正的多处理器支持(伪线程)

    多重处理是编写应用程序的重要部分。Python确实支持多处理,尽管它可能不如其他语言灵活或方便。编写代码时,这可能会产生某些限制。

    3、速度限制

    Python经常因其速度而受到批评。它是一种解释型脚本语言,由于它使用的翻译代码方法不同,因此它比许多编译后的相对语言(例如C / C ++或Java)相对要慢。但是,某些Python基准测试比C和C ++更快。

    话虽这么说,Python并不是唯一存在速度问题的工具。Ruby,Perl甚至JavaScript的发展速度也相对较慢。

    与速度有关的一些问题已得到解决和优化,因此Python仍然是软件开发团队的首选之一。

    4、对移动开发,没有优势

    对于移动开发来说,这不是一种不好的语言。仅有少数公司为此目的使用它,而更喜欢iOS和Android的本机开发或React Native的开发。同样的原因,您可能也很难招募到拥有Python移动开发经验的开发人员。它在这个领域不如其他技术那么受欢迎。

    5、对于内存密集型任务不理想

    Python是一种以其数据类型的灵活性而著称的语言。这导致相当高的内存消耗,并使其不方便用于占用大量内存的任务。

    6、设计限制

    Python是动态类型的,这意味着它会在应用运行时执行某些任务,否则将以静态类型的语言完成。这对设计施加了一些限制。如果您的设计中加载了元素,则可能会使程序停顿并妨碍顺利运行。

    在为项目考虑使用Python时,您还应该注意的另一件事是,并发和并行性并不是要在Python中完美使用的。因此,设计可能看起来并不像您想要的那样复杂。

    总结思想

    Python使您能够开发清晰,简单的应用程序,这些应用程序很容易从一个小项目移植到功能全面的复杂应用程序。无论您是学习编程的新手程序员还是企业所有者,Python都是许多类型项目的理想选择。

    它被公认为是初创企业最好的编程语言之一,并且很容易理解为什么当您比较并行Python的优势以及初创企业的目的是什么。初创企业一直在寻找确定性并降低风险,它们的资源有限,并且需要增长的空间。另一方面,Python灵活且易于扩展,不需要庞大的团队,可用于构建原型和MVP。

    Python Web开发公司 Django Stars 使用该语言已有很多年了。我们已经完成了各种复杂的项目,并在电子商务,房地产和金融等领域取得了许多成功的例子。这些包括:

    PADI Travel –来自世界各地的潜水员使用的电子商务和旅行预订平台。
    Sindeo –一个房地产平台,提供有关贷方和抵押的信息。
    MoneyPark –瑞士公司,提供有关保险和抵押的个性化财务建议。
    因此,无论您从事哪个领域的工作,Python都值得您关注。它提供了简单的解决方案,而没有不必要的细节,节省了时间,并确保了高度的安全性。

    许多知名公司都使用和信任Python。一些最大和最受信任的全球公司都将Python和Django平台一起使用Python作为主要编码语言。Instagram,Pinterest,Bitbucket和Dropbox是一些使用Python Web开发服务的公司的例子。

    展开全文
  • Web Api的优缺点就不说了,直接说怎么跨域,我搜了一下,主要是有两种。 一,ASP.NET Web API支持JSONP,分两种  1,利用JsonMediaTypeFormatter,具体参考这里:...

    Web Api的优缺点就不说了,直接说怎么跨域,我搜了一下,主要是有两种。

     一,ASP.NET Web API支持JSONP,分两种

      1,利用JsonMediaTypeFormatter,具体参考这里:http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-03.html

    上代码:

    新建JsonpMediaTypeFormatter类:

     

        public class JsonpMediaTypeFormatter : JsonMediaTypeFormatter
        {
    
            private string callbackQueryParameter;
    
            public JsonpMediaTypeFormatter()
            {
                SupportedMediaTypes.Add(DefaultMediaType);
                SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/javascript"));
    
                MediaTypeMappings.Add(new UriPathExtensionMapping("jsonp", DefaultMediaType));
            }
    
            public string CallbackQueryParameter
            {
                get { return callbackQueryParameter ?? "callback"; }
                set { callbackQueryParameter = value; }
            }
    
            /// <summary>
            /// 将对象序列化后的JSON字符串填充到JavaScript回调函数中
            /// </summary>
            /// <param name="type"></param>
            /// <param name="value"></param>
            /// <param name="stream"></param>
            /// <param name="content"></param>
            /// <param name="transportContext"></param>
            /// <returns></returns>
            public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContent content, TransportContext transportContext)
            {
                string callback;
    
                if (IsJsonpRequest(out callback))
                {
                    return Task.Factory.StartNew(() =>
                    {
                        var writer = new StreamWriter(stream);
                        writer.Write(callback + "(");
                        writer.Flush();
    
                        base.WriteToStreamAsync(type, value, stream, content, transportContext).Wait();
    
                        writer.Write(")");
                        writer.Flush();
                    });
                }
                else
                {
                    return base.WriteToStreamAsync(type, value, stream, content, transportContext);
                }
            }
    
            /// <summary>
            /// 判断是否为跨域请求
            /// </summary>
            /// <param name="callback"></param>
            /// <returns></returns>
            private bool IsJsonpRequest(out string callback)
            {
                callback = null;
    
                if (HttpContext.Current.Request.HttpMethod != "GET")
                    return false;
    
                callback = HttpContext.Current.Request.QueryString[CallbackQueryParameter];
    
                return !string.IsNullOrEmpty(callback);
            }
        }

     

    • 在Global.asax中注册JsonpMediaTypeFormatter
    • GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter());
      1.  

      2,利用ActionFilterAttribute ,具体参考这里:http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-web-api/18206518#18206518

      代码:

    新建 JsonCallbackAttribute 类

        public class JsonCallbackAttribute : ActionFilterAttribute
        {
            private const string CallbackQueryParameter = "callback";
    
            public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
            {
                var callback = string.Empty;
                if (IsJosnp(out callback))
                {
                    var jsonBuilder = new StringBuilder(callback);
                    jsonBuilder.AppendFormat("({0})", actionExecutedContext.Response.Content.ReadAsStringAsync().Result);
                    actionExecutedContext.Response.Content = new StringContent("C(\"a\")");
                }
                base.OnActionExecuted(actionExecutedContext);
            }
    
            private bool IsJosnp(out string callback)
            {
                callback = System.Web.HttpContext.Current.Request.QueryString[CallbackQueryParameter];
                return !string.IsNullOrEmpty(callback);
            }
    
        }

    在Global.asax中注册JsonCallbackAttribute

    GlobalConfiguration.Configuration.Filters.Add(new JsonCallbackAttribute());

     

     

     二,使用 Microsoft ASP.NET Web API 2 Cross-Origin Suppor

      使用 NuGe 安装 Microsoft ASP.NET Web API 2 Cross-Origin Support,这里说的很详细

      然后在Global.asax中开启针对CORS的支持,EnableCors加不加无影响的样子。

     

    测试实例:

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="http://cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
        <title>测试 WebApi 跨域</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <input type="button" id="btnGet" value="Get 点击跨域查询数据" />
            <div id="bindData">
            </div>
            <input type="button" id="btnPost" value="Post 点击跨域查询数据" />
        </form>
        <script>
            $('#btnGet').bind('click', function (e) {
                $.ajax({
                    type: "GET",
                    url: "http://localhost:20128/api/UserInfo",
                    success: function (data) {
                        var html = "";
                        $.each(data, function (index, val) {
                            html += "<ul><li>GroupName: " + val.Id + " -- " + val.Name + "</li></ul>";
                        });
                        $("#bindData").append(html);
                    }
                });
            });
    
            $('#btnPost').bind('click', function (e) {
                var user = { Id: '1', Name: '233' };
                $.ajax({
                    type: "POST",
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify(user),
                    url: "http://localhost:20128/api/UserInfo",
                    success: function (data) {
                        //var html = "";
                        //$.each(data, function (index, val) {
                        //    html += "<ul><li>GroupName: " + val.Id + " -- " + val.Name + "</li></ul>";
                        //});
                        //$("#bindData").append(html);
                    }
                });
            });
    
        </script>
    </body>
    </html>

     

    Ajax请求在Post数据的时候,一定要加上这样项:

    contentType: 'application/json; charset=utf-8',
    
    data: JSON.stringify(user),

     

    就这样,只是把网络上有解决方案的整理了一下,放在了一切。

    转载于:https://www.cnblogs.com/softmax/p/4228882.html

    展开全文
  • 随着互联网web2.0网站兴起,传统关系数据库在应付web2.0网站,特别是超大规模和高并发SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服问题,而非关系型数据库则由于其本身特点得到了...
  • 随着互联网web2.0网站兴起,传统关系数据库在应付web2.0网站,特别是超大规模和高并发SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服问题,而非关系型数据库则由于其本身特点得到了...
  • 下面比较这两种做法的优缺点. ORM的优点非常吸引人:不需要构造简单枯燥的SQL语句、对数据库进行I/O操作,这些都由ORM工具来解决,而且不易出错。但是缺点也成为ORM心中的痛,主要体现在两个方面:1,ORM不够灵活;...
  • 出处:http://blog.csdn.net/baogreat/archive/2007/10/28/1851942.aspx原作者:徐芳波序言...下面比较这两种做法的优缺点. ORM的优点非常吸引人:不需要构造简单枯燥的SQL语句、对数据库进行I/O操作,这些都由ORM工具
  • 随着互联网web2.0网站兴起,传统关系数据库在应付web2.0网站,特别是超大规模和高并发SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服问题,而非关系型数据库则由于其本身特点得到了...
  • SaaS的优缺点辨析

    2008-07-04 20:49:00
    SaaS(Sof tware as a Service,软件即... SaaS让用户可以通过互联网使用实时运行的软件,由于这种软件具有很多Web 2.0的特点,能给用户带来极其丰富的体验,而且节约了用户的投资,在软件市场上很流行。Gartner和...
  • 全面认识SaaS的优缺点

    千次阅读 2008-04-28 13:40:00
    软件服务化(Software as a Service,SaaS)让用户可以通过互联网使用实时运行的软件,由于这种软件具有很多Web 2.0的特点,能给用户带来极其丰富的体验,而且节约了用户的投资,在软件市场上很流行。Gartner
  • 软件服务化(Software as a Service,SaaS)让用户可以通过互联网使用实时运行的软件,由于这种软件具有很多Web 2.0的特点,能给用户带来极其丰富的体验,而且节约了用户的投资,在软件市场上很流行。Gartner和...
  • 四、搭建spring sercurity+...4.2、优缺点 优点 jwt基于json,非常方便解析 可以在令牌中自定义丰富内容,易扩展 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高 资源服务使用JWT可不依赖认证服务即
  • p2p型blog的优缺点及其原理讨论

    千次阅读 2005-12-23 09:49:00
    一、什么是p2p型blog?有什么优缺点?再强调一次,我所理解“p2p”是"person to person"意思,也即是抛弃中心点、个人面对个人直接地直接交流意思。...blog作为web2.0时代一个标志性服务,它
  • 应用最广十大Javascript框架以及优缺点对比 2009-04-22 08:07 近日,知名技术开发网站SYS-CON 媒体列出十个应用最广Javascript框架,文章说,Javascript库已经成为设计优秀网站基础,当今几乎所有站点都带有...
  • Web 2.0 RESTFUL架构中推荐数据交换格式也是JSON。许多提供公共数据下载网站都可以使用JSON来下载数据。 Apache Hadoop、HBase等开源大数据系统中分布式通信协议采用了Protocol Buffers来实现。此外,许多物联网...
  •  符合Web2.0特征众多网站一个明显特点就是采用Ajax。Ajax提供了在后台提交请求访问数据功能。其实现主要使用是XMLHttpRequest函数,这个函数允许客户端Javascript发送到服务器端HTTP请求并获得返回数据...
  • 什么是SaaS,SaaS有哪些优缺点

    千次阅读 2019-09-19 20:26:59
    软件服务化(Software as a Service,SaaS)让用户可以通过互联网使用实时运行的软件,由于这种软件具有很多Web 2.0的特点,能给用户带来极其丰富的体验,而且节约了用户的投资,在软件市场上很流行。Gartner和...
  • DIV+CSS制作网页的优缺点

    千次阅读 2007-12-11 19:54:00
    如今大部分网站仍然采用表格嵌套内容... 随着WEB2.0标准化设计理念普及,国内很多大型门户网站已经纷纷采用DIV+CSS制作方法,而从实际应用情况来看,此种方法绝对好于表格制作页面方法。具体优势体现在如下方面:
  • microboot是什么,能做什么? microboot是什么 microboot是基于Netty开发一个HTTP服务框架,本身提供http服务器功能,jar包方式启动,使用方式与架构与Spring MVC极为相似,microboot没有...microboot优缺点 优点 支
  • 网上说了很多很多,但是看完之后还是很混乱,所以我自己重新总结一下。 解决 js 跨域问题一共有8种方法: jsonp(只支持 get) 反向代理 CORS document.domain + iframe 跨域 ...各个方法都有各自的优缺点...
  • ASP.Net提供了三个数据控件,使得原本在ASP中繁杂的工作变得简单。这三个控件属于数据Web控件,分别是DataList,...你必须权衡三种控件的优缺点并决定哪一种更加适合你的程序。 三者共同点: 1.是用来显示数据 2.需
  • web实时系统实现

    千次阅读 2013-06-13 23:32:28
    随着web2.0富应用出现,web网页操作倾向于桌面应用程序化,很多web应用都要求能实时更新,如常见聊天对话、邮件收发、股票系统等。本文列举了我在协同项目中使用几种实现方式,并列举了一些优缺点。 1. ...
  • 周边生态丰富 (Android, iOS, Web 等各种 Demo、继承 JSON 海量生态、零代码 接口测试 和 单元测试 工具等) 文档视频齐全 (项目介绍、快速上手、安装部署 等后端、前端、客户端 图文解说、视频教程、代码注释 ...
  • Ajax 原理是什么?有什么优缺点? Promise 原理是什么?请你手写一个 Promise 出来 Http 2.0 做了哪些升级? TCP 与 UDP 区别? MVC 与 MVVM 区别? 实现对象深度拷贝方式? html5新特性 ...

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
热门标签
关键字:

web2.0的优缺点