我刚开始使用JSP,遇到了一个问题。
据我了解,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")
,如果有人输入MyJSP.jsp
,谁还能访问我的localhost:8080/MyProject/myjsp
页面吗?
答案 0 :(得分:3)
据我了解,WEB-INF下的JSP页面可以通过浏览器使用本地主机中的URL进行访问
不。恰恰相反。浏览器无法访问WEB-INF下的所有内容。
将它们精确地放置在其中是一个好习惯,因为您永远不希望任何人直接从浏览器访问JSP。 JSP是视图,请求应首先通过控制器,然后控制器将其分发(即转发,而不是重定向,请参见)到正确的视图。
答案 1 :(得分:0)
format
被认为是受保护的文件夹,除非真正需要,否则建议不要使其可访问。如果仍要使这些文件可用,请尝试在web.xml中添加以下servlet映射。希望对您有帮助
value
您可以通过在部署描述符中使用元素进行声明来明确指定映射。您可以使用从WAR根目录到JSP文件的路径来指定export type ColumnDefinition<T, F extends (item: T) => unknown> = {
label?: string;
numeric?: boolean;
value: F;
format?: (value: ReturnType<F>) => string;
};
元素,而不是'/WEB-INF/'
元素。