|
Servlet和JSP迈上新台阶(4) 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)的支持。
EL最初是由JSP标准标记库(JSTL)1.0规范定义的,它可协助从JSP页面中删除Java代码。javax.servlet.jsp.el包中所描述的API揭示EL的语义。EL表达式的语义与Java表达式的语义类似;表达式的值计算出来后被插入到当前的输出中。EL可用于标准的或定制的操作的属性值以及模板文本中。下面是EL表达式的结构(其中eXPr为表达式):
|