我有一个名为的网页page.jsp,并且只希望它具有2个URL:
page.jsp
我在 web.xml中 写道:
<servlet> <servlet-name>Page</servlet-name> <jsp-file>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>
但是现在,它具有3个URL:
问题: 如何删除JSP的本机URL,并为其分配自定义的URL?
URL“ page.jsp”起作用是因为“ page.jsp”位于Web应用程序的文档根目录中。除“ WEB- INF”文件夹外,您容器中存储的任何文件都可以直接提供给客户端。
即 如果在网址中键入文件“ /js/myJavascirpt.js”,则将对其进行访问。同样适用于图像,比方说’/images/picture.png’。
根据WEB-INF的Servlet规范:
在应用程序层次结构中存在一个特殊目录,名为WEB-INF。此目录包含与应用程序相关的所有内容,这些内容不在应用程序的文档根目录中。 WEB- INF节点不是应用程序的公共文档树的一部分。 容器不能将WEB- INF目录中包含的文件直接提供给客户端。但是,使用ServletContext上的getResource和getResourceAsStream方法调用,Servlet代码可以看到WEB- INF目录的内容,并且可以使用RequestDispatcher调用公开WEB-INF目录的内容。
根据规范,很明显,如果您不想让客户端直接访问文件,则这些文件应存储在“ 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 Java Servlet规范的JavaTM Servlet 3.0(第10.5章)。