Hello !
"
仅只是消除括号、引号和分号本身就可以防止 Web 应用程序程序员的无数错误。此外,消除对编译、打包和部署 HttpServlet 组件的需要还极大地缩短了做出变更(无论是否为修否错误)所需的时间。
但更重要的是,JSP 导致了一种体系结构变更,将呈现视图的关注点与获取数据的关注点分离。网页设计人员和应用程序程序员可以突然地一起工作,分别以更适合其角色的语言和风格来开发他们自己的组件而不会相互冲突。
说句题外话,Enterprise JavaBeans 规范几乎是在同时出现的,以进一步分离那些关注点。添加 EJB 组件实现了 Web 应用程序的真正的模型-视图-控制器 (Model-View-Controller) 体系结构,其中模型由 EJB 组件来封装,视图由 JSP 来封装,控制器由 HttpServlets 来封装。
遗憾的是,若要呈现任何真正有用的东西,Java scriptlet、表达式和静态 HTML 的交互可能变得相当复杂。例如,下面是用于产生订单 ID 和状态列表的代码片段:
Order Id = Status =
开始循环的那个 scriptlet 相当复杂。结尾的那个 scriptlet 确实简单,但是常常被遗忘(或放在了错误的位置)。在编辑 JSP 时,不存在用于捕获这个以及其他常见错误的工具(就像在 Java IDE 对“纯粹”HttpServlets 所遇到的情况一样)。
简而言之,问题仍然在于,Java scriptlet 和表达式的正确使用对普通网页设计人员来说要求过高——对于没有接受过编程培训的人来说尤其如此。
于是出现了自定义 JSP 标记的思想并得到了标准化,以最小化甚至消除对 Java 编程的需要。例如,IBM Software Services for WebSphere 开发了一些自定义标记,支持对嵌套结构进行迭代。这些标记与作为基础 JSP 标记库一部分来提供的 USEBEAN 和 GETPROPERTY 标记一起工作,以极大地简化逻辑,如下所示:
ID="OrderStatus"
CLASS="com.onlinemall.data.OrderStatusData"
SCOPE="request"/>
BEAN="OrderStatus"
PROPERTY="orders"
VAR="order"
TYPE="com.onlinemall.data.OrderData">
Order ID=PROPERTY="orderID"/>
Status=PROPERTY="status"/>
出现诸如 Struts 等框架以消除对编写 HttpServlets 的需要,这还是不久之前的事情。Struts 包括用于表单处理的丰富自定义标记集,但是还包括一个称为“Tiles”的概念,它支持声明式的页面组合。Tiles 的重要特性是能够非常容易地重新组合页面,而无需更改基础代码组件。Struts 是 Java Server Faces (JSF) 背后的灵感之一,JSF 标准化了从组件进行声明式 UI 组装的概念。
客户端从 Java Servlet 到 JSP 到自定义标记框架再到 JSF 的发展是从过程化编程的组件的逐步偏离,后者必须编译为可解释的声明式组装的组件(或者至少在运行时进行编译)。面向组件的体系结构(Service Component Architecture,SCA)可看作是一种类似的发展,实现了服务器端组件到应用程序的声明式组装。
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。