使JSP无法从外部访问

时间:2017-03-05 11:48:43

标签: java jsp servlets

我有一个由Servlet打开的JSP,因此我可以通过这样做来转发变量:

RequestDispatcher dispatcher = request.getRequestDispatcher("/Page.jsp");
request.setAttribute("filesystem", getFileSystem());
dispatcher.forward(request, response);

如果没有“filesystem”变量,除了侧边栏和标题菜单外,JSP将没有任何内容。

我的问题是,用户仍然可以通过在浏览器中输入website.com/Page.jsp来调用JSP。

有没有阻止用户这样做?

2 个答案:

答案 0 :(得分:1)

实际上,您可以将JSP个文件放在WAR文件中的任何位置,但是如果我们将它放在WEB-INF目录中,它将阻止用户直接从外部访问它

然后重新调整您的代码以考虑这些变化:

RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Page.jsp");
//...
dispatcher.forward(request, response);

答案 1 :(得分:0)

您应该将JSP放在WEB-INF目录中,这是从外部访问的用户无法访问的。从技术上讲,Servlet容器不提供WEB-INF目录中的任何内容,因此我们的JSP不能直接访问。

示例:

   <servlet>
        <display-name>userdata</display-name>
        <servlet-name>userdata</servlet-name>
        <jsp-file>/WEB-INF/userdata.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>userdata</servlet-name>
        <url-pattern>/userdata</url-pattern>
    </servlet-mapping>

注意:考虑使用像Struts,Spring这样的框架,它以更方便的方式处理这些小问题。