OpenSessionInViewFilter

OpenSessionInViewFilter

我已经为我的MVC Web应用程序实现了OpenSessionInViewFilter,它几乎可以完美运行。唯一的问题是,它还会为Web服务器请求的每个图像,js,css等创建会话。这我不想要。

我正在使用struts2,spring和hibernate,这是我的web.xml

<filter>
    <filter-name>lazyLoadingFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>lazyLoadingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


因此,因为我正在映射url-pattern / *,所以它也需要所有图像等。
我尝试将其设置为* .jsp和* .action,但随后又得到了lazyloading-exceptions ...
我应该怎么做?我一直在寻找答案已有5个小时了,即时通讯让我有点头晕。

我需要做的就是使此过滤器忽略所有静态资源。而已!对于其他一切,它都可以运行。听起来很简单,但是我真的很烦,我不知道怎么做。

任何帮助将不胜感激。

我是否需要扩展过滤器以编写自己的过滤器并在其中排除?如果是这样。怎么样?

编辑:
似乎我可以在过滤器链的顶部为我的静态文件设置过滤器映射。然后将它们发送到“ ByPassFilter”,从而绕过这些静态资源的筛选器链。这是要走的路吗?

谢谢你们!

最佳答案

就考虑到具有Bypassfilter的实现而言,如果前面有这样的过滤器,则一旦您跳过了过滤器链中的下一个过滤器,那么基本上该链中的其余过滤器也将被跳过(似乎不会在大多数情况下都是可取的事情)。就像请求的过滤器调用一样


  过滤器1->过滤器2-> Struts Action / BL->过滤器2->过滤器1


因此,在struts动作中处理了请求之后,OpenSessionInViewFilter将会启动(可以通过在web.xml的视图过滤器中的打开会话之后放置另一个旁路过滤器来避免这种情况)。但是总的来说,我一直不希望跳过整个过滤器链以跳过单个过滤器。

我从来没有遇到过要跳过OpenSessionInViewFilter的需要,但是,如果我必须这样做,那么我将拥有一个扩展了OpenSessionInViewFilter过滤器的过滤器,而不是使用Bypassfilter,它将从处理中跳过我的静态资源。

关于java - 如何使OpenSessionInViewFilter排除静态资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10331230/

10-10 13:43