设置全局信息的标签
在开发国际化的Web应用时,首先需要设置一些全局信息,比如设置用户的本地化信息、设置统一的字符集编码等。接下来将针对国际化标签库中设置全局信息的标签进行详细讲解。
1、标签
<fmt:setLocale>标签用于在JSP页面中显式地设置用户的本地化信息,并将设置的本地化信息以Locale对象的形式保存在某个Web域中,其在Web域中的属性名称为“javax.servlet.jsp.jstl.fml.locale”。使用<fmt:setLocale>标签设置本地化信息后,国际化标签库中的其他标签将使用该本地化信息,而忽略客户端浏览器传递过来的本地信息。
<fmt:setLocale>标签的语法格式如下:
<fmt:setLocale value="locale"
[variant="variant"]
[scope="{page|request|session|application}"]/>
在上述语法格式中,value属性用于指定用户的本地化信息,其值可以是一个字符串或java.util.Locale对象。如果是字符串,则必须包含小写形式的语言编码,其后也可带大写形式的国家编码,两者中间用“-”或“_”连接。如果value属性的值为NULL,<fmt:setLocale>标签将采用客户端浏览器传递过来的本地信息。variant属性用于指定创建Locale实例对象时设置的变量部分,它用于标识开发商或特定浏览器为实现扩展功能而自定义的信息。scope属性用于指定将构造出的Locale实例对象保存在哪个Web作用域中。需要注意的是,value属性和variant属性能支持EL表达式,而scope属性不支持EL表达式。
2、标签
<fmt:requestEncoding>标签用于设置统一的请求消息的字符集编码,该标签内部调用request.setCharacterEncoding()方法,以便Web容器将请求消息中的参数值按该字符集编码转换成Unicode字符串返回。<fmt:requestEncoding>标签的语法格式如下:
<fmt:requestEncoding [value="charsetName"]/>
在上述语法格式中,value属性用于指定请求消息的字符集编码,其类型为String,支持动态属性值。使用<fmt:requestEncoding>标签设置请求编码的示例代码如下:
<fmt:requestEncoding value="gb2312"/>
关于<fmt:requestEncoding>标签还有几点说明,具体如下:
● 调用<fmt:requestEncoding>标签能够正确解码请求参数值中的非ISO-8859-1编码的字符,但是必须在获取任何请求参数之前进行调用。
● 有的浏览器没有完全遵守HTTP规范,在请求消息中没有包含Content-Type请求头,这时需要使用<fmt:requestEncoding>标签来设置请求编码。
如果不设置value属性,首先会采用请求消息的Content-Type头中定义的字符集编码,其次会采用session域中的javax.servlet.jsp.jstl.fmt.request.charest属性的值,再次会采用ISO-8859-1字符集编码。