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

我刚刚开始使用JSP并遇到了一个问题 .

据我所知,WEB-INF下的JSP页面可以通过浏览器访问,其中包含localhost中的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 页面?

回答(2)

2 years ago

据我所知,WEB-INF下的JSP页面可以通过浏览器访问,其中包含localhost中的URL

不,这恰恰相反 . WEB-INF下的所有内容都可以通过浏览器访问 .

将它们放在那里是一个很好的做法,因为你从不希望任何人直接从浏览器访问JSP . JSP是视图,请求应首先通过控制器,然后调度(即 forwards ,而不是重定向,请参见RequestDispatcher.forward() vs HttpServletResponse.sendRedirect())到右视图 .

2 years ago

'/WEB-INF/' 被视为受保护/安全文件夹,除非确实需要,否则不建议将其访问 . 如果您仍想使这些文件可用,请尝试在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>

您可以通过使用部署描述符中的元素声明映射来明确指定映射 . 您可以使用WAR根目录中的JSP文件路径指定 <jsp-file> 元素,而不是 <servlet-class> 元素 .