从Servlet访问Tomcat上下文路径

6
在我的Servlet中,我想访问上下文的根目录,以便可以进行一些JavaScript缩小。将缩小作为安装过程的一部分来完成是可能的,但我希望在Servlet启动时进行缩小,以降低实现成本。有人知道获取上下文目录的方法,以便我可以加载和写入磁盘文件吗?
4个回答

14

这应该能够为您提供真正的路径,以便您可以用于提取/编辑文件。

Javadoc 链接

我们在上下文监听器中正在执行类似的操作。

public class MyServlet extends HttpServlet {

    public void init(final ServletConfig config) {
        final String context = config.getServletContext().getRealPath("/");
        ...
    }

    ...
}

太棒了!正是我想要的。我猜这就是wrumsby在他的回答中所追求的。谢谢大家。这个网站上的内容质量继续给我留下了深刻印象。 - Casey Watson

2
在我的Servlet中,我想访问上下文的根目录,这样我就可以进行一些JavaScript的缩小。你也可以通过ServletContext#getResource()访问WebContent中的文件。因此,如果您的JS文件位于WebContent/js/file.js,则可以在您的Servlet中使用以下内容获取其File句柄:
File file = new File(getServletContext().getResource("/js/file.js").getFile());

或者获取一个InputStream:
InputStream input = getServletContext().getResourceAsStream("/js/file.js");

话虽如此,你需要多久压缩一次JS文件?我从未见过需要基于请求进行压缩的情况,这只会增加不必要的开销。你可能只想在应用程序启动期间执行一次。如果是这样,那么使用Servlet并不是一个好主意。最好使用ServletContextListener,并在contextInitialized()上执行你的操作。

0

我曾经搜索结果,但却毫无进展。在需要使用JavaScript访问当前contextPath的JSP页面中,实际上非常简单。

只需将以下行放入您的html head内的script块中即可。

// set up a global java script variable to access the context path
var contextPath = "${request.contextPath}" 

-1
你的意思是:
public class MyServlet extends HttpServlet {

    public void init(final ServletConfig config) {
        final String context = config.getServletContext();
        ...
    }

    ...
}

还是更复杂的东西?


这可能是正确的路径,但我认为它并不能完全满足我的需求。我仍然需要能够打开上下文目录中的文件。 - Casey Watson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接