访问 WEB-INF 文件夹内子文件夹中的 JSP?

Accessing JSP in subfolder within WEB-INF folder?

我刚开始使用 JSPs 并遇到了一个问题。

据我了解,WEB-INF 下的 JSP 页面可以通过浏览器在本地主机中使用 URL 访问:

localhost:8080/MyProject/MyJSP.jsp

但是,如果我在 WEB-INF 文件夹中创建另一个子文件夹(即 'MyFolder')并尝试通过 URL 访问相同的 JSP 页面:

localhost:8080/MyProject/MyFolder/MyJSP.jsp

它给出了错误 404。 JSP 文件导航系统是否与 HTML 文件导航系统区别对待?

编辑:我正在使用 servlet 来显示我的 JSP 页面:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.sendRedirect("MyJSP.jsp");
}

EDIT2:我已按照建议将重定向更改为 requestDispatcher:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/MyFolder/MyJSP.jsp");
dispatcher.forward(request, response);
}

如果我的@WebServlet 是 ("/myjsp"),任何人如果键入 localhost:8080/MyProject/myjsp 是否仍然可以访问我的 MyJSP.jsp 页面?

As I understand, JSP pages under WEB-INF can be accessed via a browser with the URL in localhost

没有。恰恰相反。 WEB-INF 下的所有内容都不能通过浏览器访问。

将它们放在那里是一个很好的做法,因为您永远不希望任何人直接从浏览器访问 JSP。 JSPs 是视图,请求应该首先通过控制器,然后调度(即 forwards,而不是重定向,参见 )到正确的视图。

'/WEB-INF/' 被认为是 protected/secured 文件夹,除非确实需要,否则不建议将其设置为可访问。如果您仍然想让这些文件可用,请尝试在 web.xml 中添加以下 servlet 映射。希望对你有帮助

<servlet>
<servlet-name>MyJSP</servlet-name>
<jsp-file>/WEB-INF/MyFolder/*</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>MyJSP</servlet-name>
<url-pattern>/ViewMyJsp.jsp</url-pattern>
</servlet-mapping>

您可以通过在部署描述符中使用元素声明来显式指定映射。您指定一个 <jsp-file> 元素,而不是 <servlet-class> 元素,其中包含从 WAR 根目录到 JSP 文件的路径。