使用springmvc配置視圖解析器和重定向方式
springmvc配置視圖解析器和重定向
為什么需要配置視圖解析器
看圖

配置步驟
第一步:需要在springmvc.xml配置
<!-- 配置SpringMVC的視圖解析器: 配置前綴和后綴 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置視圖跳轉(zhuǎn)的前綴 --> <property name="prefix" value="/WEB-INF/view/"/> <!-- 配置視圖跳轉(zhuǎn)的后綴 --> <property name="suffix" value=".jsp"/> </bean>
第二步:配置視圖解析器后的controller代碼 Controller方法返回字符串表示邏輯視圖名,通過視圖解析器解析為物理視圖地址。 此時默認(rèn)的物理視圖地址為:視圖前綴+返回值+視圖后綴
/*
* 方法返回ModelAndView 方式
* ModelAndView
* Model : 模型,數(shù)據(jù)
* View :視圖
* 將需要共享的數(shù)據(jù)也跳轉(zhuǎn)的視圖封裝到ModelAndView對象中,方法直接返回即可
*
* 默認(rèn)只能使用請求轉(zhuǎn)發(fā)
*/
@RequestMapping("/method2")
public ModelAndView method2() {
ModelAndView mv = new ModelAndView();
//共享數(shù)據(jù)
mv.addObject("username", "莉莉");
//設(shè)置視圖地址
//配置視圖解析器前后綴之前
//mv.setViewName("/WEB-INF/view/hello.jsp");
//配置視圖解析器前后綴之后
mv.setViewName("hello");
return mv;
}
/*
* 方法返回String 字符串方式
*
* 方法返回的字符就是要跳轉(zhuǎn)的地址
*
* 在方法中注入一個Model 對象,在Model中共享數(shù)據(jù)
*
* 默認(rèn)使用請求轉(zhuǎn)發(fā)
*/
@RequestMapping("/method3")
public String method3(Model m) {
System.out.println(m.getClass().getName());
//共享數(shù)據(jù)
m.addAttribute("username", "吉姆");
//配置視圖解析器前后綴之前
//return "/WEB-INF/view/response.jsp";
//配置視圖解析器前后綴之后
return "response";
}
解決配置視圖解析器帶來的問題
如果直接使用視圖解析器的配置開發(fā),那么必須保證視圖解析器前綴目錄下面有對應(yīng)的頁面文件才能跳轉(zhuǎn),否則報錯
默認(rèn)頁面跳轉(zhuǎn)也只能使用請求轉(zhuǎn)發(fā)跳轉(zhuǎn),不能使用重定向
需要解決問題: 除了使用視圖解析器對應(yīng)規(guī)則的開發(fā),用戶還得自定義跳轉(zhuǎn)方式,和自定義跳轉(zhuǎn)頁面 方案: 使用視圖解析器的 請求轉(zhuǎn)發(fā)和重定向配置,可以打破默認(rèn)的規(guī)則
public static final String REDIRECT_URL_PREFIX = "redirect:"; public static final String FORWARD_URL_PREFIX = "forward:";
/*
*
* 問題1:上述兩種方法默認(rèn)只能進行請求轉(zhuǎn)發(fā)跳轉(zhuǎn),如何進行重定向跳轉(zhuǎn)?
* 問題2: 跳轉(zhuǎn)的頁面永遠只能按照視圖解析的前后綴路徑放,如何頁面放在其他目錄下面也能跳轉(zhuǎn)
*
* 解決方案:使用視圖解析器中自定義的頁面跳轉(zhuǎn)功能(使用這種,只適用返回String字符串的方式)
* 在返回的字符串前面加上前綴
* 重定向
* redired:跳轉(zhuǎn)的頁面
* 請求轉(zhuǎn)發(fā)
* forward:要跳轉(zhuǎn)的頁面
*
*
*/
//自定義請求轉(zhuǎn)發(fā)頁面(打破默認(rèn)的視圖解析器前后綴規(guī)則跳轉(zhuǎn)的頁面)
@RequestMapping("/method4")
public String method4(Model m) {
m.addAttribute("username", "韓梅梅");
return "forward:/WEB-INF/user_list.jsp";
}
重定向
//自定義重定向
@RequestMapping("/method5")
public String method5() {
return "redirect:http://www.jd.com";
}
配置多個視圖解析器
springmvc
<!-- jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="viewNames" value="*"/>
<!-- 模板優(yōu)先級別 -->
<property name="order" value="1"></property>
</bean>
<!-- html -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/html/" />
<property name="suffix" value=".html" />
<property name="viewNames" value="html*"/>
<!-- 模板優(yōu)先級別 -->
<property name="order" value="0"></property>
</bean>
controller
@Controller
@Scope("prototype")
@RequestMapping("/viewResolver")
public class ViewResolverController {
@RequestMapping("/t1")
public String t1() {
return "index";// webinfo/jsp/index
}
@RequestMapping("/t2")
public String t2() {
return "htmlindex";// webinfo/html/index
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot?整合持久層之Spring Data JPA
在介紹Spring Data JPA的時候,我們首先認(rèn)識下Hibernate。Hibernate是數(shù)據(jù)訪問解決技術(shù)的絕對霸主,使用O/R映射技術(shù)實現(xiàn)數(shù)據(jù)訪問,O/R映射即將領(lǐng)域模型類和數(shù)據(jù)庫的表進行映射,通過程序操作對象而實現(xiàn)表數(shù)據(jù)操作的能力,讓數(shù)據(jù)訪問操作無須關(guān)注數(shù)據(jù)庫相關(guān)的技術(shù)2022-08-08
實現(xiàn)Servlet程序的三種方法(小結(jié))
這篇文章主要介紹了實現(xiàn)Servlet程序的三種方法(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Springboot引入hibernate配置自動建表并進行增刪改查操作
這篇文章主要介紹了Springboot引入hibernate配置自動建表并進行增刪改查,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09

