通过servlet访问资源(CSS,HTML,图像,JS)

时间:2010-05-09 02:25:53

标签: java servlets

我想知道是否有人只有通过servlet访问网站资源的解决方案。 我拥有WEB-INF下的所有资源。换句话说,我不希望用户直接访问我的任何资源。

2 个答案:

答案 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文件的唯一方法就是不使用它们。发送到浏览器的任何内容都可以在那里查看。