springMVC返回類型詳解以及springMVC返回視圖配置

處理方法返回值的可選類型

spring mvc處理方法支持以下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面將對具體的一一進行說明: 
ModelAndView 
Java代碼 
    
@RequestMapping("/show1")  
public ModelAndView show1(HttpServletRequest request,  
           HttpServletResponse response) throws Exception {  
       ModelAndView mav = new ModelAndView("/demo2/show");  
       mav.addObject("account", "account -1");  
       return mav;  
   }  

@RequestMapping("/show1")
 
 public ModelAndView show1(HttpServletRequest request,
 
            HttpServletResponse response) throws Exception {
 
        ModelAndView mav = new ModelAndView("/demo2/show");
 
        mav.addObject("account", "account -1");
 
        return mav;
 
    }


經過ModelAndView構造方法能夠指定返回的頁面名稱,也能夠經過setViewName()方法跳轉到指定的頁面 , 
使用addObject()設置須要返回的值,addObject()有幾個不一樣參數的方法,能夠默認和指定返回對象的名字。 
調用addObject()方法將值設置到一個名爲ModelMap的類屬性,ModelMap是LinkedHashMap的子類, 
具體請看類。 

Model 是一個接口, 其實現類爲ExtendedModelMap,繼承了ModelMap類。 

Map  
Java代碼 
@RequestMapping("/demo2/show")  
    public Map<String, String> getMap() {  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("key1", "value-1");  
        map.put("key2", "value-2");  
        return map;  
    }  
@RequestMapping("/demo2/show")
 
    public Map<String, String> getMap() {
 
        Map<String, String> map = new HashMap<String, String>();
 
        map.put("key1", "value-1");
 
        map.put("key2", "value-2");
 
        return map;
 
    }


在jsp頁面中可直經過${key1}得到到值, map.put()至關於request.setAttribute方法。 
寫例子時發現,key值包括 - . 時會有問題. 

View 能夠返回pdf excel等,暫時沒詳細瞭解。 

String 指定返回的視圖頁面名稱,結合設置的返回地址路徑加上頁面名稱後綴便可訪問到。 
注意:若是方法聲明瞭註解@ResponseBody ,則會直接將返回值輸出到頁面。 
例如: 
Java代碼
@RequestMapping(value = "/something", method = RequestMethod.GET)  
@ResponseBody  
public String helloWorld()  {  
return "Hello World";  
}  
@RequestMapping(value = "/something", method = RequestMethod.GET)
@
@ResponseBody
p
public String helloWorld()  {
r
return "Hello World";
}
}


上面的結果會將文本"Hello World "直接寫到http響應流。 
Java代碼 
@RequestMapping("/welcome")  
public String welcomeHandler() {  
  return "center";  
}  
@RequestMapping("/welcome")
p
public String welcomeHandler() {
 
  return "center";
}
}


對應的邏輯視圖名爲「center」,URL= prefix前綴+視圖名稱 +suffix後綴組成。 

void  若是返回值爲空,則響應的視圖頁面對應爲訪問地址 
Java代碼 
@RequestMapping("/welcome")  
public void welcomeHandler() {}  
@RequestMapping("/welcome")
p
public void welcomeHandler() {}


此例對應的邏輯視圖名爲"welcome"。 

小結: 
1.使用 String 做爲請求處理方法的返回值類型是比較通用的方法,這樣返回的邏輯視圖名不會和請求 URL 綁定,具備很大的靈活性,而模型數據又能夠經過 ModelMap 控制。 
2.使用void,map,Model 時,返回對應的邏輯視圖名稱真實url爲:prefix前綴+視圖名稱 +suffix後綴組成。 
3.使用String,ModelAndView返回視圖名稱能夠不受請求的url綁定,ModelAndView能夠設置返回的視圖名稱
按照前後順序適應視圖,先找ftl的,再是jsp
    <!-- freemarker的配置 -->  
    <bean id="freemarkerConfigurer"  
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
        <property name="templateLoaderPath" value="/ftl/module/" />  
        <property name="defaultEncoding" value="utf-8" />  
        <property name="freemarkerSettings">  
            <props>  
                <prop key="template_update_delay">10</prop>  
                <prop key="locale">zh_CN</prop>  
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
                <prop key="date_format">yyyy-MM-dd</prop>  
                <prop key="number_format">#.##</prop>  
            </props>  
        </property>  
        <property name="freemarkerVariables">
			<map>
				<entry key="dictDisplay" value-ref="dictDisplay" />
				<entry key="dictSelect" value-ref="dictSelect" />
			</map>
		</property>
    </bean>
    
    <!-- 字典 -->
    <bean id="dictDisplay" class="com.bluedon.cb.util.freemarker.DictDisplayDirective" />
    <bean id="dictSelect" class="com.bluedon.cb.util.freemarker.DictSelectDirective" />
	
    <!-- FreeMarker視圖解析 如返回userinfo。。在這裏配置後綴名ftl和視圖解析器。。 -->  
    <bean id="viewResolver"  
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
        <property name="viewClass" value="com.bluedon.cb.util.FreeMarkerViewUtil" />  
        <property name="suffix" value=".ftl" />  
        <property name="contentType" value="text/html;charset=utf-8" />  
        <property name="exposeRequestAttributes" value="true" />  
        <property name="exposeSessionAttributes" value="true" />  
        <property name="exposeSpringMacroHelpers" value="true" />  
    </bean>
	
<!-- 對模型視圖名稱的解析,即在模型視圖名稱添加先後綴,返回普通的jsp視圖 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
相關文章
相關標籤/搜索