Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在WEB-INF文件夹的子文件夹中访问JSP?_Java_Eclipse_Jsp_Web Inf - Fatal编程技术网

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

Java 在WEB-INF文件夹的子文件夹中访问JSP?,java,eclipse,jsp,web-inf,Java,Eclipse,Jsp,Web Inf,我刚开始使用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,遇到了一个问题

据我所知,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
页面吗

据我所知,WEB-INF下的JSP页面可以通过URL位于localhost中的浏览器进行访问

不,正好相反。WEB-INF下的所有内容均无法通过浏览器访问


将它们放在那里是一种很好的做法,因为您永远不希望任何人直接从浏览器访问JSP。JSP是视图,请求应首先通过控制器,然后控制器将其分派(即转发,而不是重定向,请参阅)到右侧视图。

'/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>

MyJSP
/WEB-INF/MyFolder/*
MyJSP
/ViewMyJsp.jsp

可以通过在部署描述符中使用元素声明映射来显式指定映射。不是
元素,而是指定一个
元素,该元素具有从WAR根目录到JSP文件的路径。

仅供参考:Web请求无法直接访问
Web-INF
中的JSP(或任何其他资源)。
WEB-INF
中的资源只能通过代码访问。如果您有选择权,您应该使用像Spring MVC/Boot这样的现代系统,而不是手工编写servlet和使用JSP。@chrylis JSP过时了吗?是的;它与特定的servlet模型相关联,不适用于许多测试场景或电子邮件等。Thymeleaf通常是新项目的更好选择。啊,好的。如果my@WebServlet是“/myjsp”,并且有人键入“/MyProject/myjsp”作为URL,他们仍然能够访问myjsp.jsp页面吗?