困扰JSP的一些问题与解决方法

2016-01-29 12:13 1 1 收藏

困扰JSP的一些问题与解决方法,困扰JSP的一些问题与解决方法

【 tulaoshi.com - Java 】

 

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

  本文的目的在于听取对该申明的合理性的评估 -- 通过比较JSP和另一项基于servlets的技术: template engines(模板引擎)。

  直接使用Servlets的问题

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/java/)

  起初,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 (http://webmacro.org, from Semiotek),他们的引擎是免费的。
  开发者应该明了,选定一个template engine来取代JSP提供了这么一些技术优势,这也正是jsp的一些不足之处:

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

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

  问题 #2: 要求Java代码

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

  <a href="<%= request.getContextPath() %>/index.html">Home page</a>
 
  你可以试图避免 Java代码,而使用 <jsp:getProperty> 标记但这将给你六下难以阅读的字串:

  <a href="<jsp:getProperty name="request"
  property="contextPath"/>/index.html">HomePage</a>

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

  <a href="$Request.ContextPath;/index.html">Home page</a>

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/java/)

  在WebMacro中, ContextPath 作为 $Request变量的一个属性,使用类似Perl的语法。其它er template engines使用了其它的语法类型。
  
  再看另 一个例子,假设一个高级的"view"需要设定一个cookie来记录用户

来源:https://www.tulaoshi.com/n/20160129/1485114.html

延伸阅读
标签: Web开发
  用ORACLE9i、oracle8、有很长的一段时间,我把用于JSP中需要注意的问题在这里写出来,仅供大家参考了。 一、如何去处理Clob、BLOB的大类型 CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据: getCharacterStream() 方法返回按unicode编码的输入流(j...
我在安装ORACLE 10g过程中遇到了两个主要问题:如何彻底删除旧版本和如何配制MS Loopback Adapter。现把解决办法贴出来,供大家参考。 一,如何彻底删除旧版本的oracle 1,在cmd里运行DBCA,在这里删除oracle实例,有多少删多少; 2,在开始程序中找到oracle子目录下的Universal Installer,运行以卸载oracle软件; 3...
标签: 孕期
妊娠期做家务能使身体更健康 妊娠期的妈妈可能会很懒惰,本身女性大多都爱享受,又加上了www.tulaoshi.com这么一个良好的理由,况且,家里人也因为她怀了孕而放纵。导致可能生产后身材走样。这并不全是生小孩的缘故哦。所以孕期不能什么都不干,可以少量的运动。做些家务,比如下面这些运动量不大的事情。 1、洗衣...
标签: windows系统
使用Win8.1遇到的一些问题   即便Win8的性能再卓越再小白化,刚开始使用时还是会遇到这样那样的问题,这些问题并非系统本身的故障,而是对系统还不够了解所致,这篇文章提一下要注意的若干问题。 Metro程序运行不正常怎么办? 升级显卡驱动 Metro程序的使用是Win8系统带给用户的最大变化,而Metro应用程序特别依赖图形...
1.网页背景色的设置 犯错机率:很大 普遍性:较广 犯错可能性:懒/不知道 约2年前我曾发现21cn上出现过一次没有设置背景色的情况,当时我用Email通知了他们,自此之后这个问题我从没犯过。绝大部分人的窗口背景颜色都是白色,但如果象我这样个性的人,就会把windows窗口的背景颜色改成灰色或其他色,这样一来,如果你没有设置网页的背景颜色的...

经验教程

788

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部