2

我有一个名为 的网页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?

4

3 回答 3

7

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

于 2015-01-13T06:40:27.467 回答
1

您可以直接限制对 URL 的访问,而无需指定角色。这是一个示例:

<security-constraint>
     <web-resource-collection>
        <web-resource-name>Restricted Resource</web-resource-name>
        <url-pattern>/page.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

当用户尝试访问它时,它会显示 HTTP 403 错误(访问请求的资源已被拒绝)。

于 2015-01-13T08:15:44.607 回答
0
<servlet>
    <servlet-name>index.jsp</servlet-name>
    <jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>index.jsp</servlet-name>
    <url-pattern>/dash</url-pattern>
</servlet-mapping>

当你把这个你可以使用像“”这样的hrefs /dash,你不会显示index.jsp

于 2015-01-13T08:59:53.250 回答