Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过servlet访问资源(CSS、HTML、图像、JS)_Java_Servlets - Fatal编程技术网

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

Java 通过servlet访问资源(CSS、HTML、图像、JS),java,servlets,Java,Servlets,我想知道是否有人有只通过servlet访问网站资源的解决方案。 我的所有资源都在WEB-INF下。换句话说,我不希望用户直接访问我的任何资源。你可以使用它 URL resource = getServletContext().getResource("/WEB-INF/file.ext"); File file = new File(resource.getPath()); // ... 您甚至可以使用来直接获取: InputStream input = getServletContext()

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

你可以使用它

URL resource = getServletContext().getResource("/WEB-INF/file.ext");
File file = new File(resource.getPath());
// ...
您甚至可以使用来直接获取:

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.ext");
// ...
正如您在示例中所看到的,可以通过继承的方法在servlet中使用


也就是说,我不希望用户直接访问我的任何资源。这有点矛盾。您是通过servlet来提供这些资源的吗?servlet可以通过URL直接访问。这与“直接访问”有何不同?或者您只是想根据某些条件控制访问?我认为,a更适合这个任务

通常只会完全隐藏JSP文件,不允许直接访问。在充当前端控制器(根据MVC模式)的Servlet中,您可以将请求转发到JSP文件,然后使用JSP文件获取请求


您可以对最终用户隐藏jsp。事实上,您甚至不必在web应用程序中部署原始jsp文件,您可以预编译它们:


隐藏html/js/css文件的唯一方法是不使用它们。发送到浏览器的任何内容都可以在那里查看。

我原以为问题是“我不希望用户通过键入直接URL来查看浏览器中的资源”。将您想要阻止“直接访问”的文件放入WEB-INF,并让servlet访问资源,对我来说听起来像是“最佳实践”。@winestude:通常只关心JSP文件,因为您希望在完全由MVC控制的应用程序中隐藏视图。但是对于CSS/HTML/Images/JS这样的静态资源呢?不,问题的解决方式不同。因为实际的功能需求也不清楚,所以不清楚是如何实现的。你的观点很好。但是,如果servlet在运行时生成资源(在我的经验中并非闻所未闻,尽管我不同意这种做法),该怎么办?如果这些CSS/HTML/JS/等的片段是通过servlet处理的,那么这是一个合理的用法。但是,如果您只是将字节从WEB-INF导入浏览器而不做任何事情,那么servlet将扮演一个代理角色,它不适合这个角色。
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);