最近在看HttpServlet源码时候,碰到ResourceBundle的使用,就此记录一下。
一、ResourceBundle是啥
在package java.util;下
这个类主要用来解决国际化和本地化问题。国际化和本地化是啥,另一篇文章有写,这里直接上用法。
这个类获取的属性也是来自于properties属性文件,获取properties属性有两个方式,一是通过Properties;二是通过ResourceBundle方式。ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取。
Properties与ResourceBundle两个类都可以读取属性文件中以key/value形式存储的键值对,但是ResourceBundle读取属性文件时操作相对简单。
Properties类继承Hashtable,将键值对存储在集合中。基于输入流从属性文件中读取键值对,load()方法调用完毕,就与输入流脱离关系,不会自动关闭输入流,需要手动关闭。Properties这个本文不作展开。
而ResourceBundle该类是基于类读取属性文件:他是将属性文件当作类,意味着属性文件必须放在包中,使用属性文件的全限定性类名而非路径指代属性文件,简单的说,就是将文件放在包中,通过使用类的全限定方式来指定,而不是通过指定路径的方式。如下:
/**
* 基于类读取属性文件:该方法将属性文件当作类来处理,属性文件放在包中,使用属性文件的全限定性而非路径来指代文件
*/
@Test
public void demo() {
ResourceBundle bundle = ResourceBundle.getBundle("com.four.properties.demo");
//这里就可以直接获取该配置文件的属性了
System.out.println("driver=" + bundle.getString("jdbc.driver"));
System.out.println("url=" + bundle.getString("jdbc.url"));
System.out.println("username=" + bundle.getString("jdbc.username"));
System.out.println("password=" + bundle.getString("jdbc.password"));
System.out.println("-----------------------------");
System.out.println("遍历属性文件");
Enumeration<String> keys = bundle.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
System.out.println(key + "=" + bundle.getString(key));
}
}
再说的简单点,就是通过key来获取properties属性配置文件的value,完了,就这样,没啥了
二、HttpServlet中的使用
HttpServlet里使用的是
private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.http.LocalStrings");
这里取得是本地的设置,这个设置来源于这个文件,注意看,他是放在包中的,也是通过类的全限定路径指定文件javax.servlet.http.LocalStrings。
LocalStrings属性配置文件的配置
err.cookie_name_is_token=Cookie name \"{0}\" is a reserved token
err.cookie_name_blank=Cookie name must not be null or empty
err.io.nullArray=Null passed for byte array in write method
err.io.indexOutOfBounds=Invalid offset [{0}] and / or length [{1}] specified for array of size [{2}]
err.io.short_read=Short Read
err.ise.getWriter=Illegal to call getWriter() after getOutputStream() has been called
err.ise.getOutputStream=Illegal to call getOutputStream() after getWriter() has been called
http.method_not_implemented=Method {0} is not defined in RFC 2068 and is not supported by the Servlet API
http.method_get_not_supported=HTTP method GET is not supported by this URL
http.method_post_not_supported=HTTP method POST is not supported by this URL
http.method_put_not_supported=HTTP method PUT is not supported by this URL
http.method_delete_not_supported=Http method DELETE is not supported by this URL
这是他的doget处理方法,通过获取http.method_get_not_supported获取valueHTTP method GET is not supported by this URL
,所以当你servlet继承这个类的时候,doget用父类的处理方式,就会出现这个错误,就是从这里拿到的
今天的文章java中@resource_java.library.path「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69136.html