任何人都可以区分
org.springframework.web.servlet.ModelAndView
和
org.springframework.web.portlet.ModelAndView
ModelAndViews几乎都有相同的方法。值得注意的是,当我将对象添加到org.springframework.web.portlet.ModelAndView
时,对象无法到达视图。在视图中,添加的对象是null
。你有没有人知道其他任何显着的差异?? !!请在此处添加您的信息:)
一般来说,问题也可以用来发现
中的差异org.springframework.web.servlet.*;
org.springframework.web.portlet.*;
答案 0 :(得分:3)
嗯,它们完全相似,只是*.servlet.*
类是针对基于servlet的经典Web应用程序定制的,而*.portlet.*
类是专门为JSR-168 portlet定制的。
这是Spring的一个深思熟虑的选择: Portlet MVC框架尽可能地是Web MVC框架的镜像,并且还使用相同的底层视图抽象和集成技术。 / p>
但是一个与servlet截然不同的portlet。您可以在JSR-168上找到参考文献,并在What Is a Portlet - O'Reilly Media上找到精彩的演示文稿。以下是后者的一些摘录:
Portlet是Web组件 - 就像servlet一样 - 专门设计用于在复合页面的上下文中聚合。通常,在门户页面的单个请求中调用许多portlet。每个portlet都会生成一个标记片段,该片段与其他portlet的标记结合在一起,所有这些都在门户网站页面标记中。
[针对不同应用程序的Windows]是相互独立开发的。新闻portlet的开发人员将创建一个应用程序并将其打包到.war文件中。然后,门户网站服务器的管理员将在服务器上安装此.war文件并创建一个页面。在下一阶段,每个用户都将在他的页面上选择他想要的应用程序。
出于这个原因,Spring portlet类与portlet类非常不同,即使它们呈现相同的接口。 portlet工作流与servlet工作流的不同之处在于对portlet的请求可以有两个不同的阶段:操作阶段和呈现阶段。操作阶段仅执行一次,并且是任何后端更改或操作发生的位置,例如在数据库中进行更改。然后,渲染阶段会生成每次刷新显示时向用户显示的内容。
TL / DR:所以*portlet*
类的特殊设计是为了向开发者提供一个类似的界面(与*servlet*
相同)但是在幕后完全不同,必须不用于经典(servlet)SpringMVC应用程序。