整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          SpringMVC 05- SpringMVC中攜帶

          SpringMVC 05: SpringMVC中攜帶數據的頁面跳轉

          pringMVC默認的參數對象

          • SpringMVC默認的參數對象是指,不用再另行創建,相當于SpringMVC內置對象,可以直接聲明并使用
          • 默認的參數對象有:HttpServletRequest,HttpServletResponse,HttpSession,Model,Map,ModelMap
          • 注意:Model,Map,ModelMap和HttpServletRequest對象一樣都使用請求作用域,所以在頁面跳轉時,只可以采用轉發方式
          • 如果要采用重定向的方式完成頁面跳轉而且還要保證數據傳遞的正確性,只能使用HttpSession

          進行攜帶數據的頁面跳轉

          • SpringMVC的項目配置和前面SpringMVC博集中(指SpringMVC 02)配置相同
          • webapp/index.jsp:網站的首頁,用來向后端發送一個簡單的攜帶數據的get請求
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>index.jsp</title>
          </head>
          <body>
          <a href="${pageContext.request.contextPath}/data.action?name=餃子">攜帶數據進行頁面跳轉</a>
          </body>
          </html>
          
          • webapp/admin/main.jsp如下:作為請求的最終響應頁面,測試在經過頁面跳轉后,后端放入對應作用域中的數據是否還有效
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>main.jsp</title>
          </head>
          <body>
          <h2>顯示頁面跳轉時攜帶的數據......</h2>
              <!-- 在經過頁面跳轉后,在跳轉到的頁面里,嘗試獲取之前存放的數據-->
          	request: ${requestUser}<br>
          	httpSession: ${sessionUser}<br>
          	model: ${modelUser}<br>
          	map: ${mapUser}<br>
          	modelMap: ${modelMapUser}<br>
              
              <!-- 嘗試直接獲取請求地址中攜帶的參數數據-->
          	param: ${param.name}
          </body>
          </html>
          
          • 創建SpringMVC控制器:DataAction。在控制器的action方法中利用SpringMVC內置對象,將數據存放到相應作用域中
          package com.example.controller;
          
          import com.example.pojo.User;
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.ui.ModelMap;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;
          import java.util.Map;
          
          @Controller
          public class DataAction {
              @RequestMapping("/data")
              //這幾個參數都是SpringMVC內置的,可以直接聲明使用
              public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map<Object, Object> map, ModelMap modelMap){
                  
                  //User實體類含有兩個屬性:name(String), age(int)。無參構造方法。全屬性的有參構造方法,getter,setter,toString方法
                  User user=new User("荷包蛋", 20);
                  //將user對象利用各SpringMVC內置對象存放到相應作用域中
                  request.setAttribute("requestUser", user);
                  httpSession.setAttribute("sessionUser", user);
                  model.addAttribute("modelUser", user);
                  map.put("mapUser", user);
                  modelMap.addAttribute("modelMapUser", user);
                  //最后完成頁面轉發跳轉
                  return "main";
              }
          }
          
          • 當控制器中的action方法以轉發的方式跳轉到webapp/admin/main.jsp頁面時
          • 部署并啟動tomcat進行測試
          • 網站首頁(left),響應頁面(right):可見對于放入相應作用域中的數據,在經過頁面轉發跳轉后仍然可以獲取到之前存放的數據
          • 而且對于param也可以在響應的頁面中直接獲取到隨著前端請求攜帶而來的數據(攜帶而來的數據放在請求域中,轉發是一次請求,請求域還在,自然可以獲取到)

          • 當控制器中的action方法以重定向的方式跳轉到webapp/admin/main.jsp頁面時
          package com.example.controller;
          
          import com.example.pojo.User;
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.ui.ModelMap;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;
          import java.util.Map;
          
          @Controller
          public class DataAction {
              @RequestMapping("/data")
              public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map<Object, Object> map, ModelMap modelMap){
                  User user=new User("荷包蛋", 20);
                  request.setAttribute("requestUser", user);
                  httpSession.setAttribute("sessionUser", user);
                  model.addAttribute("modelUser", user);
                  map.put("mapUser", user);
                  modelMap.addAttribute("modelMapUser", user);
                  
                  //最后完成頁面的重定向跳轉
                  return "redirect:/admin/main.jsp";
              }
          }
          
          • 網站首頁(left),響應頁面(right):可見對于放入相應作用域中的數據,在經過頁面重定向跳轉后只有session域中可以獲取到之前存放的數據
          • 因為本例中的重定向是兩次請求,凡是放在第一次請求域中的數據,在第二次請求發起后,之前存放的數據對于第二次請求來說已經失效,無法訪問原來存放的數據,而由于瀏覽器并未關閉,則session域仍然有效,可以正確獲取之前存放在session域中的數據

          發和重定向的頁面跳轉方式

          • 頁面跳轉方式,本質上只有2種方式:轉發 + 重定向
          • 但在SpringMVC的具體實現上,轉發可以細分為:普通的頁面轉發 + 經由action方法的頁面轉發
          • 重定向可以細分為:普通的頁面重定向 + 經由action方法的頁面重定向
          • 所以在具體的代碼實現層面上,頁面跳轉可以細分為4種方式
          • 本例中的SpringMVC項目配置和SpringMVC博客集(指SpringMVC 02)一致
          • 在webapp/admin目錄下新建main.jsp,作為各種請求的最終響應頁面
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>main.jsp</title>
          </head>
          <body>
          <h2>main......page......</h2>
          </body>
          </html>
          
          • webapp/index.jsp如下,是包含四種頁面跳轉方式的前端頁面
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>index.jsp</title>
          </head>
          <body>
          <h2>4種轉發和重定向的方式</h2>
          <hr>
          <a href="${pageContext.request.contextPath}/one.action">1.普通轉發頁面(對請求的默認處理方式)</a><br><br>
              
          <a href="${pageContext.request.contextPath}/two.action">2.action轉發頁面</a><br><br>
              
          <a href="${pageContext.request.contextPath}/three.action">3.普通重定向頁面</a><br><br>
              
          <a href="${pageContext.request.contextPath}/four.action">4.action重定向頁面</a>
          </body>
          </html>
          
          • 新建控制器:JumpAction,其中含有測試4種頁面跳轉方式的action方法
          package com.example.controller;
          
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          @Controller
          public class JumpAction {
              
              /**
                  1.
              	之前在springmvc.xml中配置了視圖解析器,這是SpringMVC處理頁面跳轉的默認方式,屬于普通轉發跳轉
              	會將頁面轉發到action方法的返回值和前綴后綴拼接形成的路徑所對應資源頁面
              */
              @RequestMapping("/one")
              public String one(){
                  System.out.println("one action被訪問......");
                  return "main";
              }
          
              /**    2.
               *     下面是我們注冊的視圖解析器的父類:UrlBasedViewResolver,中的幾個參數
               *     通過對底層源代碼的解讀,可知在action方法的返回值字符串中,如果以"redirect:"或者"forward:"開頭則不會執行視圖解析器的路徑拼接
               *     而是會按照redirect或forward完成頁面重定向或頁面跳轉
               *
               *     public static final String REDIRECT_URL_PREFIX="redirect:";
               *     public static final String FORWARD_URL_PREFIX="forward:";
               *     private String prefix="";
               *     private String suffix="";
               *     
               *     注意:不管要使用action的頁面轉發或者是action的頁面重定向,由于action方法是控制器內部的方法
               *     所以要想訪問action方法必須訪問到控制SpringMVC控制器,而要訪問控制器,前提是要能被SpringMVC核心處理器處理(也就是底層的servlet)
               *     而要想被底層servlet處理,必須滿足請求路徑的通配條件,這是我們在web.xml文件中配置好的"*.action"
               *     所以要在請求的末尾加上".action"以滿足請求的通配要求,才有資格被交給SpringMVC的控制器中的方法處理
               */
              @RequestMapping("/two")
              public String two(){
                  System.out.println("other action被訪問......");
                  return "forward:/one.action";
              }
          
              
              /**
               *    如果是普通重定向,直接重定向到項目資源,不需要控制器中的action方法的處理,請求路徑后不用跟".action",直接寫重定向的資源路徑即可
               *
               */
              @RequestMapping("/three")
              public String three(){
                  System.out.println("three action被訪問......");
                  return "redirect:/admin/main.jsp";
              }
          
              
              /**
               *    要在請求的末尾加上".action"以滿足請求的通配要求,才有資格被交給SpringMVC的控制器中的方法執行
               *
               */
              @RequestMapping("/four")
              public String four(){
                  System.out.println("other action被訪問....");
                  return "redirect:/three.action";
              }
          }
          
          • 部署并啟動tomcat測試
          • 網站首頁

          • 測試1:普通轉發頁面
          • 響應頁面(left),控制臺輸出(right)如下:重點關注響應頁面的地址欄地址,由于訪問次序為one.action --->轉發--->main.jsp,所以顯示one.action

          • 測試2:action轉發頁面
          • 響應頁面(left),控制臺輸出(right)如下:重點關注響應頁面的地址欄地址,由于訪問次序為two.action --->轉發---> one.action --->轉發--->main.jsp,所以顯示two.action

          • 測試3:普通重定向頁面
          • 響應頁面(left),控制臺輸出(right)如下:重點關注響應頁面的地址欄地址,由于訪問次序為three.action --->重定向--->main.jsp,所以顯示main.jsp

          • 測試4:action重定向頁面
          • 響應頁面(left),控制臺輸出(right)如下:重點關注響應頁面的地址欄地址,由于訪問次序為four.action --->重定向---> three.action --->重定向--->main.jsp,所以顯示main.jsp


          合靜態html(模擬SpringMVC):
          馬克- to-win:馬克 java社區:防盜版實名手機尾號: 73203。
          馬克-to-win@馬克java社區:1)在上一個項目中,在src/main目錄下,添加resources/static/index.html:(參考目錄下:BootSpringMVC)注意:在resources根目錄下添加test.html,是訪問不到的。在src/main目錄下,添加resources/templates/result.html,也是訪問不到的。

          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="UTF-8">
          <title>Insert title here</title>
          </head>
          <body>
          index1
          <a href="/hello.do">test SpringMvc</a>
          </body>
          </html>
          package com.SpringbootMaven;

          import java.io.IOException;
          import javax.servlet.http.HttpServletResponse;
          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          篇幅有限更多請見擴展鏈接:http://www.mark-to-win.com/tutorial/frame_springBoot_SpringBoothtml.html


          主站蜘蛛池模板: 精品少妇人妻AV一区二区| 麻豆亚洲av熟女国产一区二| 亚洲国产精品一区二区成人片国内 | 一区二区三区四区在线视频| 色视频综合无码一区二区三区| 午夜无码一区二区三区在线观看 | 人妻少妇AV无码一区二区| 精品少妇ay一区二区三区| 国产免费播放一区二区| 精品无码国产一区二区三区AV| 一区二区三区视频免费| 日本精品视频一区二区| 亚洲av综合av一区二区三区| 久久国产免费一区| 精品亚洲AV无码一区二区| 久久精品一区二区| 国产品无码一区二区三区在线蜜桃| 日本一区二区三区在线看 | 久久精品一区二区三区AV| 成人免费av一区二区三区| 精品福利一区3d动漫| 国模精品一区二区三区视频| 毛片一区二区三区| 久久er99热精品一区二区 | 日韩视频在线一区| 亚洲熟妇无码一区二区三区导航 | 亚洲国产精品无码第一区二区三区| 国产精品伦一区二区三级视频 | 日韩精品区一区二区三VR| 国产精华液一区二区区别大吗 | 国产麻豆媒一区一区二区三区| 国产福利一区二区三区在线观看| 亚洲AV福利天堂一区二区三| 久久高清一区二区三区| 亚欧色一区W666天堂| 人妻aⅴ无码一区二区三区| 无码av免费一区二区三区| 精品人无码一区二区三区| 亚洲福利视频一区二区三区| 日本视频一区在线观看免费 | 午夜视频在线观看一区|