【发布时间】:2010-09-08 14:57:27
【问题描述】:
在我的 Servlet 中,我想访问上下文的根,以便我可以做一些 JavaScript 缩小。
可以在安装过程中进行缩小,但我想在 Servlet 启动时进行以降低实施成本。
有谁知道获取上下文目录以便我可以将文件加载和写入磁盘的方法?
【问题讨论】:
在我的 Servlet 中,我想访问上下文的根,以便我可以做一些 JavaScript 缩小。
可以在安装过程中进行缩小,但我想在 Servlet 启动时进行以降低实施成本。
有谁知道获取上下文目录以便我可以将文件加载和写入磁盘的方法?
【问题讨论】:
我在谷歌上搜索结果并没有找到任何地方。在需要使用 Java Script 访问当前 contextPath 的 JSP 页面中,这实际上是相当容易的。
只需将以下行放入您的 html 头 中的 script 块内。
// set up a global java script variable to access the context path
var contextPath = "${request.contextPath}"
【讨论】:
这应该为您提供可用于提取/编辑文件的真实路径。
我们在上下文监听器中做类似的事情。
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext().getRealPath("/");
...
}
...
}
【讨论】:
在我的 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() 上做你的事。
【讨论】:
你的意思是:
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext();
...
}
...
}
或者更复杂的东西?
【讨论】: