我认为JSP有问题(上)_JSP编程

(作者:小龙亭主Blueski编译 2000年12月22日 14:22)

  (编者:这篇文章的原文首次在国外出现时,JSP还只是一种刚刚崭露头角的技术,并没有像现在这样如日中天。现在看来这篇文章的某些观点可能会有一定的局限性,但我不得不承认这是一篇很大气的作品,其中涉及很多JSP的内在原理。因此,我想还是有必要把这篇文章介绍给大家,以便各位从另一个侧面更深入的了解JSP技术。)

  如今每一个使用servlets的开发者都知道JSP,一种建构在servlet技术之上的由Sun公司发明并花费大量精力加以推行的web技术。JSP将servlet中的html代码脱离了出来,从而可以加速web应用开发和页面维护。实际上,由Sun发布的官方 "应用开发模型"文档上说得更远:"JSP技术应该被视为标准,而servlets在多数情况下可视为一种补充。"

  本文将比较JSP和另一项基于servlets的技术:template engines(模板引擎)。

直接使用Servlets的问题
  当Servlets被发明时,整个世界都看到了它的优越性。基于Servlet的动态网页可以被快速执行,可以在多个服务器之间轻易转移, 并且可以和后台数据库完美地集成,因此Servlets被广泛接受成为一种web服务器端的首选平台。

  但是,通常通过简单方式即可实现的html代码现在却要让程序员通过 out.println()调用每一行HTML行,这在实际的 Servlet应用中变成一个严重问题。HTML内容不得不通过代码来实现, 这对于大的HTML页来说不啻是一项繁重费时的工作。另外,负责网页内容的人员不得不请开发人员来进行所有的更新。为此,人们寻求这一种更好的解决方式。

JSP诞生
  JSP 0.90诞生了。在这种技术中你可以将Java代码嵌入到HTML文件,服务器将自动为页面创建一个Servlet。JSP被认为是一种写Servlet的简易方式。所有HTML可以直接得到而不必通过out.println()调用,而负责页面内容的人员可以直接修改HTML而不必冒破坏Java代码的风险。

  但是,让页面美术设计师和开发人员在同一文件上工作并不理想,让Java嵌入HTML被证明是就象将HTML嵌入Java一样令人尴尬。读取一堆很乱的代码仍然是一件困难的事情。

  于是,人们在使用jsp方面变得成熟,更多地使用了JavaBeans。Beans包含了jsp所需的业务逻缉代码。JSP中的大多数代码都可以取出来放到bean中去,而只留下极少的标记用于调用bean。

  最近,人们开始认为这种方式下的JSP页面真的很象是视图(view)。它们成为一个用于显示客户端请求结果的组件。于是人们会想,为什么不直接对view发送请求呢?目标view如果对该请求不合适又将如何?说到底,很多的请求有多种可能来取得结果view视图。例如,同一请求可能产生成功的页面、数据库例外出错报告,或者是缺少参数的出错报告。同一请求可能产生一个英文页面也可能是西班牙文页面,这取决于客户端的locale。为什么客户端必须直接将请求发送给view?为什么客户端不应该将请求发送给一些通用的服务器组件并让服务器来决定JSP view的返回?

  这使很多人接受了已被称为"Model 2"的设计, 这是在JSP 0.92中定义的基于model-view-controller的模型。在这种设计中,请求被发送到一个servlet控制器,它执行了商业逻缉并产生一个相近的数据"model"来用于显示。这一数据随后通过内部送到一个JSP "view"来进行显示,这样看起来JSP页就象是一个普通的嵌入的JavaBean。可以根据负责控制的servlet的内部逻辑来选择适当的JSP页面进行显示。这样,JSP文件成为了一个漂亮的template view。这就是另一种发展,并被另外一些开发者所推崇至今。

进入Template Engines
  如果使用template engine来代替通常目的的JSP, 接下去的设计将变得简单,语法更简单,出错信息更易读,工具也更用户化。一些公司已经做了这样的引擎,最著名的可能是WebMacro,他们的引擎是免费的。

  开发者应该明了,选定一个template engine来取代JSP提供了以下一些技术优势,而这些同时也正是jsp的不足之处:

  问题 #1: Java代码太模板化了

  虽然被认为是不好的设计,JSP仍试图将Java代码加入web页面。这有些象是Java曾经做过的事情,即对C++的简化修改,template engines也通过将jsp中的较低层的源码移去来使之简化。而Template engines实行了更好的设计。

  问题 #2: 要求写Java代码

  在JSP页中要求写一些Java代码。例如,假设某页要决定当前web应用中根的上下文从而导向其主页,在JSP中最好使用如下Java代码:

  /index.html">Home page

  你可以试图避免Java代码,而使用 标记,但这将给你如下难以阅读的字符串:

  /index.html">HomePage

  使用template engine则没有Java代码和难看的语法。这里是同样要求下在WebMacro中的写法:

  Home page

  在WebMacro中, ContextPath 作为 $Request变量的一个属性,使用类似Perl的语法。其它template engines使用了其它的语法类型。

  再看另一个例子,假设一个高级的"view"需要设定一个cookie来记录用户缺省的颜色配置 -- 这种任务看起来大概只能由view而不是servlet控制器来完成。在JSP中要有这样的Java代码:

  <% Cookie c = new Cookie("colorscheme", "blue"); response.addCookie(c); %>

  在WebMacro中则没有Java代码:

  #set $Cookie.colorscheme = "blue"

  作为最后一个例子,假如又要重新找回原来的cookie中的颜色配置。对于JSP,我们可以认为也有一个相应的工具类来提供帮助,因为用getCookies()直接做这样低层的会变得可笑而且困难。在JSP中:

  <% String colorscheme = ServletUtils.getCookie(request, "colorscheme"); %>

  在WebMacro中没有对工具类的需要,通常是:

  $Cookie.colorscheme.Value

  对于必须去写jsp的图形界面设计师,哪一种语法更容易学习呢?

  JSP 1.1 引入了自定义标记(custom tags)允许任意的和HTML相似的标记在JSP页面中在后台执行Java代码,这将具有一定的价值,但前提是要有一个广泛知晓的,全功能的,可以免费得到的,标准化的标记库。目前还没有出现这样的标记库。

时间: 2024-10-22 04:49:37

我认为JSP有问题(上)_JSP编程的相关文章

JSP应用的安全问题_JSP编程

一.概述  当网络编程越来越方便,系统功能越来越强大,安全性却指数倍地下降.这恐怕就是网络编程的不幸和悲哀了.各种动态内容生成环境繁荣了WWW,它们的设计目标就是为了给开发者更多的力量,给最终用户更多的方便.正因为如此,系统设计师和开发者必须明确地把安全问题作为一个考虑因素,事后追悔很难奏效.  从安全的角度来看,服务器端WWW应用的弱点来源于各种各样的交互能力和传输通道.它们是攻击者直接可以用来影响系统的工具.在攻击者寻找和利用系统安全漏洞时,它们总是给系统安全带来压力.对付所有这些攻击的通用

一个开发人员眼中的JSP技术(上)_JSP编程

(作者:天译编译 2000年12月01日 14:26) JavaServerTM Pages(JSP)技术为我们提供了一种建立动态网页的简单方法,而且也简化了构造web程序的工作.本文从一个开发人员的角度对JSP技术做了一个全面介绍(并提供了一些JSP实例程序). 前言 JavaServer Pages技术可以让web开发人员和设计人员非常容易的创建和维护动态网页,特别是目前的商业系统.作为JavaTM技术的一部分,JSP能够快速开发出基于web.独立于平台的应用程序.JSP 把用户界面从系统内

Java从服务器上获取时间动态显示在jsp页面实现思路_JSP编程

Java获取服务器时间,动态显示到jsp页面,大家都是到Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能. 本人是给电视做系统,客户要求页面能显示时间,因为电视浏览器获取的时间不对,没办法只能从服务器获取时间,但是问题来了,服务器的时间获取一次就成静态的了,客户不满意,但也没办法,只能这样.不过这个问题在我这老惦记着,今天看到有个例子,说把Java获取服务器的时间转化成毫秒,然后用js每一秒刷新一次就可以动态显示,所以就有了下面的 复制代码 代码如下:

JSP语法Page指令_JSP编程

Page 指令  定义JSP文件中的全局属性.  JSP 语法<%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFl

使用JSP开发WebMail系统_JSP编程

电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook.Foxmail等)与提供邮件服务的服务器(如163.net.263.net.371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和

JSP连接Access数据库_JSP编程

一.建立数据库及ODBC数据源 1.建立jcc.mdb数据库及user表      2.添加测试数据 3.配置ODBC数据源 二.在<%wwwroot%>/下,新建Access数据库连接文件Select.jsp Select.jsp源码如下: <%@page contentType="text/html;charset=gb2312"%> <%@page import="java.sql.*"%> <html> <

JSP开发入门(二)----JSP语法的基本原理_JSP编程

安装之后,接下来我们要讨论JSP的语法.如果要偷懒,你可以下载语法卡而如果你不熟悉 Java的程序设计,你可能会想要参考Sun的使用手册:然而,网站建立者不应该做太多的Java发展.除了几个函式呼叫之外,出现在你JSP网页上的Java程序代码应该将它减到最少; 记住这点之后,现在让我们先来看看JSP的编译器指引与指令组件,之后我们将解释JavaBeans与内部对象. JSP编译器指引与指令组件有五种型态.JSP 1.0之后,大部分的JSP是包含在以<% 作为开始%>作为结束的单一卷标里.新的

jsp是什么文件 如何打开jsp格式的文件_JSP编程

jsp格式文件是一种动态网页技术标准,是用java语言编写的动态网页程序文件,主要出现在网站开发的过程当中.不过有些人会在下载的过程中无意间下载到jsp格式文件,比如jb51.jsp,出现这种情况应该是网站有防盗链功能的原因(意思A站的内容只需在A站下载,B网站用就属于盗链).如果你是这种情况,那么用下面这个办法即可解决. 解决办法其实也挺简单:就是在下载链接上点击鼠标右键然后选择"另存为"即可下载了. 嗯,上面出现了一个小插曲,现在回到主题jsp文件怎么打开?的问题,作为普通网民或是

JSP学生信息管理系统_JSP编程

本文实例为大家分享了JSP学生信息管理系统源码,JSP+Servlet+Javabean+JDBC+MySQL,供大家参考,具体内容如下 1.service层,进行数据库操作     package com.service; /** * 负责学生信息的所有数据库操作,增删改查 */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQ