public interface View介面和public interface ViewResolver介面介紹

文采杰出發表於2024-07-18

在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檔案。

相關文章