将参数传入Tomcatservlet

将参数传入Tomcatservlet,tomcat,web-config,tomcat7,config,Tomcat,Web Config,Tomcat7,Config,我正在使用Tomcat7构建一个Web servlet,作为其工作的一部分,它访问RESTful API。目前,该URL在我的servlet中作为字符串硬编码,但我想将其移出,以便在servlet完成后,我可以传入servlet应该连接到的URL,而不是硬编码。最好的方法是什么?我已经读到我应该在META-INF文件夹中添加一个context.xml文件,但这是否意味着如果我想更改API的URL,我需要重新打包war?使用init参数将servlet的配置外部化为标准的web.xml文件: &l

我正在使用Tomcat7构建一个Web servlet,作为其工作的一部分,它访问RESTful API。目前,该URL在我的servlet中作为字符串硬编码,但我想将其移出,以便在servlet完成后,我可以传入servlet应该连接到的URL,而不是硬编码。最好的方法是什么?我已经读到我应该在META-INF文件夹中添加一个context.xml文件,但这是否意味着如果我想更改API的URL,我需要重新打包war?

使用init参数将servlet的配置外部化为标准的web.xml文件:

<servlet>
    <servlet-name>My servlet</servlet-name>
    <servlet-class>com.foo.bar.MyServlet</servlet-class>
    <init-param> 
        <description>Restful API URL</description> 
        <param-name>restfulApiUrl</param-name> 
        <param-value>http://www.foo.com/api/</param-value> 
    </init-param> 
</servlet>
这确实会迫使您在更改值时重新打包war,除非您将应用程序部署为分解的war


当然,您可以想象其他解决方案:使用系统属性(启动Tomcat时传递)、将其存储在启动时读取的文件中、存储在数据库中等等。

您可以将其放入web.xml中的init参数中。如果您的问题是希望在不重新打包应用程序的情况下更改参数,请从某个位置读取属性文件。这并不能解决OPs的问题,即如果此更改需要重新打包应用程序。我在最后添加了一个注释。
private String restulApiUrl;

@Override
public void init(ServletConfig config) throws ServletException {
    restulApiUrl = config.getInitParameter("restfulApiUrl");
}