我刚刚开始使用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 回答
'/WEB-INF/'
被视为受保护/安全文件夹,除非确实需要,否则不建议将其访问 . 如果您仍想使这些文件可用,请尝试在web.xml中添加以下servlet映射 . 希望能帮助到你您可以通过使用部署描述符中的元素声明映射来明确指定映射 . 您可以使用WAR根目录中的JSP文件路径指定
<jsp-file>
元素,而不是<servlet-class>
元素 .不,这恰恰相反 . WEB-INF下的所有内容都可以通过浏览器访问 .
将它们放在那里是一个很好的做法,因为你从不希望任何人直接从浏览器访问JSP . JSP是视图,请求应首先通过控制器,然后调度(即 forwards ,而不是重定向,请参见RequestDispatcher.forward() vs HttpServletResponse.sendRedirect())到右视图 .