1

我使用 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 。

4

2 回答 2

0

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

于 2013-10-17T17:25:11.117 回答
0

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

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

于 2012-07-09T01:22:07.297 回答