Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在哪里保存Java web服务中使用的url?_Java_Web Services_Tomcat8 - Fatal编程技术网

在哪里保存Java web服务中使用的url?

在哪里保存Java web服务中使用的url?,java,web-services,tomcat8,Java,Web Services,Tomcat8,我正在编写java web服务,这些服务正在利用其他web服务(某些其他平台的),因此我必须在java web服务中调用这些API,它有url(静态ip)。我想在属性文件中保留包含IP的公共url部分。但有没有办法在tomcat中保留这些属性或URL部分?存储url的更好方法是什么?我总是将这样的常量定义放入JNDI变量中。对于Tomcat来说,这意味着在context.xml中声明它们通常这些常量在生产、测试和开发环境中是不同的,因此它们应该绑定到服务器实例,而不是您的代码。此外,配置信息可能

我正在编写java web服务,这些服务正在利用其他web服务(某些其他平台的),因此我必须在java web服务中调用这些API,它有url(静态ip)。我想在属性文件中保留包含IP的公共url部分。但有没有办法在tomcat中保留这些属性或URL部分?存储url的更好方法是什么?

我总是将这样的常量定义放入JNDI变量中。对于Tomcat来说,这意味着在context.xml中声明它们通常这些常量在生产、测试和开发环境中是不同的,因此它们应该绑定到服务器实例,而不是您的代码。此外,配置信息可能是敏感的(用户名和密码等),因此,如果暴露给任何可以访问代码库的人,这将是一个安全问题

不幸的是,没有关于J2EE容器如何设置和维护JNDI变量的标准。对于Tomcat,它们在context.xml中声明。对于IBMWebSphere,它们是一个管理控制台设置。对于Oracle Weblogic,它们位于需要编译到.war文件中的Weblogic.xml文件中

如果您足够幸运,不必在Weblogic上部署,那么JNDI非常棒。您的.war可以部署到任何环境,并将为该服务器实例选择正确的设置

如果确实需要部署到Weblogic,则有以下选项:

  • 按照@Thilo的建议,在文件系统的“已知”位置使用属性文件
  • 让您的部署脚本打开.war文件,并将xml定义文件替换为适合目标环境的文件

请注意,数据库连接等资源在某种程度上更加标准化。所有J2EE容器都允许您从管理控制台或在Tomcat的情况下通过编辑context.xml来设置数据源。您的代码只需要知道JNDI名称,而不需要知道数据库连接的详细信息。

您可以将它们放到ServletContext中。这样,就可以使用web应用程序容器的管理工具对其进行配置。但这些事情通常都很麻烦。就我个人而言,我会使用Typesafe配置,将所有默认值放入类路径(在WAR文件中),并允许通过主机文件系统上一个已知位置的文件(如果在WAR构建后需要更改)覆盖它们。