簡體   English   中英

攔截Spring MVC 3中的視圖/響應

[英]Intercept the view/response in Spring MVC 3

我是Spring MVC 3的新手,我理解基本概念。 我能夠做一些簡單的事情,比如創建控制器,服務和視圖。 但是,我還沒有進入更先進的領域。 因此,如果這個問題看起來很愚蠢(或不可能),我會道歉。

我想知道是否有辦法攔截視圖和/或響應並在它發送到客戶端之前修改它? 我想這就是Spring在向客戶端發出的過程中執行數據綁定以形成元素的方式。 我想要做的是檢查域類中元素的注釋,並根據這些注釋修改視圖。 這將涉及在響應中注入新代碼(HTML或Javascript)。

UPDATE

當我想到這一點時,我意識到最終的渲染是由JSP完成的。 所以我想問題是,是否有一種方法可以在模型移出頁面之前攔截模型,並找出數據被綁定到的bean上的注釋。

有沒有辦法做到這一點?

您可能正在尋找的類是org.springframework.web.servlet.HandlerInterceptor您可以在該接口上實現postHandle方法,並且如簽名所示,可以訪問請求和響應,以及地圖控制器創建的模型對象。 (以及控制器本身,這就是Object handler參數。)

您可以通過將它們添加到調度程序servlet中的處理程序映射來“啟用它們”。

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <bean class="a.package.MyHandlerInterceptor"/>
        </list>
    </property>
</bean>

順便說一句,綁定實際上是在HandlerAdapter內部完成的,它定位了Controller方法並調用它們,它不是攔截器。

編輯:要回答您的編輯,是的,您可以在控制器完成之后,但在進入JSP渲染之前,有機會獲取模型對象並使用它。 所以你可以做一些事情,比如將myCustomScript添加到ModelMap然后在你的jsp的<head>中拋出${myCustomScript} ,從ModelMap獲取一個支持對象並檢查它等等。

是的,實際上有很多方法:

  • spring mvc攔截器(在mvc docs中搜索它們) - 你可以定義preHandle / postHandle方法並將攔截器應用於多個控制器
  • spring aop - 定義在給定控制器的方法之前/之后執行的方面
  • servlet過濾器 - 這是最不可取的選項,因為它沒有與spring集成 - 你不能注入依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM