服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 核心技术 > 查看文档

在web服务客户端应用jsp

  javaserver pages,也叫做jsp,是用来让web开发人员在不需要java代码的情况下实现动态html页面创建的java servlet的扩展技术

  【it专家网独家】当服务器获得对jsp页面的请求后,就启动一系列的事件生成java servlet来响应。通过这种过程,jsp代码转换成为servlet,这也是jsp被开发人员广泛应用的关键。

  页面的jsp代码包含了普通的html标记和特殊的“tag”。普通的html可以被看作被tag的动作所填充的模版。专门的jsp编译器把jsp代码转换成有效的java servlet代码,再用普通的java编译器转换成servlet类。服务器则把jsp页面的名称映射到生成的servlet上。因此,对于web设计人员来说,就好象jsp代码被执行一样,不过背后却做了很多事情。

  简单的"scriptlet" tag允许你在html标签中间加入java语句。你还可以声明完整的java方法,使其成为servlet代码的一部分。用这些方法,你可以访问任何可扩展的java库,因此你可以构建十分复杂的jsp,不过这不见得好罢了。

  jsp tag是对java代码的额外扩展,这些代码一般是手工创建起来很麻烦的。这样做不好的地方在于jsp比普通java代码更难调试。tag扩展了基本的jsp语法,它可以被组织在称为“taglibs”的tag库中。在使用时,必须被显式加入页面中。

  jsp, "model 1" and "model 2"

  jsp技术刚被使用时,程序员很乐意把所有的决策制定等类似功能加入到jsp代码中。这样做很容易,而且你的代码都在一个文件中。但是,随着应用不断变大,这种方法变得很难调式和维护。实际上,它变得非常可怕。

  最近,这种在jsp中集中处理的方式被成为"model 1"。它只用在那些基于很少的用户请求就能做决策的最简单的应用中。而更好的架构被称为"model 2",它是用servlet来检查所有用户的请求,做运算并决定用哪个jsp来显示结果。这种设计模式被称为“model-view-controller (mvc)”,即用jsp根据请求来提供html视图,而用servlet来做控制器。注意:mvc中的m是指底层的数据,在model1和model2中都是如此。

  于是我们很快就能发现,可以用jsp页面来直接访问web服务,解析结果并控制表示。但是,假如页面获得很多用户交互,那么就会由于重复获得同样内容而产生大量的低效复制工作。对于那些最简单的少交互页面。在从web服务获得数据后绘制jsp时,应该间接地工作。

  jsp标准tag库

  很多业界专家在java community process (jsr 52)之下标准化了一套基本的tag,称为jsp standard tag library (jstl)。可是并非像名字那样简单。实际上,由于java servlet和jsp api标准的不断发展,现在存在多种版本的jstl。

  最早的jstl1.0版对应servlet2.3版及jsp1.2版。tomcat 4是实现了这种jsp api的参考servlet引擎。

  jstl1.1版对应servlet2.4版及jsp2.0版。tomcat 5是实现了这种jsp api的参考servlet引擎。

  最新的java enterprise edition 5拥有jstl1.2版。据我所知,这个版本中的更新是实现了javaserver faces应用框架于jsp的集成。java ee 5已在两周前进入了最终发布状态。

  用标准tag库访问web服务

  为了用jsp进行展示,我从apache software foundation网站下载了jstl1.1包。这个包包含了很多很多jstl之外的东西,因为该开源组织在为jsp创建定制tag库方面一直都很积极。我用tomcat5.5.9做servlet容器。

  我们使用的web服务是关联到新闻web服务的techtarget的rss种子。原先的rss代表了rich site summary,但今天,rss则表示really simple syndication。不管怎样,rss使用到很简单的xml文件格式,很适合用jstl来解析。我的jsp页面用两个tag开始,它们指定了被使用的taglib和在tag中出现的命名空间的前缀。此外,还有一些标准的html标签。

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
  <html><head><title>jstl: xml demo</title>
  </head><body bgcolor="#ffffff">
  <h1>test rss feed from techtarget</h1>

  接着,我们用tag来定义如何获得源文件,并用保存在局部变量“document”中的引用解析成标准java xml文档对象。

  <c:import var="docstring" url="http://rss.techtarget.com/80.xml"/>
  <x:parse var="document" doc="${docstring}"/>

  xml解析工作如下:我已经添加了行数以方便解释。第一行用xml taglib的“set”动作把"channel"变量设为xml文档的根元素。第二行把"description"tag的内容加到html标签中。第三行是用于格式化未标号清单的html标签。

1. <x:set var="channel" select="$document//channel" />
2. <p>< x:out select="$channel//description"/></p>
3. <ul>
4. <x:foreach select="$channel//item" >
5.   <li><a href='<x:out select="link" />' >
6.     <x:out select="title"/></a></li>
7. </x:foreach>
8. < /ul>

  rss"channel"元素包含代表每个新闻标题的"item"元素。每个"item"元素有一个"title",一个指向源网站的"link",一大端描述以及一些其它元素。web开发人员可以用很多方法在不同的jsp中使用这些数据。本例中,我只用了一个简单的表示层。

  接着,我们用foreach tag把所有的"item"元素输出到文档中。遵循xpath格式的"select"属性为item元素创建一个nodelist。在第五行,我把"link"元素的内容嵌入到html标签中作为超连接。而在第六行,我用"title"元素的内容创建被显示的文本。

  用浏览器打开tomcat web服务器中的jsp页面,将看到标题为"test rss feed from techtarget,"的页面,以及包含rss描述的段落和一列标题。每个标题都是可以点击的指向对应页面的链接。

  techtarget独家授权文章,严禁转载

  查看本文国际来源 >>

扫描关注微信公众号