2

我正在使用 MVC 模式在 JSP 中尝试一个项目。

在在线教程中,它有一个 servlet 作为控制器,在其 doPost() 方法中

  • 从模型访问数据
  • 把它放在请求范围内,最后
  • 重定向到视图(JSP 页面)

然后,JSP 页面访问在请求范围中添加的参数,并以所需的布局显示该对象的内容。

Q1: 但是在这种方法中,每个视图会有一个控制器,我的意思是每个 JSP 都会有一个 servlet。这是好习惯吗?或者我应该为多个视图设置一个控制器,并让视图通过标头向控制器发送命令值,控制器将使用该控制器来决定通过模型访问什么以及接下来生成什么视图。

Q2: servlet 是实现 Controller 的标准方式吗?构建控制器还有哪些其他选择?更常用的是什么?

4

1 回答 1

1

这是我早期进入 Java EE 时的同一个问题 ;-)

似乎您已经将控制器的概念直接映射到 servlet,这在您的示例项目中可能是正确的。但是对于一个更现实的项目来说,这几乎是不真实和可维护的。所以对于我下面的回答,请记住,控制器和 servlet 是两个不同的概念,我打算先回答你的第二个问题。

Q2:

由于servlet映射必须在web.xml中硬编码,这很麻烦(我的意思是,你更喜欢写Java代码而不是XML的东西,对吧?),现在主流的MVC框架(struts、Spring MVC等)都采取了类似的方式单个“调度程序”servlet 实践。

这个 servlet 引导框架,加载您的自定义控制器,然后您的整个应用程序就可以运行了。这个 dispatcher servlet 负责根据不同的请求路径、查询参数,找到正确的控制器。

Q1:

对于每个视图一个控制器,或一个控制器到多个视图,没有单一的最佳实践。我的建议是只要你能保持你的代码干净和一致,选择适合你项目的任何策略。毕竟,这是组织代码的一种体验。

控制器和视图是两个不同的层来分离关注的问题,对吧?

顺便说一句,我强烈建议你选择主流 MVC 框架的设计文档,我认为他们可以更好地解释你的困惑。

外部参考:

http://www.jpalace.org/docs/articles/mvc/mvc.html 这是一篇关于实现调度 servlet 的好文章。它实际上使用 MVC 设计模式构建了一个非常小但完整的框架。 http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html上面的图表很好地解释了调度程序 servlet 在框架中的作用。

于 2013-01-23T08:31:29.823 回答