我使用 Spring MVC、Maven 和 jetty-maven-plugin 插件 (7.6.2.v20120308) 在本地开发。
我知道你们中的一些人会认为这不是一个好主意,但我会自动生成一些 .jsp 文件。例如,我有一个我想要动态的dyn.js文件,以包含 JSTL/EL 代码。
简而言之,这就是我所做的:
如果动态 dyn.js 被调用并且解释的缓存版本还不存在,我将请求重定向到一个特殊的控制器。
控制器获取 dyn.js文件的内容,并在我的其他 .jsp 文件所在的同一目录中创建一个包含此内容的dyn.js.jsp文件。我在运行时使用以下内容获取该目录:
getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "tags"
生成 jsp 文件后,我的控制器会返回视图路径(或 ModelAndView),以便可以处理视图。
最终呈现视图后,我将获得结果内容(使用过滤器中的自定义响应包装器),并将其保存到缓存文件中。
这个方法很好用!我很满意。
唯一的问题是,有时在尝试生成动态 dyn.js 时会出现此错误:
Jul 8, 2012 5:15:12 PM org.apache.jasper.servlet.JspServlet _serviceJspFile
SEVERE: PWC6117: File "C:\somepath\src\main\webapp\WEB-INF\tags\dyn.js.jsp" not found
发生这种情况时,无事可做。即使我刷新页面,jsp 也永远找不到,所以我的 dyn.js 不起作用。然后我检查并发现 .jsp 文件确实存在于我的文件系统中(C:\somepath\src\main\webapp\WEB-INF\tags\dyn.js.jsp)!
这个问题似乎是随机发生的。我无法随意重现该问题。我会说它发生在 1/5 的时间里。
在某些情况下,Jetty 似乎无法“看到”生成的 .jsp 文件。
知道什么会触发此问题以及如何解决它吗?
更新:我使用 jetty-maven-plugin 版本 7.6.2.v20120308 。