`
uule
  • 浏览: 6305416 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

tomcat中处理消息提示的公用类 StringManager.java

阅读更多

代码很简单,主要学习思路。

 

tomcat中处理消息提示的公用类 StringManager.java:

 

其实思路就是每个包名对应一个Stringmanager对象,而非所有公用一个S听ringmanager对象

 

每个包中都有一个LocalStrings.properties的配置文件,定义公用提示信息

每个使用的类中都添加StringManager对象  

 

每个包下都有常量文件Constants.java,其中定义常量Package为该文件DefaultServlet所在包名 

 

使用:

public class DefaultServlet   extends HttpServlet {


	//每个使用的类中都添加StringManager对象
	//每个包下都有常量文件Constants.java,其中定义常量Package为该文件DefaultServlet所在包名
    //public static final String Package = "org.apache.catalina.servlets";
	protected static StringManager sm =  StringManager.getManager(Constants.Package);
	...
	
	//使用1
	//directory.title为properties文件中的属性,可直接读取
	sb.append(sm.getString("directory.title", name));
	
	//使用2
	 throw new SAXException(sm.getString("defaultServlet.blockExternalEntity2");
	...
}

 

StringManger.java中定义了一个ResourceBundle对象,用于读取相应包下的配置文件

 

同时定义一个Hashtable对象,使用Hashtable存放各包对应的StringManager对象,以便使用时直接通过get(packageName) 调用

 

public class StringManager {

    private ResourceBundle bundle;
	
	private static Hashtable managers = new Hashtable();
    
	
	public synchronized static StringManager getManager(String packageName) {
        StringManager mgr = (StringManager)managers.get(packageName);

        if (mgr == null) {
            mgr = new StringManager(packageName);
            managers.put(packageName, mgr);
        }
        return mgr;
    }

    private StringManager(String packageName) {
		//获取各包下配置文件的路径
        String bundleName = packageName + ".LocalStrings";
		
        try {
            bundle = ResourceBundle.getBundle(bundleName);
            return;
        } catch( MissingResourceException ex ) {
            // Try from the current loader ( that's the case for trusted apps )
            ClassLoader cl=Thread.currentThread().getContextClassLoader();
            if( cl != null ) {
                try {
                    bundle=ResourceBundle.getBundle(bundleName, Locale.getDefault(), cl);
                    return;
                } catch(MissingResourceException ex2) {
                }
            }            
        }
    }

	
	
    //get时,通过内部对象bundle读取properties文件内容
    public String getString(String key) {
        return MessageFormat.format(getStringInternal(key), (Object [])null);
    }


    protected String getStringInternal(String key) {
        if (key == null) {
            String msg = "key is null";

            throw new NullPointerException(msg);
        }

        String str = null;

        if( bundle==null )
            return key;
        try {
            str = bundle.getString(key);
        } catch (MissingResourceException mre) {
            str = "Cannot find message associated with key '" + key + "'";
        }

        return str;
    }
   
}

 。。。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics