【SpringMVC】 4.1 請求重定向和轉發

SpringMVC學習記錄html

注意:如下內容是學習 北京動力節點 的SpringMVC視頻後所記錄的筆記以、源碼,若有須要請直接訪問 北京動力節點 進行學習java

第4章 SpringMVC 核心技術

4.1 請求重定向和轉發

 當處理器對請求處理完畢後,向其它資源進行跳轉時,有兩種跳轉方式:請求轉發與重 定向。而根據所要跳轉的資源類型,又可分爲兩類:跳轉到頁面與跳轉到其它處理器。
注意,對於請求轉發的頁面,能夠是WEB-INF中頁面;而重定向的頁面,是不能爲WEB-INF 中頁的。由於重定向至關於用戶再次發出一次請求,而用戶是不能直接訪問WEB-INF中資 源的。
在這裏插入圖片描述
 SpringMVC框架把原來Servlet中的請求轉發和重定向操做進行了封裝。如今能夠使用簡 單的方式實現轉發和重定向。
forward:表示轉發,實現 request.getRequestDispatcher("xx.jsp").forward()
redirect:表示重定向,實現 response.sendRedirect("xxx.jsp")node

4.1.1 請求轉發

4.1.2 請求重定向

項目結構:
  web

如下是源碼:spring

  • colntroller
package com.bjpowernode.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.ws.RequestWrapper;

/**
 * @RequestMapping:
 *    value : 全部請求地址的公共部分,叫作模塊名稱
 *    位置: 放在類的上面
 */
@Controller
public class MyController {
    /**
     * 處理器方法返回ModelAndView,實現轉發forward
     * 語法: setViewName("forward:視圖文件完整路徑")
     * forward特色: 不和視圖解析器一同使用,就當項目中沒有視圖解析器
     */
    @RequestMapping(value = "/doForward.do")
    public ModelAndView doSome(){
        //處理some.do請求了。 至關於service調用處理完成了。
        ModelAndView mv  = new ModelAndView();
        mv.addObject("msg","歡迎使用springmvc作web開發");
        mv.addObject("fun","執行的是doSome方法");
        //顯示轉發
        //mv.setViewName("forward:/WEB-INF/view/show.jsp");

        mv.setViewName("forward:/hello.jsp");
        return mv;
    }

    /**
     * 處理器方法返回ModelAndView,實現重定向redirect
     * 語法:setViewName("redirect:視圖完整路徑")
     * redirect特色: 不和視圖解析器一同使用,就當項目中沒有視圖解析器
     *
     * 框架對重定向的操做:
     * 1.框架會把Model中的簡單類型的數據,轉爲string使用,做爲hello.jsp的get請求參數使用。
     *   目的是在 doRedirect.do 和 hello.jsp 兩次請求之間傳遞數據
     *
     * 2.在目標hello.jsp頁面能夠使用參數集合對象 ${param}獲取請求參數值
     *    ${param.myname}
     *
     * 3.重定向不能訪問/WEB-INF資源
     */
    @RequestMapping(value = "/doRedirect.do")
    public ModelAndView doWithRedirect(String name,Integer age){
        //處理some.do請求了。 至關於service調用處理完成了。
        ModelAndView mv  = new ModelAndView();
        //數據放入到 request做用域
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        //重定向
        //mv.setViewName("redirect:/hello.jsp");
        //http://localhost:8080/ch08_forard_redirect/hello.jsp?myname=lisi&myage=22
        //重定向不能訪問/WEB-INF資源
        mv.setViewName("redirect:/WEB-INF/view/show.jsp");
        return mv;
    }
}
  • springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--聲明組件掃描器-->
    <context:component-scan base-package="com.bjpowernode.controller" />

    <!--聲明 springmvc框架中的視圖解析器, 幫助開發人員設置視圖文件的路徑-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前綴:視圖文件的路徑-->
        <property name="prefix" value="/WEB-INF/view/" />
        <!--後綴:視圖文件的擴展名-->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
  • maven pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.bjpowernode</groupId>
  <artifactId>ch08-forard-redirect</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--servlet依賴-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp依賴-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2.1-b03</version>
      <scope>provided</scope>
    </dependency>
    <!--springmvc依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- 編碼和編譯和JDK版本 -->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

forward:表示轉發
redirect:表示重定向
forward和redirect都是關鍵字, 有一個共同的特色不和視圖解析器一同工做apache

擴展:
 forward和redirect他們均可以訪問 視圖文件,好比某個jsp ,html
 forward:/hello.jsp forward:/main.html
 forward和redirect他們均可以訪問其它的controller
 forward:/some.do , redirect:/other.do
 處理器方法能夠返回ModelAndView, String , void 均可以使用forward,redirectapi

相關文章
相關標籤/搜索