我正在使用 IBM WebSphere (WAS) 7.0.0.19 来托管基于 Java 的 Web 应用程序,并且我需要将扩展 *.html 映射到特定的 servlet,以便我可以对用户提供的 HTML 进行一些服务器端清理文件。(服务器读取文件,用一些额外的信息对其进行扩充,并将修改后的内容透明地提供给查看页面的人。)
不幸的是,当我这样做时,欢迎文件停止工作。以前,如果我输入目录的 URL,服务器会查找 index.html 并提供它。现在,我刚刚得到一个 403 禁止规则(“禁止 - 按规则。”)。访问日志不再显示任何内容——它们只是声明服务器规则禁止目录索引,这是正确的。我不希望网络服务器为没有 index.html 的目录构建目录,但是当有 index.html 时,我希望它提供该文件。
我的第一个想法是它试图通过我的 servlet 提供 index.html,servlet 找不到文件(因为 url 缺少“index.html”),因此它认为没有 index.html。但是,我输入了一些调试代码,并且非常确信当我只是转到目录本身时,servlet 代码永远不会运行。
我真的不关心 index.html 是否通过 servlet 提供服务——在这个特定文件的情况下,servlet 无论如何都会吐回原始文件。我只希望 index.html 由某些东西提供服务。
这是我的 web.xml 的相关部分
<servlet-mapping>
<servlet-name>PageScrubber</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
对于它的价值,在添加 servlet 映射之前 index.htm 和 index.jsp 无法正常工作。以前只有 index.html 有效。但是,现在它们都不起作用。
我在两个 Oracle 产品中使用了相同的 web.xml:WebLogic (WLS) 和 Oracle Application Server (OAS),没有任何问题。
我很有信心只是添加了这个清理器 servlet 导致了问题,因为删除该指令会导致目录索引重新开始工作。
在使用扩展文档根目录时,我确实发现了一些关于welcome-file-list 不起作用的注释,并且我尝试将 com.ibm.ws.webcontainer.EnablePartialURLtoExtendedDocumentRoot 设置为 true,但这似乎并没有改变任何东西。
我几乎没有想法。有没有人对为什么找不到我的 index.html 有任何想法?提前致谢!