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

时间:2020-12-06  来源:apache  阅读:

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

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;
    }
  
}

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

http://m.bbyears.com/jiaocheng/114758.html

推荐访问:eclipse配置tomcat
相关阅读 猜你喜欢
本类排行 本类最新