一尘不染

如何删除JSP的本机请求URL?

jsp

我有一个名为的网页page.jsp,并且只希望它具有2个URL:

  • / page-url-1
  • / page-url-2

我在 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:

  • /page.jsp <== 不需要
  • / page-url-1
  • / page-url-2

问题: 如何删除JSP的本机URL,并为其分配自定义的URL?


阅读 222

收藏
2020-06-10

共1个答案

一尘不染

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章)。

2020-06-10