目錄
一、配置視圖解析器
二、控制器方法的返回值
2.1 返回值為void
2.1.1 控制器方法
2.1.2 jsp頁面
2.1.3 測試結(jié)果
2.2 返回值為String
2.2.1 控制器方法
2.2.2?測試結(jié)果
2.3 返回值為ModelAndView
2.3.1 控制器方法
2.3.2 JSP頁面
2.3.3 測試結(jié)果?
三、某些會話對象設(shè)置數(shù)據(jù)
3.1 request域設(shè)置數(shù)據(jù)
3.1.1 使用參數(shù)為原生的HttpServletRequest
3.1.2 使用參數(shù)為Model和ModelMap
3.1.3 使用參數(shù)為Map集合
3.2 session域設(shè)置數(shù)據(jù)
3.2.1 控制器方法
3.2.2 測試結(jié)果?
3.3 context域設(shè)置數(shù)據(jù)
3.2.1 控制器方法
3.2.2 測試結(jié)果?
四、請求轉(zhuǎn)發(fā)&重定向
4.1 原生請求轉(zhuǎn)發(fā)重定向?qū)懛?/p>
4.1.1 重定向控制器方法
4.1.2 重定向測試結(jié)果
4.1.3 請求轉(zhuǎn)發(fā)測試結(jié)果
4.2 springmvc提供的請求轉(zhuǎn)發(fā)重定向?qū)懛?/p>
往期專欄&文章相關(guān)導(dǎo)讀?
1. Maven系列專欄文章
2. Mybatis系列專欄文章
3. Spring系列專欄文章
4. Spring MVC系列專欄文章?
一、配置視圖解析器
SpringMVC默認(rèn)情況下會在控制器執(zhí)行完成后跳轉(zhuǎn)到視圖頁面,視圖解析器能找到相應(yīng)的視圖,之前的404異常就是由于沒有配置視圖解析器導(dǎo)致找不到視圖。在SpringMVC中提供了13個視圖解析器,用于支持不同的視圖技術(shù)。InternalResourceViewResolver是SpringMVC的默認(rèn)視圖解析器,用來解析JSP視圖。
添加如下標(biāo)簽就算配置視圖解析器了?
<!-- 視圖解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 視圖前綴 -->
<property name="prefix" value="/"/>
<!-- 視圖后綴 -->
<property name="suffix" value=".jsp"/>
</bean>
二、控制器方法的返回值
我們可以通過控制器方法的返回值設(shè)置跳轉(zhuǎn)的視圖,控制器方法支持以下返回值類型:
2.1 返回值為void
此時會跳轉(zhuǎn)到名字是 前綴+方法路徑名+后綴 的jsp頁面
2.1.1 控制器方法
/**
* SpringMVC處理響應(yīng)——控制器方法(根據(jù)返回值)
*/
// 路徑是helloMVC,方法執(zhí)行完后會跳轉(zhuǎn)到/helloMVC.jsp
@RequestMapping("helloMVC")
public void helloMVC(){
System.out.println("hello SpringMVC!");
}
2.1.2 jsp頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>MVC</title>
</head>
<body>
<h1>歡迎來到SpringMVC!</h1>
</body>
</html>
2.1.3 測試結(jié)果
訪問路徑:http://localhost:8080/helloMVC
?OK,確實返回了jsp頁面
2.2 返回值為String
此時會跳轉(zhuǎn)到名字是 前綴+返回值+后綴 的jsp頁面
2.2.1 控制器方法
// 返回值是String,此時會跳轉(zhuǎn)到名字是 前綴+返回值+后綴 的jsp頁面
@RequestMapping("c2/hello1")
public String helloMVC1(){
System.out.println("Hello SpringMVC!");
return "helloMVC";
}
2.2.2?測試結(jié)果
訪問路徑:http://localhost:8080/c2/hello1
OK,這次返回的也不是helloMVC1頁面,確實成功實現(xiàn)了。?
2.3 返回值為ModelAndView
????????這是SpringMVC提供的對象,該對象可以向request域設(shè)置數(shù)據(jù)并指定跳轉(zhuǎn)的頁面。該對象中包含Model對象和View對象。
- Model:向request域中設(shè)置數(shù)據(jù)。
- View:指定跳轉(zhuǎn)的頁面。
2.3.1 控制器方法
// 返回值為ModelAndView
@RequestMapping("/c2/hello2")
public ModelAndView useMAV(){
System.out.println("返回值類型為ModelAndView");
// 1.創(chuàng)建ModelAndView對象
ModelAndView modelAndView = new ModelAndView();
// 2.獲取Model對象,本質(zhì)是一個Map
Map<String,Object> model = modelAndView.getModel();
// 3.使用Model對象向request域設(shè)置數(shù)據(jù)
model.put("username","黃慶禧");
// 4.使用view對象設(shè)置跳轉(zhuǎn)的路徑
modelAndView.setViewName("lyl-HQX");
return modelAndView;
}
OK,這里設(shè)置了一個username的屬性,屬性值為黃慶禧
2.3.2 JSP頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>lyl-HQX</title>
</head>
<body>
<h1>name: 你好!${requestScope.name}</h1>
<h1>username: 你好!${requestScope.username}</h1>
<h1>request-Map 你好!${requestScope.usernameMap}</h1>
<h1>session 地址是:${sessionScope.address}</h1>
<h1>context 年齡是:${applicationScope.age}</h1>
</body>
</html>
OK,這里解釋一下,這里用到的參數(shù)是后面需要的。
2.3.3 測試結(jié)果?
OK,確實可以成功打印出黃慶禧的名字了。?
三、某些會話對象設(shè)置數(shù)據(jù)
????????當(dāng)控制器返回值為ModelAndView時我們可以向request域設(shè)置數(shù)據(jù),我們還有以下方法可以向request域設(shè)置數(shù)據(jù):
3.1 request域設(shè)置數(shù)據(jù)
3.1.1 使用參數(shù)為原生的HttpServletRequest
控制器方法
/**
* SpringMVC處理響應(yīng)-request域
*/
// 使用原生的HttpServletRequest
@RequestMapping("/c2/hello3")
public String setRequestModel(HttpServletRequest request){
request.setAttribute("username","會洗碗的CV工程師");
return "lyl-HQX";
}
OK,username屬性值為會洗碗的CV工程師,看一下能否成功獲取?
測試結(jié)果
OK,可以看到確實成功獲取了。?接下來嘗試其他一些參數(shù)。
3.1.2 使用參數(shù)為Model和ModelMap
????????SpringMVC提供了Model接口和ModelMap類,控制器方法添加這兩個類型的參數(shù),使用該參數(shù)設(shè)置數(shù)據(jù),該數(shù)據(jù)就會存到request域中。
控制器方法
//使用Model、ModelMap
@RequestMapping("/c2/hello4")
public String setRequestModel2(Model model, ModelMap modelMap){
// 使用Model將數(shù)據(jù)存入request域
model.addAttribute("username","LYL");
// 使用ModelMap將數(shù)據(jù)傳入request域
modelMap.addAttribute("usernameMap","HQX");
return "lyl-HQX";
}
測試結(jié)果
OK,可以看得到兩個屬性都已經(jīng)成功獲取。?
3.1.3 使用參數(shù)為Map集合
Model接口底層就是一個Map集合,我們可以給控制器方法設(shè)置Map類型的參數(shù),向Map中添加鍵值對,數(shù)據(jù)也會存到request域中。
控制器方法
// 使用Map集合
@RequestMapping("/c2/hello5")
public String setRequestModel3(Map map){
map.put("username","程序員");
map.put("usernameMap","程序員");
return "lyl-HQX";
}
測試結(jié)果
OK,可以看得出來和上面也是一樣可以使用的。?
3.2 session域設(shè)置數(shù)據(jù)
????????Session作用域表示在當(dāng)前會話中有效。在SpringMVC中對于Session作用域傳值,只能使用HttpSession對象來實現(xiàn)。
3.2.1 控制器方法
/**
* SpringMVC處理響應(yīng)-session域設(shè)置數(shù)據(jù)
*/
@RequestMapping("/c2/hello6")
public String setSessionModel(HttpSession session){
session.setAttribute("address","北京");
return "lyl-HQX";
}
OK,這次是在session域設(shè)置了一個地址屬性,看一下能否成功獲取?
3.2.2 測試結(jié)果?
Ok,可以看到確實成功獲取了。?
3.3 context域設(shè)置數(shù)據(jù)
????????context作用域表示在整個應(yīng)用范圍都有效。在SpringMVC中對context作用域傳值,只能使用ServletContext對象來實現(xiàn)。但是該對象不能直接注入到方法參數(shù)中,需要通過HttpSession對象獲取。
3.2.1 控制器方法
/**
* SpringMVC處理響應(yīng)-context域設(shè)置數(shù)據(jù)
*/
@RequestMapping("/c2/hello7")
public String setContextModel(HttpSession session){
ServletContext servletContext = session.getServletContext();
servletContext.setAttribute("age",10);
return "lyl-HQX";
}
這次利用context域設(shè)置了一個年齡屬性,看一下能否獲取對應(yīng)的值。
3.2.2 測試結(jié)果?
OK,確實成功獲取到了。?
四、請求轉(zhuǎn)發(fā)&重定向
之前的案例,我們發(fā)現(xiàn)request域中的值可以傳到j(luò)sp頁面中,也就是通過視圖解析器跳轉(zhuǎn)到視圖的底層是請求轉(zhuǎn)發(fā)。
如果我們跳轉(zhuǎn)時不想使用視圖解析器,可以使用原生HttpServletRequest進(jìn)行請求轉(zhuǎn)發(fā)或HttpServletResponse進(jìn)行重定向:
4.1 原生請求轉(zhuǎn)發(fā)重定向?qū)懛?/h3>
4.1.1 重定向控制器方法
/**
* SpringMVC處理響應(yīng)-請求轉(zhuǎn)發(fā)&重定向
*/
@RequestMapping("/c2/hello8")
public void myForward1(HttpServletRequest request, HttpServletResponse response) throws Exception{
request.setAttribute("name","程序員");
// 請求轉(zhuǎn)發(fā)
//request.getRequestDispatcher("/c2/hello9").forward(request,response);
// 原生重定向
response.sendRedirect("/c2/hello9");
}
OK,這是重定向到/c2/hello9,接下來寫一個/c2/hello9的控制器方法,看一下控制臺能否打印出來。
@RequestMapping("/c2/hello9")
public void myForward2(HttpServletRequest request){
System.out.println("hello");
System.out.println(request.getAttribute("name"));
}
4.1.2 重定向測試結(jié)果
/**
* SpringMVC處理響應(yīng)-請求轉(zhuǎn)發(fā)&重定向
*/
@RequestMapping("/c2/hello8")
public void myForward1(HttpServletRequest request, HttpServletResponse response) throws Exception{
request.setAttribute("name","程序員");
// 請求轉(zhuǎn)發(fā)
//request.getRequestDispatcher("/c2/hello9").forward(request,response);
// 原生重定向
response.sendRedirect("/c2/hello9");
}
OK,這是重定向到/c2/hello9,接下來寫一個/c2/hello9的控制器方法,看一下控制臺能否打印出來。
@RequestMapping("/c2/hello9")
public void myForward2(HttpServletRequest request){
System.out.println("hello");
System.out.println(request.getAttribute("name"));
}
OK,可以看得到確實重定向去了。注意看,這里重定向出來后是無法獲取request域的屬性值的,待會試一下請求轉(zhuǎn)發(fā)可不可以。?重定向地址欄會發(fā)生變化,而請求轉(zhuǎn)發(fā)地址欄是不會變化的。
4.1.3 請求轉(zhuǎn)發(fā)測試結(jié)果
OK,,可以看得到請求轉(zhuǎn)發(fā)就可以獲取屬性值,并且地址欄沒有發(fā)生變化。
4.2 springmvc提供的請求轉(zhuǎn)發(fā)重定向?qū)懛?/h3>
// SpringMVC提供一種關(guān)于重定向和請求轉(zhuǎn)發(fā)更為簡單的寫法
@RequestMapping("/c2/hello10")
public String myForward3(HttpServletRequest request){
request.setAttribute("name","程序員");
// 請求轉(zhuǎn)發(fā)
return "forward:/c2/hello9";
// 重定向
//return "redirect:/c2/hello9";
}
?OK,本次就學(xué)習(xí)到這里,有興趣的朋友可以看一下我下面的專欄文章。
往期專欄&文章相關(guān)導(dǎo)讀?
?????大家如果對于本期內(nèi)容有什么不了解的話也可以去看看往期的內(nèi)容,下面列出了博主往期精心制作的Maven,Mybatis等專欄系列文章,走過路過不要錯過哎!如果對您有所幫助的話就點(diǎn)點(diǎn)贊,收藏一下啪。其中Spring專欄有些正在更,所以無法查看,但是當(dāng)博主全部更完之后就可以看啦。文章來源:http://www.zghlxwxcb.cn/news/detail-501989.html
1. Maven系列專欄文章
// SpringMVC提供一種關(guān)于重定向和請求轉(zhuǎn)發(fā)更為簡單的寫法
@RequestMapping("/c2/hello10")
public String myForward3(HttpServletRequest request){
request.setAttribute("name","程序員");
// 請求轉(zhuǎn)發(fā)
return "forward:/c2/hello9";
// 重定向
//return "redirect:/c2/hello9";
}
?OK,本次就學(xué)習(xí)到這里,有興趣的朋友可以看一下我下面的專欄文章。
?????大家如果對于本期內(nèi)容有什么不了解的話也可以去看看往期的內(nèi)容,下面列出了博主往期精心制作的Maven,Mybatis等專欄系列文章,走過路過不要錯過哎!如果對您有所幫助的話就點(diǎn)點(diǎn)贊,收藏一下啪。其中Spring專欄有些正在更,所以無法查看,但是當(dāng)博主全部更完之后就可以看啦。文章來源:http://www.zghlxwxcb.cn/news/detail-501989.html
Maven系列專欄 | Maven工程開發(fā) |
Maven聚合開發(fā)【實例詳解---5555字】 |
2. Mybatis系列專欄文章
Mybatis系列專欄 | MyBatis入門配置 |
Mybatis入門案例【超詳細(xì)】 | |
MyBatis配置文件 —— 相關(guān)標(biāo)簽詳解 | |
Mybatis模糊查詢——三種定義參數(shù)方法和聚合查詢、主鍵回填 | |
Mybatis動態(tài)SQL查詢 --(附實戰(zhàn)案例--8888個字--88質(zhì)量分) | |
Mybatis分頁查詢——四種傳參方式 | |
Mybatis一級緩存和二級緩存(帶測試方法) | |
Mybatis分解式查詢 | |
Mybatis關(guān)聯(lián)查詢【附實戰(zhàn)案例】 | |
MyBatis注解開發(fā)---實現(xiàn)增刪查改和動態(tài)SQL | |
MyBatis注解開發(fā)---實現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢 |
3. Spring系列專欄文章
Spring系列專欄 | Spring IOC 入門簡介【自定義容器實例】 |
IOC使用Spring實現(xiàn)附實例詳解 | |
Spring IOC之對象的創(chuàng)建方式、策略及銷毀時機(jī)和生命周期且獲取方式 | |
Spring DI簡介及依賴注入方式和依賴注入類型 | |
Spring IOC相關(guān)注解運(yùn)用——上篇 | |
Spring IOC相關(guān)注解運(yùn)用——下篇 | |
Spring AOP簡介及相關(guān)案例 | |
注解、原生Spring、SchemaBased三種方式實現(xiàn)AOP【附詳細(xì)案例】 | |
Spring事務(wù)簡介及相關(guān)案例 | |
Spring 事務(wù)管理方案和事務(wù)管理器及事務(wù)控制的API | |
Spring 事務(wù)的相關(guān)配置、傳播行為、隔離級別及注解配置聲明式事務(wù) |
4. Spring MVC系列專欄文章?
SpringMVC系列專欄 | Spring MVC簡介附入門案例 |
Spring MVC各種參數(shù)獲取及獲取方式自定義類型轉(zhuǎn)換器和編碼過濾器 | |
Spring MVC獲取參數(shù)和自定義參數(shù)類型轉(zhuǎn)換器及編碼過濾器 | |
Spring MVC處理響應(yīng)附案例詳解 | |
Spring MVC相關(guān)注解運(yùn)用 —— 上篇 | |
Spring MVC相關(guān)注解運(yùn)用 —— 中篇文章來源地址http://www.zghlxwxcb.cn/news/detail-501989.html | |
Spring MVC相關(guān)注解運(yùn)用 —— 下篇 | |
Spring MVC多種情況下的文件上傳 | |
Spring MVC異步上傳、跨服務(wù)器上傳和文件下載 | |
Spring MVC異常處理【單個控制異常處理器、全局異常處理器、自定義異常處理器】 | |
Spring MVC攔截器和跨域請求 | |
SSM整合案例【C站講解最詳細(xì)流程的案例】 |
到了這里,關(guān)于Spring MVC處理響應(yīng)附案例詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!