Difference between org/springframework/web/servlet

2019-09-19 03:56发布

问题:

This question already has an answer here:

  • what is the difference in org.springframework.web.servlet.ModelAndView vs org.springframework.web.portlet.ModelAndView 1 answer

I have just answered the below question which revolves around this posted question.

spring mvc InternalResourceViewResolver doesnt get prefix

Can someone out there tell the difference between the classes

org/springframework/web/servlet/ModelAndView and org/springframework/web/portlet/ModelAndView

I see almost similar API docs for both

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/ModelAndView.html

and

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/portlet/ModelAndView.html

where both have the constructor

ModelAndView(String viewName)
Convenient constructor when there is no model data to expose.

and yet the latter doesn't work in resolving the view?

回答1:

Ignoring that these two are meant for two completely different environments, the difference is that org.springframework.web.servlet.ModelAndView is a supported handler method return type:

  • A ModelAndView object, with the model implicitly enriched with command objects and the results of @ModelAttribute annotated reference data accessor methods.

That means that Spring has a HandlerMethodReturnValueHandler implementation (ModelAndViewMethodReturnValueHandler) that will receive the return value of type ModelAndView and process it.

It does not have such a implementation for org.springframework.web.portlet.ModelAndView registered by default.

More:

  • Spring MVC Neither BindingResult nor plain target
  • How does HandlerMethodReturnValueHandler work?