如何从客户端GWT应用程序读取JNDI属性

时间:2015-11-19 15:54:39

标签: java gwt jndi

在服务器端,有一个JNDI资源,我需要从客户端GWT应用程序中读取 我知道,我可以进行GWT RPC调用以动态获取JNDI资源,但JNDI资源是一个静态URL,一旦页面加载就不会改变。所以 - 我的想法是在加载页面时加载JNDI资源。
我发现了一个关于如何做到这一点的过时描述 - 在2011年
  https://webtide.com/gwt-and-jndi/
但是,我想知道,对于更新版本的GWT(我使用的是GWT 2.7.0),这是否可行

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。将JNDI参数和一些其他配置值传递给GWT应用程序。

诀窍是动态生成GWT主页(在我的例子中使用JSP)。

对我的GWT应用程序的每次初始调用都会转到前端控制器(Servlet),以用于授权目的和其他一些初始化的东西。

然后我获取所有JNDI参数和其他值,将它们放入请求上下文并调用主页JSP。

在我的JSP页面中,我定义了一个JavaScript哈希并用参数初始化它。

<script type="text/javascript">
var my_params = {
  jndiParam1: '<%= request.getAttribute("jndiParam1") %>',
  exampleUrl: '<%= request.getAttribute("exampleUrl") %>',
  jndiParam2: '<%= request.getAttribute("jndiParam2") %>'
};
</script>

在我的GWT应用程序中,我有一个类HostPageParameter,它使用com.google.gwt.i18n.client.Dictionary来访问JavaScript哈希my_params

public class HostPageParameter {
  private static final String DICTNAME = "my_params";
  private static HostPageParameter instance = null;

  public static HostPageParameter getInstance() {
    if(instance == null) {
      instance = new HostPageParameter();
    }
    return instance;
  }

  private Dictionary myParams;

  private HostPageParameter() {
    try {
      myParams = Dictionary.getDictionary(DICTNAME);
    } catch(MissingResourceException e) {
      // If not defined
      myParams = null;
    }
  }

  public String getParameter(String paramName) {
    return getParameter(paramName, null);
  }

  public String getParameter(String paramName, String defaultValue) {
    String paramValue = null;

    if(myParams != null && paramName != null) {
      try {
        paramValue = myParams.get(paramName);
      } catch (MissingResourceException e) {
        // If not defined
        paramValue = defaultValue;
      }
    }
    return paramValue;
  }
}

要阅读您可以使用的值:

// Without a default value, If not defined, null is returned.
final String jndiParam1 = HostPageParameter.getInstance().getParameter("jndiParam1");

// With default value.
final String exampleUrl = HostPageParameter.getInstance().getParameter("exampleUrl", 
    "http://example.com");