除了web.xml之外,我自己的个人环境配置文件。可能?

时间:2011-11-02 11:05:40

标签: jsp web-applications tomcat servlets

真的很简单的问题。 webapp可以访问我定义并配置在Tomcat-> Conf类级别的配置文件,还是仅限于web.xml环境变量?

我怀疑答案是否定的,因为webapp访问webapp目录之外的任何内容可能会相当危险。

我不想使用web.xml,因为我不希望此配置进入生产环境。它应该完全驻留在我的dev tomcat实例中。 (这只是一个标志,允许我绕过某些功能,在开发中,这些功能极其缓慢且不包括在内)

这是一个java / jsp webapp btw。

3 个答案:

答案 0 :(得分:0)

您可以在web.xml中使用初始化参数来指定Web应用程序用于初始化的一部分的另一个文件的位置,并加载该文件并将其用于servlet代码中的部分配置init()方法。可以对此方法进行编码,以通过跳过附加初始化来处理文件的不存在,并且文件可以位于应用程序之外。

这是配置第三方内容(如Spring或Hibernate)以及为每个环境定义备用数据库的常用策略。

答案 1 :(得分:0)

Servlet可以打开webapp目录之外的文件(但它们仍受文件系统权限的限制)。

对于您的问题,您可以使用上下文初始化参数。你可以在这里阅读它们:http://tomcat.apache.org/tomcat-5.5-doc/config/context.html。您可以在servlet类中使用getServletContext().getInitParameter()访问它们。

其他选项是在您的开发机器上设置环境变量并使用System.getenv()访问其值。

答案 2 :(得分:0)

  

webapp可以访问我定义并放置在Tomcat-> Conf类级别的配置文件,还是仅限于web.xml环境变量?

您可以将配置文件放在任何位置。您只需要知道它的确切位置,然后就可以使用Java中的一种方式来读取资源。规范方法是将其放在类路径中或将其路径添加到类路径中,以便您可以通过类加载器从类路径中读取它。有关更多详细信息,另请参阅this answer


  

我怀疑答案是否定的,因为webapp访问webapp目录以外的任何内容可能会相当危险。

如果客户端可以通过相应地操纵HTTP请求来控制/更改此行为,那将是危险的。使用设计合理的servlet,这是不可能的。


  

我不想使用web.xml,因为我不希望此配置进入生产环境。

我不确定我是否理解你的担忧。默认情况下,客户端将无法看到web.xml文件(实际上,整个/WEB-INF/META-INF文件夹都不受客户端的直接访问限制。只有当您配置错误/编写的默认servlet时,才有可能客户端能够下载并查看web.xml文件。


  

它应该完全驻留在我的dev tomcat实例中。 (这只是一个标志,允许我绕过某些功能,在开发中,这些功能极其缓慢且不包括在内)

我认为从远程位置下载配置文件是个坏主意。这样其他人都可以看到您的配置文件。您需要通过HTTPS提供服务并对其进行基于登录的访问限制。这一切都很笨拙。