1. 程式人生 > 實用技巧 >JavaWeb案例:使用response實現重定向

JavaWeb案例:使用response實現重定向

一、前言

其實javaweb案例前兩個只不過是給我們練練手,複習複習基礎用的。沒有掌握也沒有關係,然而重定向才是最重要的技術,我們需要重點掌握重定向技術。

二、實現重定向

一個web資源收到客戶端請求後,他會通知客戶端去訪問另外一個web資源,這個過程就是重定向。

常見場景:

  • 使用者登入
void sendRedirect(String var1) throws IOException;
  • 1

程式碼測試:

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        resp.setHeader("Location","/r/img");
        resp.setStatus(302);
         */
        
        resp.sendRedirect("/r/img"); //重定向
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

結果在瀏覽器中訪問效果如下:路徑從 /red 自動跳轉到 /img

三、面試題:重定向和請求轉發的區別

相同點:

  1. 頁面都會實現跳轉

不同點:

  1. 請求轉發時候,url不會產生變化
  2. 重定向時候,url位址列會發生變化

四、使用重定向技術做一個小Demo

最開始我們要做好準備工作:
先建立一個Maven專案,匯入jsp依賴,程式碼如下:

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

步驟:

  1. 建立一個類繼承HttpServlet類,重寫doGet()和doPost()。該類的url-pattern(訪問路徑)為是/login:
package com.xu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //處理請求
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username + ":" + password);
        //重定向的時候,一定要注意路徑問題,否則就會404
        resp.sendRedirect("/r/success.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  1. 根據程式碼我們可以看出,我們重定向的資源路徑為/success.jsp。該jsp頁面的程式碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 我們在index.jsp(開啟伺服器後,首次訪問的頁面)頁面中新增form表單,作為登入頁面,效果如下:

程式碼如下:

<html>
<body>
<h2>Hello World!</h2>

<%--這裡提交的路徑,需要尋找到專案的路徑--%>
<%--${pageContext.request.contextPath}代表當前專案--%>
<form action="${pageContext.request.contextPath}/login" method="get">
    使用者名稱:<input type="text" name="username"> <br>
    密碼:<input type="password" name="password"> <br>
    <input type="submit">
</form>
</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最後我們開啟伺服器,首先會彈出登入頁面,提交表單後,會訪問RequestTest類資源,由於該類中程式碼使用重定向技術會將頁面定向到success.jsp頁面,以上就是重定向技術的展示。