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

For*_*rBR 3 java servlets

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

Bal*_*usC 5

你可以用ServletContext#getResource()它.

URL resource = getServletContext().getResource("/WEB-INF/file.ext");
File file = new File(resource.getPath());
// ...
Run Code Online (Sandbox Code Playgroud)

您甚至ServletContext#getResourceAsStream()可以InputStream直接使用:

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.ext");
// ...
Run Code Online (Sandbox Code Playgroud)

正如您在示例中所看到的,ServletContext继承GenericServlet#getServletContext()方法在servlet中可用.


也就是说,我不希望用户直接访问我的任何资源.有点矛盾.无论如何,你是通过servlet提供这些资源的吗?可以通过URL直接访问servlet.这与"直接访问"有什么不同?或者你只是想根据某些条件控制访问?我会说,a Filter更适合这项任务.

通常只有完全隐藏JSP文件才能直接访问.在作为前端控制器的Servlet中(根据MVC模式),您可以将请求转发到JSP文件RequestDispatcher#forward(),您可以使用这些文件获取ServletRequest#getRequestDispatcher().

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)