动态生成的.jsp文件:使用jetty-maven插件的PWC6117错误



我使用Spring MVC、Maven和jetty Maven插件(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:somepathsrcmainwebappWEB-INFtagsdyn.js.jsp" not found

当这种情况发生时,没有什么可做的。即使我刷新页面,也永远找不到jsp,所以我的dyn.js也不工作。然后我检查.jsp文件是否存在于我的文件系统中(C:\somepath\src\main\webapp\WEB-INF\tags\dyn.js.jsp)!

这个问题似乎是随机发生的。我不能随意重现这个问题。我认为这种情况有五分之一的时间发生。

在某些情况下,Jetty似乎无法"看到"生成的.jsp文件。

知道是什么引发了这个问题吗?我该如何解决它?

更新:我使用jetty-maven插件版本7.6.2.v20120308.

对于那些感兴趣的人,我想我找到了一个解决方法。在第一个请求之前创建临时.jsp文件(即使其中没有内容)似乎可以解决问题。

因此,当应用程序启动时,我有一个钩子来创建具有空内容的动态.jsp文件。

我认为问题在于文件路径。当您在控制台上复制路径并将其粘贴到windows资源管理器上时,您无法打开该路径。

最新更新