我该如何隐藏WEB-INF文件夹中的JSP文件?

7
在一个简单的Java网络应用程序中,假设你有一个名为TestServlet.java的servlet。在部署描述文件(web.xml)中,例如你可以将请求映射到TestServlet,比如将请求/testpage映射到TestServlet,这样当请求/testapplication/testpage时,TestServlet将处理该请求。然后你可以编写"Hello World"并发送响应。
在目录结构中(部署到Web服务器的应用程序) ,TestServlet.java将放置在:
webapps\testapplication\WEB-INF\classes\com\packagename\TestClass.java

这意味着无法通过浏览器(例如输入URL)访问该文件。
您还可以获取请求调度程序并将请求和响应对象转发到JSP文件,例如 .getRequestDispatcher("/test.jsp")。但是这样该文件将位于
webapps\testapplication\test.jsp

因此,连接到http://server.com/test.jsp也会获取这个文件。

我希望将文件隐藏在WEB-INF文件夹中,以便客户端不能访问,除非使用我提供的映射。

什么是适当的方法来做到这一点?


隐藏 WEB-INF 文件夹中的文件是什么意思? - Jayasagar
我希望文件放在WEB-INF文件夹下面。jsp文件。 - Koray Tugay
1
像往常一样,BalusC 给出了正确的答案:https://dev59.com/F1LTa4cB1Zd3GeqPWgid - Koray Tugay
2个回答

10

我想将文件隐藏在WEB-INF文件夹中,这样客户端就无法访问它。

例如,将您的jsp文件保存在WEB-INF文件夹下 - (WEB-INF/jsp),这样默认情况下Web容器不允许客户端直接访问WEB-INF文件夹中的资源,但RequestDispatcher可以访问它。

request.getRequestDispatcher("/WEB-INF/test.jsp").forward(request, response);


但我的问题是,在Java Servlet中,我应该如何给JSP文件提供路径?像getRequestDispatcher(“WEB-INF / test.jsp”)这样吗?这是正确的方式吗? - Koray Tugay
你的答案不正确,如果你更正了它,我会将其标记为已接受。 - Koray Tugay
谢谢@KorayTugay :). 我错过了给出完整的代码片段行。现在我已经纠正了它。 - Jayasagar
默认情况下,Web容器不允许直接访问WEB-INF文件夹下的资源。但是Jetty似乎并非如此。Jetty可以愉快地提供WEB-INF文件夹下的所有内容。 - Reinderien

0
如果你正在使用jsf,你可以将这个文件放在WEB-INF文件夹中,并使用导航规则将请求映射到页面。但是如果你没有使用jsf,你可以创建一个过滤器,使用<url-pattern>属性将其映射到url "/test.jsp",并重定向到任何你想要的地方(比如WEB-INF中的页面)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接