07-06
19
MessageFormat和复合消息 (Bundle)
作者:Java伴侣 日期:2007-06-19
复制内容到剪贴板 程序代码
package domain.bean;
import java.util.ResourceBundle;
import java.text.MessageFormat;
public class FormatExample {
public static void main(String[] args) {
java.util.ResourceBundle bundle = ResourceBundle.getBundle(
"ApplicationResources");//读取资源文件
String errorsRequired = bundle.getString("errors.required");//找寻Key,返回valuve
//{0}不能为空.
String[] messages = new String[1]; //做一个数组
messages[0] = bundle.getString("lable.name.error");//把String[0]的位置替换成部分消息,这里是"域名"
MessageFormat messageFormat = null;//初始化MessageFormat类
String MessageFormat = messageFormat.format(errorsRequired, messages);//格式化成复合消息
System.out.println(MessageFormat);//打印:域名不能为空.
}
}
import java.util.ResourceBundle;
import java.text.MessageFormat;
public class FormatExample {
public static void main(String[] args) {
java.util.ResourceBundle bundle = ResourceBundle.getBundle(
"ApplicationResources");//读取资源文件
String errorsRequired = bundle.getString("errors.required");//找寻Key,返回valuve
//{0}不能为空.
String[] messages = new String[1]; //做一个数组
messages[0] = bundle.getString("lable.name.error");//把String[0]的位置替换成部分消息,这里是"域名"
MessageFormat messageFormat = null;//初始化MessageFormat类
String MessageFormat = messageFormat.format(errorsRequired, messages);//格式化成复合消息
System.out.println(MessageFormat);//打印:域名不能为空.
}
}
上面这是一段孙卫琴书上的例子.
下面我用MessageFormat类来做另外用途的实现,比如说之前曾写过的数据库连接的例子,现在改写下:
复制内容到剪贴板 程序代码
//JBDC直连
try {
/**
java.util.ResourceBundle bundle = ResourceBundle.getBundle(
"ApplicationResources_db");//读取资源文件
String JDBCmysql=bundle.getString("JDBC.mysql.Driver");
String URLJDBC=bundle.getString("JDBC.URL");
String dbusername=bundle.getString("db.username");
String dbpassword=bundle.getString("db.password");
Class.forName(JDBCmysq).newInstance();//装载驱动
Connection conn=
java.sql.DriverManager.getConnection(URLJDBC,dbusername,dbpassword); Statement stmt=conn.createStatement();//创建Statement,用于执行SQL
ResultSet rs=stmt.executeQuery(sql);//调用executeQuery()取得结果集
while(rs.next())
{
String name=rs.getString("name");
//....
}
**/
String JNDI=bundle.getString("JNDI.DB");
///从数据源获得连接///假设server.xml//web.xml配置完毕
Context initCtx = new javax.naming.InitialContext(); //初始化上下文
DataSource ds = (DataSource) envCtx.lookup(JNDI); //查找数据源
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
try {
/**
java.util.ResourceBundle bundle = ResourceBundle.getBundle(
"ApplicationResources_db");//读取资源文件
String JDBCmysql=bundle.getString("JDBC.mysql.Driver");
String URLJDBC=bundle.getString("JDBC.URL");
String dbusername=bundle.getString("db.username");
String dbpassword=bundle.getString("db.password");
Class.forName(JDBCmysq).newInstance();//装载驱动
Connection conn=
java.sql.DriverManager.getConnection(URLJDBC,dbusername,dbpassword); Statement stmt=conn.createStatement();//创建Statement,用于执行SQL
ResultSet rs=stmt.executeQuery(sql);//调用executeQuery()取得结果集
while(rs.next())
{
String name=rs.getString("name");
//....
}
**/
String JNDI=bundle.getString("JNDI.DB");
///从数据源获得连接///假设server.xml//web.xml配置完毕
Context initCtx = new javax.naming.InitialContext(); //初始化上下文
DataSource ds = (DataSource) envCtx.lookup(JNDI); //查找数据源
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
资源文件ApplicationResources_db.properties:
复制内容到剪贴板 程序代码
JDBC.mysql.Driver=org.gjt.mm.mysql.Driver
JDBC.URL=jdbc:mysql://127.0.0.1
db.username=root
dbpassword=
JNDI.DB=java:comp/env/jdbc/bn
JDBC.URL=jdbc:mysql://127.0.0.1
db.username=root
dbpassword=
JNDI.DB=java:comp/env/jdbc/bn
从上述代码不难看出,我把关于数据库连接的相关信息都提取到了一个资源文件(ApplicationResources_db.properties)中,到时取相应的valuve。这样的好处:开发阶段的数据库可能和运行阶段使用的数据库不一致。如不一致,在后期再重改源文件再进行编译显然很麻烦,而写在资源文件中,更改不用重新编译。
评论: 0 | 引用: 0 | 查看次数: 701
发表评论