天天看點

卷妹的成長日記之javaweb day10

卷妹的成長日記之javaweb day10

👩‍💻部落格首頁:京與舊鋪的部落格首頁

✨歡迎關注🖱點贊🎀收藏⭐留言✒

🔮本文由京與舊鋪原創

😘系列專欄:java學習

👕參考網站:動力節點

💻首發時間:🎞2022年8月24日🎠

🎨你做三四月的事,八九月就會有答案,一起加油吧

🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦

🎧最後的話,作者是一個新人,在很多方面還做的不好,歡迎大佬指正,一起學習哦,沖沖沖

💬推薦一款模拟面試、刷題神器👉​​點選進入網站​​

🛒導航小助手🎪

  • 編寫DeptDelServlet繼承HttpServlet,重寫doGet方法。
package com.bjpowernode.oa.web.action;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class DeptDelServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 根據部門編号,删除部門。
        
    }
}      
  • 删除成功或者失敗的時候的一個處理(這裡我們選擇了轉發,并沒有使用重定向機制。)
// 判斷删除成功了還是失敗了。
if (count == 1) {
    //删除成功
    //仍然跳轉到部門清單頁面
    //部門清單頁面的顯示需要執行另一個Servlet。怎麼辦?轉發。
    request.getRequestDispatcher("/dept/list").forward(request, response);
}else{
    // 删除失敗
    request.getRequestDispatcher("/error.html").forward(request, response);
}      
  • 第八步:新增部門
  • 注意:最後儲存成功之後,轉發到 /dept/list 的時候,會出現405,為什麼?
  • 第一:儲存用的是post請求。底層要執行doPost方法。
  • 第二:轉發是一次請求,之前是post,之後還是post,因為它是一次請求。
  • 第三:/dept/list Servlet當中隻有一個doGet方法。
  • 怎麼解決?兩種方案
  • 第一種:在/dept/list Servlet中添加doPost方法,然後在doPost方法中調用doGet。
  • 第二種:重定向。
  • 第九步:跳轉到修改部門的頁面
  • 第十步:修改部門

在一個web應用中應該如何完成資源的跳轉

  • 在一個web應用中通過兩種方式,可以完成資源的跳轉:
  • 第一種方式:轉發
  • 第二種方式:重定向
  • 轉發和重定向有什麼差別?
  • 代碼上有什麼差別?
  • 轉發
// 擷取請求轉發器對象
RequestDispatcher dispatcher = request.getRequestDispatcher("/dept/list");
// 調用請求轉發器對象的forward方法完成轉發
dispatcher.forward(request, response);

// 合并一行代碼
request.getRequestDispatcher("/dept/list").forward(request, response);
// 轉發的時候是一次請求,不管你轉發了多少次。都是一次請求。
// AServlet轉發到BServlet,再轉發到CServlet,再轉發到DServlet,不管轉發了多少次,都在同一個request當中。
// 這是因為調用forward方法的時候,會将目前的request和response對象傳遞給下一個Servlet。      
  • 重定向
// 注意:路徑上要加一個項目名。為什麼?
// 浏覽器發送請求,請求路徑上是需要添加項目名的。
// 以下這一行代碼會将請求路徑“/oa/dept/list”發送給浏覽器
// 浏覽器會自發的向伺服器發送一次全新的請求:/oa/dept/list
response.sendRedirect("/oa/dept/list");      
  • 形式上有什麼差別?
  • 轉發(一次請求)
  • 在浏覽器位址欄上發送的請求是:http://localhost:8080/servlet10/a ,最終請求結束之後,浏覽器位址欄上的位址還是這個。沒變。
  • 重定向(兩次請求)
  • 在浏覽器位址欄上發送的請求是:http://localhost:8080/servlet10/a ,最終在浏覽器位址欄上顯示的位址是:http://localhost:8080/servlet10/b
  • 轉發和重定向的本質差別?
  • 轉發:是由WEB伺服器來控制的。A資源跳轉到B資源,這個跳轉動作是Tomcat伺服器内部完成的。
  • 重定向:是浏覽器完成的。具體跳轉到哪個資源,是浏覽器說了算。
  • 使用一個例子去描述這個轉發和重定向
  • 借錢(轉發:發送了一次請求)
  • 杜老師沒錢了,找張三借錢,其實張三沒有錢,但是張三夠義氣,張三自己找李四借了錢,然後張三把這個錢給了杜老師,杜老師不知道這個錢是李四的,杜老師隻求了一個人。杜老師以為這個錢就是張三的。
  • 借錢(重定向:發送了兩次請求)
  • 杜老師沒錢了,找張三借錢,張三沒有錢,張三有一個好哥們,叫李四,李四是個富二代,于是張三将李四的家庭住址告訴了杜老師,杜老師按照這個位址去找到李四,然後從李四那裡借了錢。顯然杜老師在這個過程中,求了兩個人。并且杜老師知道最終這個錢是李四借給俺的。
  • 轉發和重定向應該如何選擇?什麼時候使用轉發,什麼時候使用重定向?
  • 如果在上一個Servlet當中向request域當中綁定了資料,希望從下一個Servlet當中把request域裡面的資料取出來,使用轉發機制。
  • 剩下所有的請求均使用重定向。(重定向使用較多。)
  • 跳轉的下一個資源有沒有要求呢?必須是一個Servlet嗎?
  • 不一定,跳轉的資源隻要是伺服器内部合法的資源即可。包括:Servlet、JSP、HTML…
  • 轉發會存在浏覽器的重新整理問題。

将oa項目中的資源跳轉修改為合适的跳轉方式

  • 删除之後,重定向
  • 修改之後,重定向
  • 儲存之後,重定向
  • 重定向:
  • 成功
  • 失敗