从Servlet访问Tomcat上下文路径
时间:2020-03-05 18:51:47 来源:igfitidea点击:
在我的Servlet中,我想访问上下文的根,以便可以进行一些JavaScript压缩。
可以在安装过程中进行最小化,但我想在Servlet启动时进行以减少实现成本。
有谁知道获取上下文目录的方法,以便我可以将文件加载和写入磁盘?
解决方案
回答
你的意思是:
public class MyServlet extends HttpServlet { public void init(final ServletConfig config) { final String context = config.getServletContext(); ... } ... }
还是更复杂的东西?
回答
这应该为我们提供可用于提取/编辑文件的真实路径。
Javadoc链接
我们正在上下文侦听器中做类似的事情。
public class MyServlet extends HttpServlet { public void init(final ServletConfig config) { final String context = config.getServletContext().getRealPath("/"); ... } ... }
回答
我正在搜索结果,却一无所获。在需要使用Java脚本访问当前contextPath的JSP页面中,这实际上非常容易。
只需将以下几行放在script块内的html头中即可。
// set up a global java script variable to access the context path var contextPath = "${request.contextPath}"
回答
In my Servlet I would like to access the root of the context so that I can do some JavaScript minifying
我们还可以通过ServletContext#getResource()访问WebContent中的文件。因此,例如,如果JS文件位于" WebContent / js / file.js",则可以在" Servlet"中使用以下代码来获取它的"文件"句柄:
File file = new File(getServletContext().getResource("/js/file.js").getFile());
或者获取InputStream
:
InputStream input = getServletContext().getResourceAsStream("/js/file.js");
也就是说,我们需要多久压缩一次JS文件?我从来没有见过需要基于请求的压缩,这只会不必要地增加很多开销。我们可能只希望在应用程序启动期间执行一次。如果是这样,那么使用Servlet
是个坏主意。最好使用ServletContextListener
并在contextInitialized()
上做事情。