Servlet和JSP技术特性

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中)进行了测试。

十多年的嵩明网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整嵩明建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“嵩明网站设计”,“嵩明网站推广”以来,每个客户项目都认真落实执行。

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

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

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页面中的代码示例如下

 
 
 
  1. out.println("
    Remote Port : " +  
  2. request.getRemotePort());  
  3. out.println("
    Local Name : " +  
  4. request.getLocalName());  
  5. out.println("
    Local Addr : " +  
  6. request.getLocalAddr());  
  7. out.println("
    Local Port : " +  
  8.  
  9. request.getLocalPort()); 

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

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

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

 
 
 
  1.  
  2. Modern servlet-name> 
  3. ModernServlet  
  4. servlet-class> 
  5. servlet> 
  6.  
  7. Modern servlet-name> 
  8. /Modern url-pattern> 
  9. servlet-mapping> 
  10.  
  11. Target servlet-name> 
  12. TargetServlet  
  13. servlet-class> 
  14.  
  15. servlet> 
  16.  
  17. Target servlet-name> 
  18. /Target url-pattern> 
  19. servlet-mapping> 

网站标题:Servlet和JSP技术特性
新闻来源:http://www.hantingmc.com/qtweb/news21/5121.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联