JSP到Servlet的关系

书中有很多很多例子,互联网上有关如何将Servlet用作JSP的例子。 但我想知道使用它们的最佳方式是什么,以及对良好架构的思考。

Servlet与JSP之间是否存在一对一的关系? 像ASP.NET“Code-Behind”页面一样?

或者更像是ASP.NET MVC,一个Servlet控制多个动作,并转发到多个视图?

这是关于纯Java EE开发的问题。 请不要简单地建议另一个框架。

这个怎么样? 我在我的一个学校项目中做到了这一点:

alt text http://sofzh.miximages.com/java/mvci.jpg

根据我对servlet和JSP的理解,这是我的假设。 我希望得到你的意见和想法来改善这一点。

Servlet与JSP之间是否存在一对一的关系? 像ASP.NET“Code-Behind”页面一样?

要看。 对于一个可能有3到5页的小型网站来说,它是经济实惠的,但是超过它会产生很多样板代码,当你以合理的方式自己重构所有重复的代码时,你几乎会以自己开发的MVC框架结束。

或者更像ASP.NET MVC,使用单个Servlet控制多个操作,并转发到多个视图

当有一个相当不错的Web应用程序时,这是更值得推荐的。 ASP.NET MVC的Java对应方式是JSF (JavaServer Faces)。 它是一个纯Java EE提供的基于组件的MVC框架,它将FacesServlet作为唯一的控制器提供,因此您最终只能将Javabean类作为模型 ,最后将JSP(或最近的)Facelets页面作为视图 。 Facelets的? 是的,从JSF 2.0开始,复古JSP已被Facelets取代为默认视图技术。 Facelets是基于XHTML的。

如果您想要生成控制器servlet,请检查前控制器模式 。 您可以在此答案中找到另一个基本启动示例。

也可以看看:

  • Servlet,JSP和JSF有什么区别?
  • 什么是ASP.NET / PHP的主流Java替代品?
  • 关于JSP / Servlet你应该了解的事情

不,从Servlet到JSP的一对一关系并不是绝对必要的,因为它们是不同的东西。

我个人喜欢使用Servlet作为控制器,然后在处理HTTP REQUEST之后,使用一个或多个JSP页面呈现响应(HTML)。 ASP.NET“Code-Behind”不适用,因为CODE-BEHIND与其对应的ASPX文件是一对一的关系。 AFAIK,您不能使用不同的ASPX页面呈现一个ASP.NET“代码隐藏”。

无论如何,这不是一个简单的问题,但根据我的经验,只有简单的旧Servlets + JSP方法通常比其他任何框架(Struts,JSF和许多其他框架)更清晰,更简单,更少错误。

  • JSP是servlet(伪装)。 每个jsp都被转换并编译为servlet。 查看tomcat的/ work目录以获取exmaple
  • JSP是一种视图技术 – 即它们使编写可重用页面变得更容易
  • JSP应该仅用于显示常规servlet预先计算的结果,放置在请求/会话中,并转发到相应的jsp。