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

时间:2014-12-22 00:44:37

标签: java jsp web.xml custom-url

我有一个名为page.jsp的网页,我只希望它有2个网址:

  • /页的URL-1
  • /页的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个网址:

  • /page.jsp &lt; ==不想要
  • /页的URL-1
  • /页的URL-2

问题: 如何删除JSP的原生网址,并为其分配自定义网址?

3 个答案:

答案 0 :(得分:6)

网址&#39; page.jsp&#39;是因为&#39; page.jsp&#39;放在Web应用程序的文档根目录中。存储在容器中的任何文件,除了&#39; WEB-INF&#39;文件夹可以直接提供给客户端。

即file&#39; /js/myJavascirpt.js'如果您在网址中输入,则会被访问。同样适用于图像,让我们说&#39; /images/picture.png'。

根据WEB-INF的Servlet规范:

  

名为WEB-INF的应用程序层次结构中存在一个特殊目录。此目录包含与应用程序相关的所有不在应用程序文档根目录中的内容。 WEB-INF节点不是应用程序的公共文档树的一部分。 WEB-INF目录中包含的文件不能通过容器直接提供给客户端。但是,使用ServletContext上的getResource和getResourceAsStream方法调用,servlet代码可以看到WEB-INF目录的内容,并且可以使用RequestDispatcher调用公开它。

从规范中可以明显看出,如果您不想让客户端直接访问您的文件,那么这些文件应该存储在&#39; WEB-INF&#39;夹。这就是为什么java web应用程序中的所有类和库都存储在&#39; WEB-INF&#39;之下的原因。文件夹中。

说到问题,你可以简单地将你的jsp文件放在&#39; WEB-INF&#39;文件夹中。

例如: 将您的jsp文件放在&#39; WEB-INF&#39;文件夹:

  

WEB-INF /视图/ 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规范(Ch 10.5)。

答案 1 :(得分: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错误(拒绝访问所请求的资源)。

答案 2 :(得分: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>

当你把它放进去时,你可以使用像“/dash”这样的href,你就不会显示index.jsp