我有一个由Servlet打开的JSP,因此我可以通过这样做来转发变量:
RequestDispatcher dispatcher = request.getRequestDispatcher("/Page.jsp");
request.setAttribute("filesystem", getFileSystem());
dispatcher.forward(request, response);
如果没有“filesystem”变量,除了侧边栏和标题菜单外,JSP将没有任何内容。
我的问题是,用户仍然可以通过在浏览器中输入website.com/Page.jsp
来调用JSP。
有没有阻止用户这样做?
答案 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这样的框架,它以更方便的方式处理这些小问题。