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