网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > J2EE > Servlet/Jsp > 我认为JSP有问题(上)  

我认为JSP有问题(上)

2002-12-08  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏


  (编者:这篇文章的原文首次在国外出现时,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页来说不啻是一项繁重费时的工作。另外,负责网页内容的人员不得不请开发人员来进行所有的更新。为此,人们寻求这一种更好的解决方式。
网管联盟bitsCN@com

  
  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的返回?
网管u家u.bitscn@com

  
  这使很多人接受了已被称为\"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实行了更好的设计。
网管联盟bitsCN@com

  
  问题 #2: 要求写Java代码
  
  在JSP页中要求写一些Java代码。例如,假设某页要决定当前web应用中根的上下文从而导向其主页,在JSP中最好使用如下Java代码:
  
  Home page
  
  你可以试图避免Java代码,而使用 标记,但这将给你如下难以阅读的字符串:
  
  /index.html\">HomePage
  
  使用template engine则没有Java代码和难看的语法。这里是同样要求下在WebMacro中的写法:
  
  Home page
  
  在WebMacro中, ContextPath 作为 $Request变量的一个属性,使用类似Perl的语法。其它template engines使用了其它的语法类型。
  
  再看另一个例子,假设一个高级的\"view\"需要设定一个cookie来记录用户缺省的颜色配置 -- 这种任务看起来大概只能由view而不是servlet控制器来完成。在JSP中要有这样的Java代码:

网管u家u.bitscn@com


  
  <% 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代码,这将具有一定的价值,但前提是要有一个广泛知晓的,全功能的,可以免费得到的,标准化的标记库。目前还没有出现这样的标记库。

TAGs   问题   认为   JSP   代码   Java   页面   view   HTML      
 上一篇:我认为JSP有问题(下)   下一篇:剖析JSP和Servlet对中文的处理(2)
相关文章列表
我认为JSP有问题(上) 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.配置Eclpise+tomcat与实现JSP部署
2.JSP中include指令和include行为区别
3.在JSP中如何实现MD5加密
4.JSP程序流程图
5.ServletContext与ServletConfig分析
6.让FCKeditor在JSP和JSF项目中跑起来
7.JSP报表打印的一种简单解决方案
8.JSP常用语法
9.实现jsp页面得分页显示功能方案
10.Servlet 容器的工作原理 ( 四 )
最新推荐文章:
1.Java程序员必看--扩展鼠标右键菜单功能
2.JSP、Java实现选择框多级连动
3.JSP操作用以提高数据库访问效率
4.详细解析JSP中九个隐含对象
5.jsp/servlet取参数乱码问题分析
6.择JSF而不选Struts的十大理由
7.关于jsp的定时实现过程
8.一个实用的东西——JSP分页
9.缓冲技术提高JSP程序的性能和稳定性
10.jsp超级链接实现"目标另存为"功能
网管论坛交流:
·不疯魔不成活
·令你大开眼界的真正标准化机房,已整理重
·为赈灾,女孩舍身拍“裸照”
·Windows Server 2003服务器群集创建和配
·exchange2k3全套官方资料
·双儿一周岁了。。。特殊的礼物来啦。。
·存储备份技术版块守则
·无盘技术交流区守则
·DOS命令基础大全之命令详解<作者吐血
·Windows XP 操作系统默认设置需要注意的