【问题标题】:Is customizing DispatcherServlet in Spring MVC a common practice?在 Spring MVC 中自定义 DispatcherServlet 是一种常见的做法吗?
【发布时间】:2009-08-20 08:19:04
【问题描述】:

我是 Spring MVC 的新手。但我在使用 Struts 1.x 方面有一定的经验。我想知道在使用 Spring MVC 时自定义 DispatcherServlet 是否是一种常见的做法,就像人们有时在 Struts 中自定义 ActionServlet 或 RequestProcessor 1.x?

或者让我们稍微扩展一下这个问题。资深Spring MVC程序员定制MVC框架的切入点在哪里?

谢谢。

【问题讨论】:

  • 请您澄清一下您所说的定制是什么意思 - 您是指专门化(正如我回答的那样)还是配置(如 adatapost 回答的那样)?
  • 实际上我的意思是两者,因为我需要有关扩展它的所有信息。此外,我同意你的观点。扩展 DispatcherServlet 并使用 Filter 或 Controller 替换。但是这样一来,Spring MVC 无法为插件开发者提供标准的插件接口。在struts中,有些插件是通过扩展“RequestProcessor”来完成的。
  • 我不太熟悉 Struts 插件架构,但我想说 Spring MVC API 非常简单。恕我直言,这有点名不副实,因为它只是 MVC 模式的真正控制器部分,让您可以根据需要定义视图和模型(通常为 JSP 和 POJO)。
  • 是的,但它几乎(如果不是全部)满足所有要求。这是一个不错的框架。我非常喜欢它。
  • 哦,是的,Spring MVC 很棒——它与 Spring 很好地集成在一起,足以将请求发送给您,之后您可以用它做任何您喜欢的事情。到目前为止,这是我构建 Web 应用程序的首选方式,前端使用 Web 标准 XHTML/CSS 和 JQuery。

标签: java spring spring-mvc


【解决方案1】:

这绝对是一个好习惯。 Spring Framework - Web MVC framework

总结:您可以自定义 Spring 的 DispatcherServlet 通过添加上下文 参数....时特别方便 你有很多共同的功能 在一个控制器中。

【讨论】:

    【解决方案2】:

    DispatcherServlet 与大多数 Spring API 一样,是为扩展而设计的。事实上,如果您发现其中的一部分不适合子类化,请在他们的 JIRA 上提出问题,他们可能会为您解决它(我已经多次这样做了)。

    话虽如此,绝大多数功能都可以通过DispatcherServlet的配置而不是扩展来实现。

    【讨论】:

    • 你是对的。我什至无法说出当前实现无法实现的单一事物。谢谢你的建议。如果我发现有必要,我会提出问题。
    【解决方案3】:

    这是我的建议,我认为扩展调度程序 servlet 将是“一种”解决方案。

    1. 单独验证,从控制器转换(有几个充分的理由)
    2. 让控制器成为服务层的委托人。
    3. 在域/请求对象到达控制器之前完全构建/填充它。

    【讨论】:

    • 如果您认为这是一个好方法,请继续实施。即使我首先提出了这个问题,但我还没有找到必须扩展 DispatcherServlet 的案例。
    【解决方案4】:

    你为什么要专攻org.springframework.web.servlet.DispatcherServlet?

    任何请求预处理都可以/应该使用javax.servlet.Filter 来实现,其余的取决于org.springframework.web.servlet.mvc.Controller 的实现。

    或者查看 adatapost 的答案,它指的是通过 web.xml 文件配置 org.springframework.web.servlet.DispatcherServlet。

    【讨论】:

    • 我问这个问题是为了更好地理解这个框架,看看这种方式能起到什么作用。 :)
    • 你为什么要专攻任何东西?因为您可能有其他人还没有的需求。所以我不明白这样的答案怎么会有赞成票。如果一个类具有 DispatcherServlet 具有的“受保护”方法,则绝对意味着开发人员认为可能需要覆盖它。 Grails 开发人员已经覆盖了 DispatcherServlet,对于他们来说,过滤器不足以自定义某些功能。
    • 总有这种可能性,你可以专攻,但问题是它是否常见,恕我直言,它不是,通常有更好的方法来实现你所需要的,虽然被授予,这可能并非总是如此。
    【解决方案5】:

    一方面,我从未找到扩展 DispatcherServlet 的理由。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2010-11-14
      • 2018-10-03
      • 2021-08-28
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多