我想知道是否有人只有通过servlet访问网站资源的解决方案。 我拥有WEB-INF下的所有资源。换句话说,我不希望用户直接访问我的任何资源。
答案 0 :(得分:5)
您可以使用ServletContext#getResource()
。
URL resource = getServletContext().getResource("/WEB-INF/file.ext");
File file = new File(resource.getPath());
// ...
您甚至可以使用ServletContext#getResourceAsStream()
直接获得InputStream
:
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.ext");
// ...
正如您在示例中所看到的,继承的ServletContext
方法在servlet中可以使用GenericServlet#getServletContext()
。
也就是说,短语我不希望用户直接访问我的任何资源。有点矛盾。无论如何,你是通过servlet提供这些资源的吗?可以通过URL直接访问servlet。这与“直接访问”有什么不同?或者你只是想根据某些条件控制访问?我会说,Filter
更适合这项任务。
通常只会完全隐藏JSP文件以免直接访问。在作为前端控制器的Servlet中(根据MVC模式),您可以使用RequestDispatcher#forward()
将请求转发到JSP文件,而ServletRequest#getRequestDispatcher()
又可以通过{{3}}获取。
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
答案 1 :(得分:0)
您可以隐藏最终用户的jsp。实际上,您甚至不必使用Web应用程序部署原始jsp文件,您可以预编译它们:
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation
隐藏html / js / css文件的唯一方法就是不使用它们。发送到浏览器的任何内容都可以在那里查看。