關於Servlet中的轉發和重定項
阿新 • • 發佈:2018-08-12
但是 red clas request對象 自己 變化 dir edi response
一:轉發
首先轉發屬於服務器內部行為,通過瀏覽器的地址欄是看不到URL變化的。比如說客戶端發送一個請求到ServletA,ServletA接收到請求,但是沒有能力處理,但是ServletA知道ServletB可以處理,它不想直接告訴瀏覽器說自己處理不了,於是ServletA就將請求傳遞給了ServletB代為完成,該行為發生在服務器內部,客戶端 看不到變化,當ServletB處理完畢請求後,會響應客戶端,該行為相當於A盜用了B的勞動成果。(兩個Servlet中使用的request和response是同一個)
req.getRequestDispatcher("/ServletB").forward(req, resp); //使用request對象 // WEB-INF文件夾中的文件,在外部是沒有辦法訪問的。但是可以直接在服務器內部,通過代碼進行訪問(如訪問/WEB-INF/notice.html): // req.getRequestDispatcher("/WEB-INF/notice.html").forward(req,resp);
二:重定向
重定向不屬於服務器內部行為,客戶端發送完請求後會清楚的看到瀏覽器地址欄的變化。比如說客戶端發送一個請求到ServletA,ServletA接收到請求,但是沒有能力處理,於是它就回復客戶端說自己處理不了,在回復的同時告知了客戶端說ServletB可以處理,讓客戶端去找ServletB,因此地址欄會發生變化,由原本的ServletA重新指定到ServletB。
resp.sendRedirect("/ServletB"); //使用response對象
關於Servlet中的轉發和重定項