public interface View接口和public interface ViewResolver接口介绍

在Spring MVC中,public interface View 和 public interface ViewResolver 是两个相互关联但功能不同的接口。它们共同在视图解析和渲染过程中发挥作用,但各自承担的责任不同。

  • View 接口
    View 接口定义了如何渲染一个特定的视图。它通常包含一个 render 方法,该方法接受一个 ModelMap(或类似的模型数据)和一个 HttpServletRequest/HttpServletResponse 对,然后生成响应的内容。Spring MVC 提供了许多 View 接口的实现,例如 JstlView 用于 JSP,RedirectView 用于重定向,FreeMarkerView 用于 FreeMarker 模板等。

  • ViewResolver 接口
    ViewResolver 接口则定义了如何将逻辑视图名称解析为 View 对象的规则。在Spring MVC中,当Controller处理完请求并返回一个逻辑视图名称(通常是一个字符串)时,DispatcherServlet 会使用配置的 ViewResolver 来解析这个逻辑视图名称,并找到对应的 View 对象。然后,DispatcherServlet 会调用该 View 对象的 render 方法来渲染视图。

Spring MVC 同样提供了多种 ViewResolver 的实现,例如 InternalResourceViewResolver 用于解析JSP视图,FreeMarkerViewResolver 用于解析FreeMarker模板等。你也可以实现自定义的 ViewResolver 以满足特殊需求。

示例

假设你有一个Controller方法,它返回一个字符串 "home" 作为逻辑视图名称:

@Controller
public class MyController {

    @RequestMapping("/")
    public String home() {
        return "home";
    }
}

在Spring MVC的配置中,你可能配置了一个 InternalResourceViewResolver,它会将 "home" 解析为JSP文件路径(如 /WEB-INF/views/home.jsp):

xml
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

在这个例子中,InternalResourceViewResolver 就是 ViewResolver 的一个实现,它将逻辑视图名称 "home" 解析为一个 JstlView(或类似的 View 实现),该 View 知道如何渲染 /WEB-INF/views/home.jsp JSP文件。

posted @ 2024-07-18 08:47  文采杰出  阅读(3)  评论(0编辑  收藏  举报