Spring MVC 視圖-請求與視圖名的映射

2018-07-26 14:40 更新

RequestToViewNameTranslator接口可以在邏輯視圖名未被顯式提供的情況下,決定一個(gè)可用的邏輯視圖View名。

DefaultRequestToViewNameTranslator能夠?qū)⒄埱骍RL映射到邏輯視圖名上去,如下面代碼例子所示:

public class RegistrationController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        // 處理請求……
        ModelAndView mav = new ModelAndView();
        // 向Model中添加需要的數(shù)據(jù)
        return mav;
        // 請注意這里,沒有設(shè)置任何View對象或邏輯視圖名
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 這個(gè)眾人皆知的bean將為我們自動生成視圖名 -->
    <bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>

    <bean class="x.y.RegistrationController">
        <!-- 如果需要,注入依賴 -->
    </bean>

    <!-- 請請求URL映射到控制器名 -->
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

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

</beans>

請注意在handleRequest(...)方法實(shí)現(xiàn)中,返回的ModelAndView對象上自始至終未設(shè)置任何View對象或邏輯視圖名。這是由DefaultRequestToViewNameTranslator完成的,它的任務(wù)就是從請求的URL中生成一個(gè)邏輯視圖名。在上面的例子中,RegistrationController與配置的ControllerClassNameHandlerMapping一起使用的結(jié)果是,一個(gè)URL為<http://localhost/registration.html>的請求,會經(jīng)由DefaultRequestToViewNameTranslator生成并對應(yīng)到一個(gè)邏輯視圖名registration上。該邏輯視圖名又會由InternalResourceViewResolverbean解析到/WEB-INF/jsp/registration.jsp視圖上。

你無需顯式地定義一個(gè)DefaultRequestToViewNameTranslatorbean。如果默認(rèn)的DefaultRequestToViewNameTranslator配置已能滿足你的需求,那么你無需配置,Spring Web MVC的DispatcherServlet會為你實(shí)例化這樣一個(gè)默認(rèn)的對象。

當(dāng)然,如果你需要更改默認(rèn)的設(shè)置,那你就需要手動地配置自己的DefaultRequestToViewNameTranslatorbean。關(guān)于可配置屬性的一些詳細(xì)信息,你可以去咨詢DefaultRequestToViewNameTranslator類詳細(xì)的java文檔。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號