jsp/servlet/jsf:javaee 不再需要 ajax

JSF完全参考手册:源代码深入解析 本文还有配套的精品资源,点击获取 简介:JavaScript Server Faces(JSF)是Java平台上的MVC框架,用于构建Web应用程序。该参考手册提供了丰富的源代码示例,深入涵盖了JSF组件、事件处理、数据绑定和页面导航等关键概念,以及如何在实际项目中应用。它还可能包含构建配置文件和分章节组织的代码,帮助开发者理解HTTP请求处理、组件与数据模型的绑定,以及A... 阅读详情

3年前,“spring之父”rod.johnson写了一本在java界引起轰动的书:《expert one-on-one j2ee development without ejb》。这本书阐述了ejb作为j2ee核心技术所带来的意义与价值,但作者用了更大篇幅介绍ejb的一些缺陷与不足,并提出了without ejb的解决方案。正是由于“j2ee without ejb”这个激动人心的口号及这本书奠定的基础,导致了spring framework这个经典轻量级框架的诞生。
      2年前,ajax开始进入人们的视野。时至今日,ajax已经成为一个红得发紫的技术。但是今天,我想说一句:javaee without ajax。
ajax的“原罪”
      ajax为什么这样红?有人说,是因为起了个好听易记的名字(比如荷兰著名的ajax球队,即阿贾克斯);也有人说,是因为google全新的ajax应用产品给人们带来的超酷体验(比如伟大的google maps、gmail等)。确实如此,ajax能够如此流行的最主要原因就是它带来了更好的用户体验,改变了人们对传统web应用的不佳印象。
      然而,即使ajax的狂热fans也不得不承认的是,从技术层面上来说,ajax并没有带来什么新鲜的东西。它本质上是一种新瓶装旧酒的技术,好处是通过java script与dhtml提供了一种异步编程模型,从而使web应用给客户带来了更好的人机体验。正如我在去年引起大家争论的拙文《ajax,只是一种过渡技术》中表述的:ajax解决问题的层面较低。或者说,它解决问题的方法与手段,很难形成一种可高度抽象的框架级解决方案。并且,正是因为ajax基于java script,因此不可避免地带来了java script的诸多缺点,譬如:
               跨浏览器是一场噩梦
               对搜索引擎的支持不好
               干掉了back、history等按钮(尽管我并不认为back、history是什么好东西)
               开发与维护成本过高
要java, 不要java script
      we love java, not java script。套用毛泽东的惯用句式就是:“要java, 不要java script”。相信很多读者看完这个标题也许会不以为然,但这句话却代表了许多j2ee开发人员的心声。
      众多java工程师都对java有一种近乎偏执的喜爱,他们热爱java的简洁与优雅。但一旦让他们去进行java script的开发,却往往会不知所措:过度灵活的语法,无法通过编译器进行语法校验,缺乏良好的调试工具等等这些,都会让人们对java script畏手畏脚,更遑论ajax的开发。
      一句话,java社区需要ajax,需要它来提升基于javaee的web应用的人机体验;但是,人们并不喜欢ajax目前的开发模式。无疑,我们需要一种新的解决方案。
谁来拯救javaee的ajax?
      我给出的答案是jsf。目前,关于jsf的一种流行说法是“悲剧人生:sun让jsf光着身子降临到java web世界”。然而,我的看法却是:作为一种革命性的服务器端组件技术,jsf犹如早晨八九点钟的太阳,前途不可限量。
      让事实说话,我们先来看看jsf请求/响应过程的标准生命周期:


                                   图1:jsf的生命周期

      通过上图可以观察到,任何一个jsf“faces request” 请求,经过restore view、apply request values、process validations、update models、invoke application等阶段以后,产生了一个 “render response” 返回给客户端。那么,常规jsf引擎是如何实现上述过程的呢?


                         图2:常规jsf引擎的请求与响应过程

      回顾一下常规jsf引擎针对请求与响应的过程:首先,客户端请求某个资源,产生一个faces request;服务器端接收到此请求以后,经过一系列后台处理,产生一个faces response。我们注意到:响应的content-type是text/html,而产生的内容主体是一段html文本;浏览器在接收到html文本以后,进行整个页面的渲染与刷新。
 
无需写ajax代码的ajax enabled应用
      我用自己开发的jsf引擎,这样处理上述过程(详见参考资料www.operamasks.org ),如下图所示:


                   图3:operamasks jsf实现的请求与响应过程

      首先可以观察到,faces request的发出是基于“x-requested-by: xml http request”,也就是说,这是一个ajax请求,而该请求在到达服务器端以后,服务器端所产生的faces response同常规faces response相比也发生了变化:content-type不再是text/html,变成了text/javascript;并且,响应的主体也不再是html文本,而是一堆script脚本。浏览器在接收到响应以后,再也不需要进行整个页面的渲染与刷新,而只仅仅需要执行这段脚本内容,将页面的控件进行更新即可。
      显而易见,通过上述jsf技术,我们获得了:
               基于ajax的请求、应答、及页面控件的更新
               数据传输量明显减少
               避免整个页面的刷新,更好的用户体验
               系统保持敏捷、高效
      换言之:任何标准jsf应用,只需将其在operamasks jsf引擎上运行,就可以达到这样的效果。我们并没有写任何一行ajax的代码,但是,我们的应用却是自然而然的ajax enabled的应用。大道至简,大象无形。
奥妙所在:jsf的render机制
      为什么可以这样?
      jsf组件只是特定状态和行为的载体,而组件以什么形式去和用户交互,是完全可定制的、独立于该特定的表现语言,可以是html、wml或者其他形式;具体是什么,可以通过指定jsf组件的render kit来实现,而每一种render kit,对应于组件作者写的同一风格和形式的一系列render。
      比如,如果想在网页中实现图表功能(chart),msie有vml,gecko和opera有svg;而在服务器端只需要简单地判断一下浏览器类型,就可以选择一个render kit,生成不同的客户端表现来完成相同功能��这是用常规jsp技术很难完成的任务。
      通俗的说,jsf组件可以翻译成任何你想要的形式。so,jsf框架比现有其它开源框架具有更强的生命力。上文所述的operamasks jsf,其容器级别ajax实现,正是灵活应用render kit的具体案例。
 
      从容器级别对ajax予以支持的jsf引擎
      我们提出的jsf是直接由jsf容器来处理ajax请求的,它会根据请求类型来判断这是一个正常http请求还是一个 ajax请求:如果是常规http请求就运行jsp页面,生成页面文档(特定的,对于ajax render kit,要加入一些ajax基础javascript代码);如果是ajax请求,服务器对请求参数正常解码,并执行jsf中除页面输出阶段以外的所有其他阶段,生成一个jsf组件树。
      一直到这一步为止,处理方式与对普通http请求的处理完全一致,唯一不同的是:在随后render response阶段,容器除了调用组件作者写的ajax功能 renderer以外,更重要的是在生成响应页面时,会过滤掉一切不会变化的静态内容��也就是说,静态内容不会生成到响应页面中去,而对每一个动态内容则会生成一个相应javascript代码(可以更进一步优化为只有变化了的动态内容才处理)。这样,传给客户的ajax应答实际上是由这样一些javascript语句构成。在ajax响应返回到客户端时,就可以自动由ajax回调函数执行这些javascript语句,完成对页面即时的、局部的更改,而不需要刷新整个页面。依赖jsf组件的具体功能,甚至可以改变页面的外观。而整个ajax机制由jsf引擎提供,对用户完全透明。
      实际上,在jsf规范中jsf页面输出阶段所采用的render kit是可替换的,默认的html_basic render kit输出的是标准html语法,不包含任何java script代码。我们提出的jsf引擎实现了一个 ajax render kit,可以在html文档中嵌入java script代码来实现ajax特性,而替换render kit只需要修改配置文件即可。
      简单地说,这种jsf引擎为每个标准组件都实现了相应的ajax render, 比如对uicommand组件,其ajax render会在onclick事件中加入javascript的ajax提交代码,向服务器提交ajax请求。通过这种方式,任何一个包含标准jsf组件的web应用,都可以通过只更改render kit配置为ajax来实现web应用ajax化。而对于第三方的组件,可能本身并不支持 ajax,但使用一个名为的标签,就可以立即将这个第三方组件转换成ajax enabled。
      例如,apache myfaces的tomahawk项目提供了一个tree组件,这个组件本身并不支持ajax,每当按下一个tree结点都将重新刷新整个页面。使用标签后,则只刷新tree部分,而不刷新页面的其他部分。当然更好的方式是,提供一个本身就支持ajax的tree组件,以减少冗余数据的传递。关于标签的原理,有兴趣的读者可以参考operamasks jsf的源码(详见参考资料),这里就不再一一赘述了。
      综上,javaee 需要ajax,但并不需要传统的ajax开发模式。通过我们提出的operamasks jsf技术,我们不再需要知道什么是ajax,而我们的应用却是自然而然的ajax enabled应用。
      因此,我们认为:javaee without ajax!
     (责任编辑:包春林)


Servlet+jsp+AJax的分页及增删改查 利用最简单易懂的方式写了一个完成的纯ajax的增删改查及分页,可以直接下载使用,方便学习,如果觉得不错,记得评论,您的评论是对我最大的支持。 立即下载

相关推荐

在Java EE 6中使用JSF 2.0简化页面制作

在Java EE 6中使用JSF 2.0简化页面制作 在Java EE 6中使用JSF 2.0简化页面制作 在Java EE 6中使用JSF 2.0简化页面制作

SpringMVC——通俗易懂讲讲Ajax~

聊聊Ajax一、什么是Ajax二、iframe标签简单伪造Ajax三、Ajax的实现1. 基本概念的了解Ajax的核心是什么?XMLHttpRequest是什么?Ajax数据传输的数据格式是什么?2. 原生JS实现1. 创建XHR对象2. 打开与服务器的连接3. 发送请求4. 接收服务器响应3. jQuery实现1. 了解jQuery中Ajax的常用方法$.ajax()$.get()$.post()2. 模仿浏览器的失去焦点事件1. 新建一个SpringMVC项目2. 下载jQuery3. IDEA中引入.

欢迎来到 Baret-H 的博客 2372

抖音视频数据获取实战:从API调用到热门内容挖掘

通过抖音API获取视频数据,企业可快速构建数据驱动的运营体系。本文提供了从权限申请到商业落地的全流程指南,建议结合自身业务扩展功能。如有技术问题,欢迎​​评论​​区留言讨论!#抖音开发 #数据挖掘 #短视频运营 #API调用 #Python实战。

WBKJ_Noah_的博客 6388

Java EE - JSF技术简述

JSF(JavaServer Faces),Java EE 规范技术中的一种

Evanpatchouli 的博客 1008

GPS卫星轨道的理论和计算笔记分享

广义相对论预测,对比在时空弯曲度较大的地面上的原子钟,运行于时空弯曲度较小的卫星原子钟在地面上看起来更快,每天快约45us;反过来,当电压施加在晶体上时,晶体形状会扭曲(比如说伸长),而当晶体被施加上反向电压后,它将做相反的变形运动(比如缩短)。X轴:指向参考子午面与地球赤道的一个交点;从北黄极上方观察,地球北极在空间的运动轨迹是一个近似于以北黄极为中心的顺时针方向旋转的圆周,圆周半径等于。从上万年周期看,地球北极绕北黄极做大圆周运动,而从几年的短期来看,北极又在某一点处做局部的小幅椭圆运动。

m0_57139844的博客 2003

6轴机械臂(拟人臂+球形腕(三轴相交于一点))正逆运动学求解

1、DH坐标下机械臂参数 theta=[pi/10,pi/2,pi/4,-pi/4,pi/4,-pi/8];%关节角度 a=[0, 0.260, 0.025, 0, 0, 0];%连杆长度 d=[0, 0, 0, 0.280, 0, 0.072];%偏移距离 alpha=[pi/2, 0, pi/2, -pi/2 , pi/2, 0];%RBR型6轴机械臂 使用...

qq_33374294的博客 7882

JavaEE学习笔记之JSF(一)

一、JSF 古时候有一句话:知其然知其所以然。意思就是知道事物的表面现象,也知道事物的本质及其产生的原因。 那么,JSF在表面上以及本质上是什么东西呢?为什么会有JSF呢? 个人认为JSF(JavaServer Faces)从名字上来看,是一种Java服务Face的集合,不知道Face翻译成什么比较好,但是大概要表达的意思应该是一种用于与客户端交互的页面。在学习JSP与Servlet的时候,...

mixer_a的专栏 253

算法之动态规划(DP)求解完全背包问题

算法之动态规划(DP)求解01背包问题 上面这篇文章主要讲解了01背包问题和动态规划算法,如果你不了解动态规划算法,建议先浏览一下这篇文章熟悉一下,因为,本文的算法思想是基于这篇文章的。 1、什么是完全背包问题? **01背包问题:**有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品只能取1次放入背包中,背包所有物品权重和最大是多少? 完全背包: 有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品可以取无限次放入背包中,背包所有物品权重和

PRML_MAN的博客 2万+

JSP/Servlet/JSF:JavaEE 不再需要 Ajax

作者: thesixthday,  出处:赛迪网技术社区, 责任编辑: 李春禹, 2007-12-27 13:21   浏览器在接收到响应以后,再也不需要进行整个页面的渲染与刷新,而只仅仅需要执行这段脚本内容,将页面的控件进行更新即可。更好的方式是,提供一个本身就支持Ajax的Tree组件,以减少冗余数据的传递。   3年前,“Spring之父”Rod.John...

anjichan4261的博客 228

分布式 Agent 系统设计:高并发场景下的挑战与解决方案

分布式 Agent 系统由多个分布在不同节点上的智能 Agent 组成,这些 Agent 具有自主决策能力,能够通过通信协作完成复杂任务。每个 Agent 可以看作是一个独立的实体,具备感知环境、处理信息、执行动作的功能,它们相互协作,共同实现系统的整体目标。分布式 Agent 系统在高并发场景下面临着资源调度、通信延迟、状态一致性、容错处理和性能瓶颈等诸多挑战。通过采用动态资源分配、高效通信协议、分布式共识算法、冗余备份等解决方案,可以有效应对这些挑战,提高系统的性能、可靠性和可用性。

shuizhudan223的博客 1292

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

java ee jsf_Java EE 6:JSF与Servlet + JSP。 我应该学习JSF吗?

我试图通过阅读http://java.sun.com/javaee/6/docs/tutorial/doc/gexaf.html来熟悉Java EE 6。 我对使用JSF感到有些困惑。通常,在我开发Web App的方式中,Servlet将充当控制器,而JSP将充当MVC模型中的View。 那么,JSF是否尝试替换此结构? 以下是上述教程的报价:Servlet are best suited for...

weixin_36287059的博客 203

盘点天才少年稚晖君彭志辉的知识体系

一个杰出工程师的工作区间和装备

曲折旅程,艰难人生 2万+

JavaEE介绍

1、  为什么需要JavaEE我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展。当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担。为了程序的易维护性和可扩展性,这就需要我们使用JavaEE技术来进行项目开发2、  什么是JavaEEJavaEE是一个开发分布式企业级应用的规范和标准。Java语言的平台有3个版本:适用于

新新 7万+

用扩展点为 Fiori Elements 添加自定义动作:从原理到落地的完整实践

本文介绍了如何在基于OData V4的Fiori Elements应用中通过Extension Points添加自定义Action按钮。主要内容包括: 扩展点动作与标准注解动作的区别:扩展点用于非标准前端流程、组合操作等场景,需通过extensionAPI与框架交互。 扩展点动作的插入位置:可放置在List Report表格工具栏、Object Page页眉/页脚/Section工具栏等位置,并说明了相应的manifest.json配置节点。 配置模型与处理函数契约:详细说明了press、visible/e

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 249

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JSF VS Tapestry

1.性能方面JSF从测试数据可以看出在只使用JSF及JSF自定义组件的情况下,webmail demo应用速度最快,200用户并发访问的响应时间为1.8秒,基本上可以达到servlet + jsp的性能。使用JSF + 5个Facelet composition组件的情况下,webmail demo应用仍可达到200用户并发访问的响应时间为2.6秒的性能。使用JSF + 20个Fa

走向架构师之路 929

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JAVAEE5 VS JAVAEE6

Java EE 5 由 Java Community Process 通过 Java Specification Request 244 发布,这个 “总纲” JSR 指出了详细描述 Java EE 5 中各种技术的其他规范(参见 参考资料)。Sun Microsystems 的 Bill Shannon 领导一个专家组制订了这个规范,这个专家组包括从 IT 行业重量级人物到个人专家的 31 位成员

cuiyaoqiang的博客 4789

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java ee和j2ee_J2EE与JAVAEE有什么区别

展开全部学习Java EE,在开发环境上不建议再用文本编辑器,32313133353236313431303231363533e59b9ee7ad9431333431346463感觉NetBeans 5.5(目前最高正式版本)很适合初学者,个人也很喜欢NetBeans,如果你喜欢用别的IDE如Eclipse,都没问题,看自己喜欢吧。1 学习JSP/ServletJava EE最高版本目前是5.0版...

weixin_32331345的博客 740

JavaEE8 和 Eclipse 开发指南(一)

Java 企业版(JEE,之前称为 J2EE)已经存在很多年了。它是一个用于开发企业应用的非常健壮的平台。J2EE 首次于 1999 年发布,但在 2006 年发布第 5 版时经历了重大变化。自第 5 版以来,它已被更名为Java 企业版(JEE)。JEE 的最新版本使得开发多层分布式应用变得更加容易。J2EE 专注于核心服务,并将使应用开发变得更容易的任务留给了外部框架,例如 MVC 和持久化框架。但 JEE 将这些框架中的许多引入了核心服务。随着对注解的支持,这些服务在很大程度上简化了应用开发。任何运行

龙哥盟 1369

如何从零开始学习JavaEE

如何从零开始学习JavaEE 以下都是我学习JAVA亲身经历的心得,今天花了一个多小时总结出来希望对大家有一定的帮助。如果如总结不妥,请指出和批评!为学习JAVA的初学者铺条学习JAVA的道路。首先大家要明确一点,外面招聘JAVA的,主要是指的J2EE,也就是BS结构(浏览器和服务器结构)JAVA的之所以火起来真是因为BS结构,并不在CS结构,所以那种大型网游你没有谁听说是JAVA做的吧!其次,

面朝大海,春暖花开 1417

javaEE介绍

Javaee介绍 1、 为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展。当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担。 为了程序的易维护性和可扩展性,这就需要我们使用JavaEE技术来进行项目开发 2、 什么是JavaEE JavaEE是一个开发分布式企业级应用的规范和标准。 Java语言的平台有3个版本:适用于小型设备和智能卡的JavaME(Java Platform Micro Edition,Java微型版)

brave1boy的博客 522

Java杂谈(八)--Servlet/Jsp

念是组件和容器。曾经有的人问笔者Servlet的Class文件是哪里来的?他认为是J2ee官方提供的,我举了一个简单的反例:稍微检查了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小,很明显是不一样的,至少已经说明了它们不是源自同根的吧。其实Servlet是由容器根据J2ee的接口定义自己来实现的,实现的方式当然可以不同,只要都遵守J2ee规范和指南。 上述只是一个常见的误区罢了,告诉我们要编译运行Servlet,是要依赖于

liangjw1018的专栏 229

我的J2EE成功之路:实战Ajax,JSP,Struts 2, Spring,Hibernate

    在前几年JSP+Servlet是采用Java进行Web开发的常用技术,但后来Struts逐渐流行起来,再后来Spring成了当仁不让的霸主,而Hibernate成了持久层处理技术的代表。其实这几种技术各有千秋,因此,Struts+Spring+Hibernate的组合成了采用Java进行Web开发的主流。 通过本书,读者可以了解Ajax、JSON、JSF、Struts 2、Spring

博文视点(北京)官方博客 2219
上一篇: sun收购mysql后面临的五个问题
下一篇: asp将帮助推动全球经济
Labber
博客等级 码龄19年 26粉丝 1976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值