我有一个下面的映射,它检索一些“场景”细节并在jsp页面中显示它。Spring MVC控制器中的ModelAndView和byte []
@RequestMapping(value="/{id}",method = RequestMethod.GET)
public ModelAndView showScene(@PathVariable String id){
ModelAndView mv = new ModelAndView("/Scene/scene");
//retrieving Scene using Hibernate
Scene scene = service.getScene(Long.parseLong(id));
mv.addObject("name", scene.getName());
mv.addObject("desc", scene.getDescription());
//etc....
return mv;
}
我的问题是,场景对象中的一个字段是PNG图像作为字节[],我需要显示它。我知道我可以创建另一个控制器来处理所有的.png扩展请求并返回byte []。喜欢的东西:
<servlet-mapping>
<servlet-name>PNGHandler</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
,并发送参考图像为:
mv.add("image", "image/"+scene.getId()+".png");
但后来我需要在PNG控制器再次检索的byte [],它会花费我额外的Hibernate事务。是否有任何解决办法可以保存此事务,而不是两次检索byte []?
预先感谢您。
是的,谢谢你。我可以使用会话,但我正在考虑一种“Spring MVC”方式来做到这一点:) – 2010-12-11 23:17:11
@danny:你可以使用'@ SessionAttributes'来做到这一点,但在我的意见,这是不值得的 - 只使用原始的Session对象。 – skaffman 2010-12-11 23:24:46
使用会话可能会阻止您的应用程序扩展(例如,如果您有两个Web服务器并且需要使会话在两个Web服务器上都可用)。就像已经提到的skaffman一样,你需要关心会话的数量:如果你有很多(和大的)会话,他们将会被持续,那么这种结果会使你的性能变得更糟,那么如果你访问数据库两次。因为当会话持续时,你必须写数组并再次读取它。这会比从数据库中读取要慢得多。 – Ralph 2010-12-12 09:30:13