2008-09-11 282 views
6

在我的Servlet中,我想访问上下文的根,以便我可以做一些JavaScript缩小。从Servlet访问Tomcat上下文路径

在安装过程中可以将minify作为安装过程的一部分,但我希望在Servlet启动时做到这一点,以降低实施成本。

有谁知道获取上下文目录的方法,以便我可以加载和写入文件到磁盘?

回答

13

这应该为您提供可以用来提取/编辑文件的真实路径。

Javadoc Link

我们正在做一个上下文侦听类似的东西。

public class MyServlet extends HttpServlet { 

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

    ... 
} 
+0

太棒了!到底是什么我以后。 我怀疑这是什么wrumsby在他的答案射击。谢谢你们。本网站的内容质量继续令我印象深刻。 – 2008-09-12 05:56:36

-1

你的意思是:

public class MyServlet extends HttpServlet { 

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

    ... 
} 

或者更复杂的东西?

+0

这可能是正确的道路,但我认为它不会让我一路走来。我仍然需要能够打开上下文目录中的文件。 – 2008-09-11 20:42:49

0

我在Google上搜索结果,没有得到任何地方。在需要使用Java脚本访问当前contextPath的JSP页面中,它实际上非常简单。

只需将以下行写入html头内的script块。

// set up a global java script variable to access the context path 
var contextPath = "${request.contextPath}" 
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()上做你的事情。