欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解

 更新時(shí)間:2023年05月06日 11:02:37   作者:wei_shuo  
這篇文章主要介紹了關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解,請(qǐng)求的轉(zhuǎn)發(fā),是指服務(wù)器收到請(qǐng)求后,從一個(gè)服務(wù)器端資源跳轉(zhuǎn)到同一個(gè)服務(wù)器端另外一個(gè)資源的操作,需要的朋友可以參考下

轉(zhuǎn)發(fā)

轉(zhuǎn)發(fā)與頁(yè)面跳轉(zhuǎn)

轉(zhuǎn)發(fā)

  • 轉(zhuǎn)發(fā)的作用在服務(wù)器端,將請(qǐng)求發(fā)送給服務(wù)器上的其他資源,以共同完成一次請(qǐng)求的處理

頁(yè)面跳轉(zhuǎn)

  • 使用forward跳轉(zhuǎn)時(shí),是在服務(wù)器內(nèi)部跳轉(zhuǎn),地址欄不發(fā)生變化,屬于同一次請(qǐng)求

調(diào)用業(yè)務(wù)邏輯的Servlet中,編寫(xiě)代碼:

request.getRequestDispatcher("/目標(biāo)URL-pattern").forward(request,response);
//跳轉(zhuǎn)轉(zhuǎn)發(fā)到login.jsp
req.getRequestDispatcher("login.jsp").forward(req,resp);

數(shù)據(jù)傳遞

request作用域

  • 擁有存數(shù)據(jù)的空間,作用范圍是一次請(qǐng)求有效(一次請(qǐng)求可以經(jīng)過(guò)多次轉(zhuǎn)發(fā))
    • 可以將數(shù)據(jù)存入request后,在一次請(qǐng)求過(guò)程中的任何位置進(jìn)行獲取
    • 可以傳遞數(shù)據(jù)(基本數(shù)據(jù)類型,對(duì)象,數(shù)組,集合等)

存數(shù)據(jù)

以鍵值對(duì)的形式存儲(chǔ)在request作用域中,key為String類型,value為Object類型JSP內(nèi)置對(duì)象session和request都有這個(gè)方法
request.setAttribute(key,value);

取數(shù)據(jù)

通過(guò)String類型的key訪問(wèn)Object類型的value
request.getAttribute(key)

存取數(shù)據(jù)

//request作用域存儲(chǔ)數(shù)據(jù)
req.setAttribute("admins",adminList);
//request作用取數(shù)據(jù)
request.getAttribute("admins");

重定向

重定向作用在客戶端,客戶端請(qǐng)求發(fā)送給服務(wù)器后,服務(wù)器響應(yīng)給客戶端一個(gè)新的請(qǐng)求地址,客戶端重新發(fā)送新的請(qǐng)求

重定向與頁(yè)面跳轉(zhuǎn)

調(diào)用業(yè)務(wù)邏輯的Servlet中,編寫(xiě)代碼:

// response.sendRedirect("目標(biāo)URL");
resp.sendRedirect("index.jsp");		//重定向跳轉(zhuǎn)到index.jsp頁(yè)面

數(shù)據(jù)傳遞

sendRedirect跳轉(zhuǎn)時(shí),地址欄發(fā)生改變,代表客戶端重新發(fā)送請(qǐng)求,屬于兩次請(qǐng)求

  • response沒(méi)有作用域,兩次request請(qǐng)求中的數(shù)據(jù)無(wú)法共享

傳遞數(shù)據(jù)

  • resp.sendRedirect(“URL”);
  • 通過(guò)URl的拼接進(jìn)行數(shù)據(jù)傳遞 “網(wǎng)頁(yè)地址?username=tom”;
  • response傳遞數(shù)據(jù)只能是String類型

獲取數(shù)據(jù)

  • request.getParameter(“username”);
//傳遞數(shù)據(jù)
resp.sendRedirect("/WebProject_war_exploded/b?username=tom");   //傳遞數(shù)據(jù)為String類型,明文傳遞
//獲取數(shù)據(jù)
String username = req.getParameter("username");

轉(zhuǎn)發(fā)與重定向的區(qū)別

轉(zhuǎn)發(fā)重定向
轉(zhuǎn)發(fā)使用的是getRequestDispatcher()方法重定向使用的是sendRedirect()方法
瀏覽器URL的地址欄不變瀏覽器URL的地址欄改變
轉(zhuǎn)發(fā)是服務(wù)器行為重定向是客戶端行為
轉(zhuǎn)發(fā)是瀏覽器只做了一次訪問(wèn)請(qǐng)求重定向是瀏覽器做了至少兩次的訪問(wèn)請(qǐng)求
轉(zhuǎn)發(fā)2次跳轉(zhuǎn)之間傳輸?shù)男畔⒉粫?huì)丟失重定向2次跳轉(zhuǎn)之間傳輸?shù)男畔?huì)丟失(request范圍)
重定向的第二個(gè)請(qǐng)求一定是GET

轉(zhuǎn)發(fā)和重定向總結(jié):

當(dāng)兩個(gè)Servlet需要傳遞數(shù)據(jù)時(shí),選擇forward轉(zhuǎn)發(fā),不建議使用sendRedirect轉(zhuǎn)發(fā),因?yàn)閟endRedirect是明文傳遞不安全

Servlet生命周期(四階段)

Servlet 生命周期

Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個(gè)過(guò)程。以下是 Servlet 遵循的過(guò)程:

  • Servlet 初始化后調(diào)用 init () 方法
  • Servlet 調(diào)用 service() 方法來(lái)處理客戶端的請(qǐng)求
  • Servlet 銷毀前調(diào)用 destroy() 方法
  • 最后,Servlet 是由 JVM 的垃圾回收器進(jìn)行垃圾回收的

在這里插入圖片描述

實(shí)例化

用戶第一次訪問(wèn)Servlet是,由容器調(diào)用Servlet的構(gòu)造器創(chuàng)建具體的Servlet對(duì)象,也可以啟動(dòng)容器后立刻創(chuàng)建實(shí)例,使用如下代碼可以設(shè)置Servlet是否在服務(wù)器啟動(dòng)時(shí)就創(chuàng)建

  • 只執(zhí)行一次

初始化

初始化階段,init()方法會(huì)被調(diào)用,這個(gè)方法在javax.servlet.Servlet接口中定義,其中,方法以一個(gè)ServletConfig類型的對(duì)象作為參數(shù)

  • init方法只被執(zhí)行一次

服務(wù)

客戶端有一個(gè)請(qǐng)求時(shí),容器會(huì)將請(qǐng)求ServletRequest與響應(yīng)ServletRequest對(duì)象轉(zhuǎn)給Servlet,以參數(shù)的形式傳給service方法

  • 此方法會(huì)執(zhí)行多次

銷毀

Servlet容器(Tomcat)停止或者重新啟動(dòng)(Tomcat)都會(huì)引起銷毀Servlet對(duì)象并調(diào)用destroy方法

  • destroy方法執(zhí)行一次

實(shí)例:

package com.woniu.servlet2;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(value = "/ls")
public class LifeServlet implements Servlet {
    public LifeServlet(){
        System.out.println("1.實(shí)例化");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.初始化");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.提供服務(wù),接受請(qǐng)求,響應(yīng)結(jié)果");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("4.銷毀");
    }
}
重啟或停止Tomcat即會(huì)輸出銷毀

在這里插入圖片描述

到此這篇關(guān)于關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解的文章就介紹到這了,更多相關(guān)Javaweb的轉(zhuǎn)發(fā)和重定向內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java二分查找算法實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java Arrays工具類實(shí)例詳解

    java Arrays工具類實(shí)例詳解

    這篇文章主要介紹了java Arrays工具類實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • IDEA創(chuàng)建Java項(xiàng)目導(dǎo)出Jar包運(yùn)行

    IDEA創(chuàng)建Java項(xiàng)目導(dǎo)出Jar包運(yùn)行

    這篇文章主要介紹了IDEA創(chuàng)建Java項(xiàng)目導(dǎo)出Jar包運(yùn)行,需要的朋友可以參考下
    2021-01-01
  • SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證

    SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證

    本文主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 從0開(kāi)始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐

    從0開(kāi)始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐

    這篇文章主要介紹了從0開(kāi)始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐,結(jié)合具體入門項(xiàng)目分析了大數(shù)據(jù)java spark編程項(xiàng)目建立、調(diào)試、輸出等相關(guān)步驟及操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java連接MySQL數(shù)據(jù)庫(kù)命令行程序過(guò)程

    Java連接MySQL數(shù)據(jù)庫(kù)命令行程序過(guò)程

    SQL編程包括兩種形式,一種是過(guò)程化編程,主要通過(guò)數(shù)據(jù)庫(kù)交互式工具,通過(guò)存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)等形式的編程;另一種是嵌入式SQL編程,將SQL語(yǔ)句嵌入到高級(jí)開(kāi)發(fā)語(yǔ)言,完成數(shù)據(jù)的各種操作
    2021-10-10
  • Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式

    Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式

    這篇文章主要介紹了Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解Java中的pinpoint1.8.5安裝及使用指南

    詳解Java中的pinpoint1.8.5安裝及使用指南

    pinpoint是開(kāi)源在github上的一款A(yù)PM監(jiān)控工具,它是用Java編寫(xiě)的,用于大規(guī)模分布式系統(tǒng)監(jiān)控。這篇文章主要介紹了pinpoint1.8.5安裝及使用指南,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java線程中sleep和wait的區(qū)別詳細(xì)介紹

    Java線程中sleep和wait的區(qū)別詳細(xì)介紹

    Java中的多線程是一種搶占式的機(jī)制,而不是分時(shí)機(jī)制。搶占式的機(jī)制是有多個(gè)線程處于可運(yùn)行狀態(tài),但是只有一個(gè)線程在運(yùn)行
    2012-11-11
  • java easyUI實(shí)現(xiàn)自定義網(wǎng)格視圖實(shí)例代碼

    java easyUI實(shí)現(xiàn)自定義網(wǎng)格視圖實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于java easyUI實(shí)現(xiàn)自定義網(wǎng)格視圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論