Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->编程语言 ->JAVA/JSP教程 ->Servlet和JSP迈上新台阶
  相关分类: 
ASP
ViualBasic
UML / Rational Rose
PHP4/PHP5
Perl
JAVA/JSP教程
Delphi
ColdFusion
CGI
C/C++
ASP.NET
XML
  站内搜索: 
热门文章排行
热门文章排行 用Eclipse进行可视化Java界面设计(04-11)
JSP Struts之HTML标签库详解(04-28)
jsp,html 清除页面缓存(04-28)
JSP取当前日期(06-03)
jsp 内嵌网页内容--iframe(04-28)
精采文章排行
精采文章排行 Servlet和JSP迈上新台阶(06-03)
jsp2.0新特性(06-03)
JSP 2.1和JSF 1.2规范发布预览版本(06-03)
JSP 2.1技术规范投票通过 表达式语言(06-03)
基于JSP的动态网站开发技术(06-03)
  ·Servlet和JSP迈上新台阶·JSP 2.1技术规范投票通过 表达式语言有所·JSP 2.1和JSF 1.2规范发布预览版本·基于JSP的动态网站开发技术·Java线程的深入探讨·JRun常见问题回答·tomcat 3.1在RedHat下的安装·JSP多种web应用服务器导致JSP源码泄漏漏·我认为JSP有问题(下)

Servlet和JSP迈上新台阶

作者:Webmaster   来源:Linuxdby.com   点击:   日期:2007-06-03 [收藏] [投稿]

  IE是否经常中毒?推荐您

即将面世的J2EE 1.4提供用Java开发Web应用程序的新的Servlet 2.4和JavaServer Pages (JSP) 2.0技术。本文展示了这两种技术的新特性,并在适当的地方提供每个特性的示例代码。本文假设读者熟悉以前的 Servlet 2.3和JSP 1.2版本。给出的例子已用Tomcat 5(包含在Java Web Services Developer Pack 1.2中)进行了测试。

Servlet和JSP毫无疑问是两种应用最广的J2EE技术。Servlet技术是用Java进行Web应用编程的基础,也是JSP的基础。但是,servlet编程可能会非常麻烦。特别是当你不得不发送一个没多少代码的长HTML页面时更是如此。每个HTML标记必须嵌入到字符串中,用PrintWriter对象的显示方式发送。是一种工作单调乏味而烦人的工作。使用servlet的另一个缺点是每一处改变都需要servlet程序员介入。

Sun公司了解到这一问题之后便开发了JSP作为解决方案。在JSP中,程序员和页面设计员的分工变得容易多了,并且当JSP页面更改时会自动进行编译。不过请注意,JSP是servlet技术的一个扩展,而不是废弃servlet。在实际应用当中,servlet和JSP页面一起使用。

Servlet 2.4的新特性

Servlet 2.4提供了几个新类,且不支持javax.servlet.SingleThreadModel接口。这一版本只支持HTTP 1.1,所以Servlet 2.4应用程序不适用于HTTP 1.0客户程序。2.4版增加了请求监听器和请求属性监听器,并能在一个应用程序中将servlet用作欢迎页面。另外,Servlet 2.4还提供了更好的ServletRequest和RequestDispatcher对象,并更好地支持国际化。此外,现在是根据模式而不是文档类型定义(document-type definition,DTD)文件来验证部署描述符是否有效。这就意味着支持部署描述符的可扩展性。

下面具体说明Servlet 2.4的新特性。请求监听器和请求属性监听器。Servlet 2.3增加了servlet上下文相关监听器和会话相关监听器。Servlet 2.4增加了新的javax.servlet.ServletRequestListener和javax.servlet.ServletRequestAttributeListener两种接口,它们会通知你与Request对象有关的事件。如果你对每个Request对象的初始化和撤消感兴趣,你可以实施ServletRequestListener接口。这个接口有两个方法:requestInitialized()和requestDestroyed()。当需要一个Request对象时,servlet容器便调用requestInitialized方法。当不再需要Request对象时,servlet容器便调用requestDestroyed方法。

这两个方法都从servlet容器接收一个javax.servlet.ServletRequestEvent对象。可以从ServletRequestEvent实例获得servlet上下文和servlet请求。

第二个监听器接口ServletRequestAttributeListener处理Request对象属性的添加、更改和删除。该接口有以下方法:


attributeAdded。向Request对象添加新属性时由servlet容器调用。


attributeRemoved。从Request对象中删除属性时由servlet容器调用。


attributeReplaced。Request对象中现有属性值被替换时由servlet容器调用。

这三个方法从servlet容器获得javax.servlet.ServletRequestAttributeEvent类的一个实例。ServletRequestAttributeEvent类扩展了ServletRequestEvent类,并添加了两个新方法:getName和getValue。getName方法返回触发事件的属性的名称,getValue返回属性的值。

代码清单1 给出这两个新的监听器的示例类。当servlet容器调用方法时二者都显示方法名。监听器经过编译后,它们的类文件必须被部署到WEB-INF/classes目录下。ServletRequest中的新方法。在Servlet 2.4中,javax.servlet.ServletRequest接口增加了4个新方法:


getRemotePort。返回发送请求的客户机或最后一个代理服务器的Internet Protocol(IP)源端口。


getLocalName。返回从中接收请求的IP接口的主机名。


getLocalAddr。返回从中接收请求的接口的IP地址。


getLocalPort。返回从中接收请求的接口的IP端口号。

请注意,在Servlet 2.3中,getServerName和getServerPort方法返回的值就是现在getLocalName和getLocalPort返回的值。在2.4版中,getServerName和getServerPort已重新定义。欲了解更多的信息,请查看API文档。

将一个JSP页面中的代码示例如下--


out.println("<br>Remote Port : " +
  request.getRemotePort());
out.println("<br>Local Name : " +
  request.getLocalName());
out.println("<br>Local Addr : " +
  request.getLocalAddr());
out.println("<br>Local Port : " +

  request.getLocalPort());

--该代码生成这样的内容:


Remote Port : 3303
Local Name : localhost
Local Addr : 127.0.0.1
Local Port : 8080


请求调度程序的新特性。使用请求调度程序可将当前请求传递给一个新的资源,或从当前页面引入另一个资源。Servlet 2.4增加了一些属性,它们将被添加到传递给另一个资源的一个Request对象上:


javax.servlet.forward.request_uri
javax.servlet.forward.context_path
javax.servlet.forward.servlet_path
javax.servlet.forward.path_info
javax.servlet.forward.query_string


如果一个Request对象未被传递,则这些属性的值为null。另一方面,在所传递来对象的资源中这些属性将具有非null值。当某一个资源必须只能通过另一个资源调用而不能直接调用时,这些属性值很有用。

举个例子,在一个叫做myApp的Context(上下文)中有一个名为ModernServlet的servlet, ModernServlet被传递给TargetServlet。 在TargetServlet中,显示代码清单2中的代码。

myApp的部署描述符包含以下和元素:


<servlet>
   <servlet-name>Modern</servlet-name>
   <servlet-class>ModernServlet
   </servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>Modern</servlet-name>
   <url-pattern>/Modern</url-pattern>
</servlet-mapping>

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 3 4 下一页

上一篇:JSP 2.1技术规范投票通过 表达式语言有所改进   下一篇:jsp2.0新特性
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·jsp2.0新特性

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。