【问题标题】:auto invoke main servlet through welcome file list通过欢迎文件列表自动调用主 servlet
【发布时间】:2011-11-06 14:09:17
【问题描述】:

以下 web.xml 似乎不起作用:

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>*.wfn</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>SelectSessionServer.wfn</welcome-file>
</welcome-file-list>

而是显示目录列表。我在那里有一个 index.html 文件,该 index.html 文件有一个指向完全相同的 SelectSessionServer URL 的链接,然后它就可以正常工作了。

("它" = Glassfish & Tomcat)

怎么会?

我已经看到了这个问题 (servlet as welcome-file-list in tomcat 7),它的回答似乎表明我的设置应该可以正常工作。

【问题讨论】:

  • 应该可以正常工作。你是如何部署的?显示目录列表也很奇怪;默认情况下它们是关闭的,所以它们应该是有目的地打开的。谁在管理容器和部署 Web 应用程序?您还是某个服务器管理员?
  • 只有 Glassfish 实际显示目录列表。 Tomcat 给出了 -404 (或任何“不可用”错误),但这已经过时了。我知道这只是一个配置选项,即使我不知道它在哪里。关键是,根据我在此处找到的信息,为什么它不能像我预期的那样工作,而且显然应该如此。我会尝试查看应用服务器的日志,看看里面有什么。
  • 部署使用的是 WAR 文件。但它不应该相关,因为我在应用服务器停止/启动后也得到了这种行为。
  • 我想通了。必须有一个同名的文件。否则,AS 看到“welcome-file”名称,发现它不是文件,并且不会费心将其作为 URL 来“提交”以进行处理。内容无关紧要,不会使用,但文件必须存在。我怀疑这种行为是否是这样指定的,但它解决了 Glassfish 和 Tomcat 中的问题。
  • 因此,即使您的目标是与 Servlet 3.0 兼容的容器,您的 web.xml 也被声明为 Servlet 2.5 而不是 Servlet 3.0?

标签: java tomcat servlets web.xml


【解决方案1】:

确保您的 web.xml 根声明符合 Servlet 3.0 以便将 servlet 映射到欢迎文件。您正在使用 Tomcat 7 和(据说)Glassfish 3,它们是 Servlet 3.0 容器,因此您应该确保您的 web.xml 也被声明为这样。

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

它还将提供新的 Servlet 3.0 功能的额外好处,例如 @WebServlet 注释等。

【讨论】:

  • 谢谢。我会将它添加到我的描述符中,然后 C 会发生什么。
猜你喜欢
  • 2011-08-03
  • 2015-09-21
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 2011-06-24
  • 2014-02-07
相关资源
最近更新 更多