从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()上做事情。