Java Spring MVC过滤器解决方案

Java Spring MVC过滤器解决方案,java,jsp,servlets,spring-mvc,Java,Jsp,Servlets,Spring Mvc,我需要你对过滤器使用的建议。只是想知道我在想什么 这是一个很好的可行方法。 因此,我的任务是使用JSP、Spring MVC 2.5、javascript等开发5-6个屏幕 这些屏幕共享许多常用数据元素,如下拉列表等。我在想 实现过滤器并在spring ModelMap中填充这些下拉值 就在过滤器中,因此每个屏幕都属于过滤器的URL模式 获取此数据。 这是一种正确的方法吗?我相信过滤器可以做到这一点,但是我会远离这种方法。您还可以使用Spring的拦截器来做同样的事情,并且仍然利用Spring的


我需要你对过滤器使用的建议。只是想知道我在想什么 这是一个很好的可行方法。
因此,我的任务是使用JSP、Spring MVC 2.5、javascript等开发5-6个屏幕 这些屏幕共享许多常用数据元素,如下拉列表等。
我在想 实现过滤器并在spring ModelMap中填充这些下拉值 就在过滤器中,因此每个屏幕都属于过滤器的URL模式 获取此数据。

这是一种正确的方法吗?

我相信过滤器可以做到这一点,但是我会远离这种方法。您还可以使用Spring的拦截器来做同样的事情,并且仍然利用Spring的特性,例如依赖项注入、事务管理和Spring数据包

在调度程序的配置中,设置拦截器

<mvc:interceptors>
    <mvc:interceptor>
       <mvc:mapping path="/**"/>
       <bean class="org.my.domain.interceptors.LookupHandlerInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

这种方法允许您利用应用程序中可能使用的其他Spring特性,例如您可能设置的任何持久性。然后,您可以在数据库中管理此列表。

我认为,在应用程序的一个单独部分中违反最小意外和隐藏对控制器的正确功能至关重要的代码的原则是不值得的,因为这样做会挤出一点“魔力”/“聪明”

为什么要对未来的开发人员隐藏设置屏幕的代码

仅仅因为它们现在都共享共同的参考数据,它们会永远存在吗?一旦对不同屏幕的要求开始出现分歧,就会很快变得难看


使用继承而不是组合来创建控制器基本上有所有的缺点,除此之外,您甚至看不到控制器中的代码。我只需创建一个实用程序bean来执行公共工作,将其注入控制器,然后编写一行
@modeldattribute
方法来调用它。当他们的个人需求在未来发生变化时,混乱会少很多。

Filter?绝对不是。也许是Spring拦截器,但我个人不愿意在追求代码重用的过于微观的方法时如此严重地违反最小惊喜原则。将代码放入实用程序类中,并从每个控制器上的@ModelAttribute方法调用它。@Aff我同意拦截器方法,我已成功实现了这种方法。感谢Aff的评论。微代码重用方法是我的目标:)谢谢Kevin。我认为要在model属性中持久化数据,我必须使用@SessionAttributes和modelMap在多个请求之间持久化数据。
public class LookupHandlerInterceptor extends HandlerInterceptorAdapter {

        @Autowired
        LookupLoaderApplicationListener loader;

        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
             request.setAttribute("lookupList", loader.getCategories());
             return super.preHandle(request, response, handler);
        }
    }