【问题标题】:How to read the web.xml from a WebApp如何从 WebApp 读取 web.xml
【发布时间】:2009-02-06 14:29:59
【问题描述】:

对于 WebApps,web.xml 可用于存储应用程序设置。我怎样才能阅读这个文件。我的 servlet 在 GlassFish v2 服务器中运行。

【问题讨论】:

  • 也许您可以发布一个示例代码 sn-p 您正在尝试做什么?
  • 我想阅读一些自定义设置。首先我尝试了一个属性文件,但我无法确定文件的路径(它不在System.getProperty("user.dir") 中)。

标签: java web-services jakarta-ee glassfish


【解决方案1】:

不确定我是否完全理解这个问题...

假设您的 Servlet 扩展了 HttpServlet?

HttpServlet 实现了ServletConfig,因此您可以使用以下方法查找 servlet 特定参数:

在 web.xml 中

<servlet>
    <servlet-class>com.acme.Foo</servlet-class>
    <init-param>
        <param-name>my.init.param</param-name>
        <param-value>10</param-value>
    </init-param>
</servlet>

在 servlet 中:

int x = Integer.parseInt(getInitParameter("my.init.param"));

同样,您可以使用以下方法获取全局(上下文范围)设置:

<context-param>
    <param-name>my.context.param</param-name>
    <param-value>Hello World</param-value>
</context-param>

在 servlet 中:

String s = getServletContext.getInitParameter("my.context.param");

当然,如果您将框架与 servlet 一起使用,例如 Spring,那么您可以改用 Spring 的配置文件将设置注入您的 Web 应用程序类。

【讨论】:

  • 看起来不错。但是我需要哪个getServletContext?请参阅下一条评论。
  • javax.servlet.FilterConfig,javax.servlet.GenericServlet,javax.servlet.http.HttpSession,javax.servlet.jsp.PageContext,javax.servlet.ServletConfig,javax.servlet.ServletContextEvent,javax. servlet.ServletRequestEvent 还是 javax.xml.rpc.server.ServletEndpointContext?
  • 您在 Servlet 中调用 getServletContext(),因此您将获得 javax.servlet.ServletContext 的实现。
  • 是否需要扩展HttpServlet?没有静态方法吗?
  • 您还需要添加 ... 标签,否则可能不起作用
【解决方案2】:

添加一个初始化参数:

<init-param> 
    <param-name>InitParam</param-name> 
    <param-value>init param value</param-value> 
</init-param> 

然后从 java 代码中读取它(在一个 servlet 中):

String initParam = getServletConfig().getInitParameter("InitParam");

【讨论】:

    【解决方案3】:

    Doekman,能否解释一下为什么要阅读 web.xml 文件?此文件中的设置以 WebContainer 为目标。如果您想传递配置参数以供您的应用程序加载,则只需使用上下文参数:

    The optional context-param element declares a Web Application's servlet context initialization parameters. You set each context-param within a single context-param element, using and elements. You can access these parameters in your code using the javax.servlet.ServletContext.getInitParameter() and javax.servlet.ServletContext.getInitParameterNames() methods.

    如果您确实需要读取文件,那么我很确定您可以尝试使用 Java IO 加载文件。您唯一需要知道的是 Glassfish 在您的应用程序运行时使用的工作路径。你可以试试这样 System.getProperty("user.dir");

    您可以从那里使用相对路径加载文件。 www.exampledepot.com 上的示例。

    【讨论】:

    • 我尝试了属性文件,但我无法确定相对路径。我的网络服务在 GlassFish v2 中运行。
    【解决方案4】:

    容器的选择不应该与这个问题相关,因为每个容器都应该实现 servlet container 规范,无论是 Tomcat、Glassfish 还是 many others 之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多