URL 'page.jsp' 有效,因为'page.jsp' 被放置在您的Web 应用程序的文档根目录中。除了“WEB-INF”文件夹之外,存储在容器中的任何文件都可以直接提供给客户端。
即。如果您在 url 中键入文件 '/js/myJavascirpt.js',它将被访问。同样适用于图像,比如说'/images/picture.png'。
根据 WEB-INF 的 Servlet 规范:
名为 WEB-INF 的应用程序层次结构中存在一个特殊目录。此目录包含与应用程序相关但不在应用程序文档根目录中的所有内容。WEB-INF 节点不是应用程序公共文档树的一部分。WEB-INF 目录中包含的任何文件都不能由容器直接提供给客户端。但是,WEB-INF 目录的内容对于使用 ServletContext 上的 getResource 和 getResourceAsStream 方法调用的 servlet 代码是可见的,并且可以使用 RequestDispatcher 调用公开。
从规范中可以清楚地看出,如果您不想让客户直接访问您的文件,这些文件应该存储在“WEB-INF”文件夹下。这就是为什么 java web 应用程序中的所有类和库都存储在 'WEB-INF' 文件夹下的原因。
当涉及到您的问题时,您可以简单地将您的 jsp 文件放在“WEB-INF”文件夹下。
例如:将您的 jsp 文件放在“WEB-INF”文件夹下:
WEB-INF/views/jsp/page.jsp
并像这样更改您在 web.xml 中的条目:
<servlet>
<servlet-name>Page</servlet-name>
<jsp-file>/WEB-INF/views/jsp/page.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Page</servlet-name>
<url-pattern>/page-url-1</url-pattern>
<url-pattern>/page-url-2</url-pattern>
</servlet-mapping>
来源:访问JSR-000315 JavaTM Servlet 3.0了解 Java Servlet 规范(第 10.5 章)。