Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->JAVA/JSP教程 ->正文

Servlet和JSP迈上新台阶

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

<servlet>
   <servlet-name>Target</servlet-name>
   <servlet-class>TargetServlet
   </servlet-class>

</servlet>
<servlet-mapping>
   <servlet-name>Target</servlet-name>
    <url-pattern>/Target</url-pattern>
</servlet-mapping>


下面是调用ModernServlet时控制台显示的结果:


javax.servlet.forward.request_uri : /myApp/Modern
javax.servlet.forward.context_path : /myApp
javax.servlet.forward.servlet_path : /Modern
javax.servlet.forward.path_info : null
javax.servlet.forward.query_string : null


将过滤器用于请求调度程序。Servlet 2.4在部署描述符中添加了一个新的元素,以便servlet程序员决定是否将过滤器(filters)应用于请求调度程序。元素的值可以是REQUEST(默认值)、FORWARD、INCLUDE和ERROR:


REQUEST。如果请求直接来自客户机则使用过滤器。


FORWARD。如果请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用传递调用,则使用过滤器。


INCLUDE。只有在请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用包含(include)调用时,才使用过滤器。


ERROR。只有在请求正由错误页面机制处理为一个与元素相匹配的错误资源时才使用过滤器。

Servlet 2.4只支持HTTP 1.1客户机。Servlet 2.3既支持HTTP 1.0,又支持HTTP 1.1,而Servlet 2.4与Servlet 2.3不同,它只支持HTTP 1.1客户机。作为过渡,HTTP/1.0状态码302(暂时建议)仍然存在,而且仍然由javax.servlet.http.HttpServletResponse接口中的SC_MOVED_TEMPORARILY表示。HTTP 1.1具有Found的状态码302,它由HttpServletResponse接口中的静态SC_FOUND表示。

Servlet用作欢迎页面。在Servlet 2.3中,你可以在部署描述符中使用元素列出欢迎文件--当收到一个不完整的URL时将显示的文件。但是,在Servlet 2.3中,在元素中只能使用HTML文件或JSP文件。在Servlet 2.4中,如今可以将一个servlet用作欢迎页面。下例为一个叫做Modern的servlet,它的类为ModernServlet.class,并已被映射到path /Modern。


<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>
<welcome-file-list>

  <welcome-file>Modern</welcome-file>
</welcome-file-list>

此时,若用户键入诸如http://domain/context/(不带资源文件)的URL时,就会调用ModernServlet。

对国际化的新支持。在Servlet 2.3中,没有办法直接告诉客户浏览器应当使用什么字符编码。要实现这一目的,你必须把一个java.util.Locale对象传递给javax.servlet.ServletResponse接口的setLocale方法,如下所示:


response.setLocale(locale);

这意味着你必须首先创建一个Locale对象。

另外一种办法是,在Servlet 2.3中,你可以使用setContentType方法来传递内容类型和字符集,如:


setContentType('text/html;
               charset=UTF-8');

在Servlet 2.4中,javax.servlet.ServletResponse接口中有两个支持国际化的新方法。第一个方法是setCharacterEncoding,它的用法如下:


public void
setCharacterEncoding(String charset)

使用setCharacterEncoding,你可以只将字符编码指定为一个字符串,而不必先创建Locale对象。不过,请注意,要让这种方法起作用,必须在调用getWriter方法之前以及响应提交之前调用它。

第二个新方法是getContextType,作为在ServletResponse对象中调用setContentType、setLocale或setCharacterEncoding方法的结果,它返回在ServletResponse对象中使用的内容类型。

除了javax.servlet.ServletResponse中的这两个方法之外,你还可以利用Servlet 2.4在部署描述符中定义一个新元素:它使servlet程序员不必在他/她的servlet中指定locale-to-charset映射。如何使用这一新元素的例子如下:


<locale-encoding-mapping-list>
  <locale-encoding-mapping>
    <locale>ja</locale>
    <encoding>ISO-2022-JP</encoding>

  </locale-encoding-mapping>
</locale-encoding-mapping-list>


部署描述符的可扩展性。在Servlet 2.3应用程序中,根据DTD文件对部署描述符进行验证。现在Servlet 2.4支持根据模式对部署描述符进行验证。使用模式比使用DTD有以下几点好处:


通过模式可以继承另一个模式(可扩展的)的语法。


模式比DTD更精确。


通过模式可以指定每个元素的内容的实际数据类型。


模式可以用于多个名字空间。


通过模式可以指定一个元素出现的最多和最少次数。
但是,为了向后兼容,要求Servlet 2.4容器支持Servlet 2.3和Servlet 2.2 DTD。

不支持javax.servlet.SingleThreadModel接口。SingleThreadModel接口没有方法,它用于向servlet容器指明,它必须保证不会有两个线程同时执行实施该接口的servlet的服务方法。从servlet技术开始出现到现在,人们普遍误解了这个接口。现在大家都反对用它,因为它会造成混乱,并且在考虑线程安全时在安全性方面给servlet程序员一个错觉。在任何新的开发工作中决不应再使用这个接口。

JSP 2.0中的新特性

JSP 2.0(最初称为JSP 1.3)比JSP 1.2有了重要改进。当然,增加的最重要内容是JSP 2.0容器中加入了对表达式语言(EL)的支持。

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



上一篇:JSP 2.1技术规范投票通过 表达式语言有所改进   下一篇:jsp2.0新特性

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号