真的很简单的问题。 webapp可以访问我定义并配置在Tomcat-> Conf类级别的配置文件,还是仅限于web.xml环境变量?
我怀疑答案是否定的,因为webapp访问webapp目录之外的任何内容可能会相当危险。
我不想使用web.xml,因为我不希望此配置进入生产环境。它应该完全驻留在我的dev tomcat实例中。 (这只是一个标志,允许我绕过某些功能,在开发中,这些功能极其缓慢且不包括在内)
这是一个java / jsp webapp btw。
答案 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提供服务并对其进行基于登录的访问限制。这一切都很笨拙。