系统网站怎么做,网站开发jquery,如何设计公司网页,wordpress 邮件找客户他们说一块岩石会引起雪崩。 最近#xff0c;我的一位同事Marcin Radoszewski给了我一块岩石。 您可能永远都不会猜测它是什么#xff0c;但是有机会在许多Web应用程序中使用它。 请允许我向您介绍这块石头。 您可能很清楚发布模式后的重定向 。 使用Spring Framework#… 他们说一块岩石会引起雪崩。 最近我的一位同事Marcin Radoszewski给了我一块岩石。 您可能永远都不会猜测它是什么但是有机会在许多Web应用程序中使用它。 请允许我向您介绍这块石头。 您可能很清楚发布模式后的重定向 。 使用Spring Framework您有几种方法来实现它让我们专注于其中一种 将目标URL作为带有redirect prefix的String返回 。 假设我们有使用这种重定向方法的控制器并且在重定向期间必须传递一些参数例如让它成为某些实体ID RequestMapping(method RequestMethod.POST)
public String onPost(...) {...return redirect:form.html?entityId entityId;
} 如您所见我们的岩石看上去并不危险甚至看上去都不可疑–这到底是怎么了 –您可能会问。 好了要解释一下我们必须看看Spring Framework如何处理您返回的值的方式。 您可以从阅读Spring Framework文档中的解析视图开始然后仔细查看AbstractCachingViewResolver的源代码它是Spring中许多不同的视图解析器的基类包括JSPFreeMarkerVelocityJasper ReportsTiles和XSLT视图解析器。 当resolveViewName方法被调用AbstractCachingViewResolver的它采用了基于HashMap的视图缓存加快鉴于在未来的呼叫解决和缓存关键是使用视图名称和当前语言环境中创建的默认。 现在当您使用上述重定向方法时 Spring Framework将从控制器的方法返回的整个String用作视图名称包括目标URL中包含的所有参数。 每次执行重定向时参数可能会有所不同因此这种重定向将在AbstractCachingViewResolver的视图缓存中留下一个额外的条目从而导致内存泄漏。 多久会终止我的申请 –您可能会问。 这取决于分配给JVM的内存量以及执行的重定向次数–我已经使用-Xmx64M选项进行了一些测试仅通过一个控制器即可构建简单的应用程序-请参见本示例 。 大约76400重定向后应用程序因OutOfMemoryErrorJava heap space终止。 参考 Spring的Web MVC –在Warlocks Thoughts博客上从我们的JCG合作伙伴 Michal Jastak 重定向到Memory Leak 。 翻译自: https://www.javacodegeeks.com/2012/12/springs-web-mvc-redirect-to-the-memory-leak.html