国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記

這篇具有很好參考價(jià)值的文章主要介紹了會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、核心知識(shí)點(diǎn)(重點(diǎn)):

1.1 Cookie

1. Cookie:是一種客戶端會(huì)話技術(shù),數(shù)據(jù)會(huì)被保存在客戶端,Cookie會(huì)攜帶數(shù)據(jù)訪問(wèn)服務(wù)器,用以完成一次會(huì)話內(nèi)多次請(qǐng)求間的數(shù)據(jù)共享

2. 過(guò)程:瀏覽器(客戶端)先向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端會(huì)發(fā)送一個(gè)Cookie給客戶端,在此后同一次會(huì)話中,每次客戶端都會(huì)將Cookie發(fā)送給服務(wù)端,數(shù)據(jù)層層疊加。

3. Cookie存活時(shí)間:默認(rèn)情況下,Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,內(nèi)存釋放,則Cookie被銷毀。調(diào)用setMaxAge(int seconds)可以設(shè)置Cookie的存活時(shí)間。

4. Cookie的發(fā)送和獲取:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring?會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

1.2 Session

1. Session:服務(wù)端的會(huì)話跟蹤技術(shù),將數(shù)據(jù)保存在服務(wù)端。JavaEE提供HttpSession接口,來(lái)實(shí)現(xiàn)一次會(huì)話的多次請(qǐng)求間數(shù)據(jù)共享功能。Session的實(shí)現(xiàn)是基于Cookie的。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

2. Session的鈍化和活化:(鈍化:)在服務(wù)器正常關(guān)閉后,Tomcat會(huì)自動(dòng)將Session數(shù)據(jù)寫入硬盤的文件中。(活化:)再次啟動(dòng)服務(wù)器后,從文件中加載數(shù)據(jù)到Session中。

3. Session的銷毀,在web.xml中可以用<session-timeout>標(biāo)簽進(jìn)行更改銷毀時(shí)間。:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

1.3 HTTP

1. HTTP(Hyper Text Transfer Protocol 超文本傳輸協(xié)議):規(guī)定了瀏覽器和服務(wù)器之間數(shù)據(jù)傳輸?shù)囊?guī)則(服務(wù)器和客戶端之間進(jìn)行數(shù)據(jù)交互的格式)。

2. HTTP協(xié)議特點(diǎn):1. 基于TCP協(xié)議:面向連接、安全。2. 基于請(qǐng)求-響應(yīng)模型的:一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)。3. HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議:對(duì)于事務(wù)處理沒(méi)有記憶能力。每次請(qǐng)求-響應(yīng)都是獨(dú)立的。缺點(diǎn):多次請(qǐng)求間不能共享數(shù)據(jù)。(Java中用會(huì)話技術(shù),如Cookie、Session來(lái)解決這個(gè)問(wèn)題)優(yōu)點(diǎn):速度快。

3. GET和POST的區(qū)別:1. GET請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求行中,沒(méi)有請(qǐng)求體。POST請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求體中。2. GET請(qǐng)求的請(qǐng)求參數(shù)大小有限制,POST沒(méi)有限制。

4. 狀態(tài)碼:302? Found? 找到。304? Not Modified? 沒(méi)有修改。400? Bad Request? 錯(cuò)誤的請(qǐng)求。403? Forbidden? 拒絕。404? Not Found? 請(qǐng)求資源不存在。428? Precondition Required 有條件請(qǐng)求。?429? Too Many Requests? 太多請(qǐng)求。431? ?Request Header Fields Too Large? 請(qǐng)求頭太大。405? ?Method Not Allowed? ?請(qǐng)求方式有誤。500 ? Internal Server Error? ?服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。503 ? Service Unavailable? 服務(wù)器尚未準(zhǔn)備好處理請(qǐng)求。511? ?Network Authentication Required? 需要進(jìn)行身份驗(yàn)證。

二、會(huì)話跟蹤技術(shù)(Cookie+Session)

1.1 預(yù)備知識(shí)

1. 會(huì)話:用戶打開瀏覽器,訪問(wèn)web服務(wù)器的資源,會(huì)話建立,直到有一方斷開連接,會(huì)話結(jié)束。在一次會(huì)話中可以包含多次請(qǐng)求和響應(yīng)。

2. 會(huì)話跟蹤:一種維護(hù)瀏覽器狀態(tài)的方法,服務(wù)器需要識(shí)別多次請(qǐng)求是否來(lái)自于同一個(gè)瀏覽器,以便在同一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù)。

3. 為什么需要會(huì)話跟蹤技術(shù)?

因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的(如果是有狀態(tài)的則后面的請(qǐng)求要攜帶前面請(qǐng)求所有的數(shù)據(jù),會(huì)導(dǎo)致請(qǐng)求的體量很大,訪問(wèn)的速度會(huì)很慢),每次瀏覽器向服務(wù)器請(qǐng)求時(shí),服務(wù)器都會(huì)將該請(qǐng)求視為新的請(qǐng)求,因此我們需要會(huì)話跟蹤技術(shù)來(lái)實(shí)現(xiàn)會(huì)話內(nèi)數(shù)據(jù)共享。

4. 實(shí)現(xiàn)方式:客戶端會(huì)話跟蹤技術(shù):Cookie;服務(wù)端會(huì)話跟蹤技術(shù):Session。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

1.2 Cookie基本使用

Cookie:客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端,以后每次請(qǐng)求都攜帶Cookie數(shù)據(jù)進(jìn)行訪問(wèn)。

過(guò)程:瀏覽器(客戶端)先向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端會(huì)發(fā)送一個(gè)Cookie給客戶端,在此后同一次會(huì)話中,每次客戶端都會(huì)將Cookie發(fā)送給服務(wù)端,數(shù)據(jù)層層疊加。

1.2.1 發(fā)送Cookie

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

在java-web-cookie路徑下創(chuàng)建AServlet類,寫入下面的代碼:

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//發(fā)送Cookie
        Cookie cookie = new Cookie("username", "zhangsan");//1.創(chuàng)建Cookie對(duì)象
        response.addCookie(cookie);//2.發(fā)送Cookie。response
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

F12-設(shè)置-Cookie和網(wǎng)站權(quán)限-管理和刪除cookie和站點(diǎn)數(shù)據(jù)-查看所有Cookkie和站點(diǎn)數(shù)據(jù)

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

1.2.2 獲取Cookie

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取Cookie
        Cookie[] cookies = request.getCookies();//獲取Cookie數(shù)組
        for(Cookie cookie:cookies) { //遍歷數(shù)組
            String name = cookie.getName();
            if("username".equals(name)){
                String value = cookie.getValue(); //使用Cookie對(duì)象獲取數(shù)據(jù)
                System.out.println(name + ":" + value);
                break;  } } }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

1.3 Cookie原理和使用細(xì)節(jié)

Cookie的實(shí)現(xiàn)是基于HTTP協(xié)議的:響應(yīng)頭set-cookie(是服務(wù)端發(fā)送給瀏覽器,里面會(huì)裝有Cookie攜帶的數(shù)據(jù))請(qǐng)求頭cookie(是瀏覽器發(fā)送給服務(wù)端,里面同樣裝有數(shù)據(jù))

1. Cookie存活時(shí)間:默認(rèn)情況下,Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,內(nèi)存釋放,則Cookie被銷毀。

調(diào)用setMaxAge(int seconds)可以設(shè)置Cookie的存活時(shí)間。正數(shù):將Cookie寫入瀏覽器所在電腦的硬盤,持久化存儲(chǔ),到時(shí)間自動(dòng)刪除。負(fù)數(shù):默認(rèn)值,當(dāng)瀏覽器關(guān)閉,則Cookie被銷毀。零:刪除。

2. Cookie存儲(chǔ)中文:Cookie不能直接存儲(chǔ)中文。需要將中文轉(zhuǎn)化成其它編碼格式存儲(chǔ),等到要顯示時(shí)再解析為非中文的數(shù)據(jù)。

因此可以在Cookie的發(fā)送端調(diào)用URLEncoder將字符串轉(zhuǎn)化為UTF-8的格式:

String value="張三";
value = URLEncoder.encode(value, "UTF-8");

然后再Cookie的接收端調(diào)用URLDecoder將字符串解碼為中文字符串:?

String value = cookie.getValue();
value = URLDecoder.decode(value,"UTF-8");

1.4 Session基本使用

Session:服務(wù)端的會(huì)話跟蹤技術(shù),將數(shù)據(jù)保存在服務(wù)端。JavaEE提供HttpSession接口,來(lái)實(shí)現(xiàn)一次會(huì)話的多次請(qǐng)求間數(shù)據(jù)共享功能。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

Session發(fā)送端:?

@WebServlet("/demo1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//存儲(chǔ)到Session中
        HttpSession session = request.getSession();//1. 獲取Session對(duì)象
        session.setAttribute("username","zs");//2. 存儲(chǔ)數(shù)據(jù)
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

Session接收端:

@WebServlet("/demo2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取數(shù)據(jù),從session中
        HttpSession session = request.getSession();//1. 獲取Session對(duì)象
        Object username = session.getAttribute("username");//2. 獲取數(shù)據(jù)
        System.out.println(username);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

1.5 Session原理和使用細(xì)節(jié)

Session的實(shí)現(xiàn)是基于Cookie的。

通過(guò)打印發(fā)送端和接收端的Session地址,可以發(fā)現(xiàn)二者的地址都是相同的,因此在一次會(huì)話的多次請(qǐng)求中Session是相同的。

原理:Session對(duì)象具有唯一標(biāo)識(shí),叫作id。瀏覽器向網(wǎng)頁(yè)發(fā)出請(qǐng)求,網(wǎng)頁(yè)端的Tomcat作出響應(yīng),當(dāng)發(fā)現(xiàn)使用了Session,會(huì)將id當(dāng)作一個(gè)Cookie發(fā)送給瀏覽器,同時(shí)設(shè)置頭set-cookie:JSESSIONID=id,瀏覽器會(huì)將Cookie存儲(chǔ)在內(nèi)存里。下一次瀏覽器攜帶cookie:JSESSIONID=id這個(gè)Cokie頭訪問(wèn)服務(wù)器。服務(wù)器識(shí)別到Cookie頭,就會(huì)在內(nèi)存里尋找是否帶有這個(gè)頭的Session對(duì)象。

Session的鈍化:在服務(wù)器正常關(guān)閉后,Tomcat會(huì)自動(dòng)將Session數(shù)據(jù)寫入硬盤的文件中。

Session的活化:再次啟動(dòng)服務(wù)器后,從文件中加載數(shù)據(jù)到Session中。

所以服務(wù)器重啟之后Session中的數(shù)據(jù)不會(huì)丟失,前提是要正常的關(guān)閉和重啟。但是Session不是同一個(gè)Session。

Session的銷毀:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

默認(rèn):在web.xml中可以用<session-timeout>標(biāo)簽進(jìn)行更改銷毀時(shí)間。

1.6 案例

1. 用戶登錄

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

思路:Web層接收用戶名和密碼,調(diào)用Service層的方法,傳入username和password,會(huì)在Dao層中執(zhí)行SQL語(yǔ)句,最終會(huì)返回一個(gè)User對(duì)象,如果User不為null則登錄成功,反之登錄失敗。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

UserService代碼如下:

public class UserService {
    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
    public User login(String username, String password){
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.select(username, password);
        sqlSession.close();
        return user;
    }
}

UserService代碼如下:

public class UserService {
    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
    public User login(String username, String password){
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.select(username, password);
        sqlSession.close();
        return user;
    }
}

?LoginServlet代碼如下:

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    private UserService service = new UserService();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        User user = service.login(username,password);
        if(user != null){
            //xxx,歡迎您,這里的xxx是username,所以要把username存到共享域里,用session
            HttpSession session = req.getSession();
            session.setAttribute("user",user); //第1個(gè)參數(shù)是鍵,第2個(gè)參數(shù)是值
            String contextPath = req.getContextPath(); //動(dòng)態(tài)獲取虛擬目錄
            resp.sendRedirect(contextPath + "/selectAllServlet");
        }else{
            System.out.println("錯(cuò)誤輸出了");
            req.setAttribute("login_msg","用戶名或密碼錯(cuò)誤"); //對(duì)應(yīng)的是login.jsp中的${login_msg}用于顯示錯(cuò)誤信息
            //跳轉(zhuǎn)到login.jsp,還要攜帶錯(cuò)誤信息提示
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
            //轉(zhuǎn)發(fā)的原因是在request域里存儲(chǔ)數(shù)據(jù),只能用轉(zhuǎn)發(fā)

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

還要修改下面2個(gè)地方:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring?會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

?2. 記住用戶

?會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

在用戶名和密碼匹配成功且勾選的前提下的判斷語(yǔ)句內(nèi)加入如下代碼:

if("1".equals(remember)){ //"1"寫前面可以防止空指針異常
      Cookie c_username = new Cookie("username",username);//勾選了,發(fā)送Cookie,先創(chuàng)建對(duì)象
      Cookie c_password = new Cookie("password",password);
      c_username.setMaxAge(60*60*24*7);//設(shè)置保存時(shí)間
      c_password.setMaxAge(60*60*24*7);
      resp.addCookie(c_username); //發(fā)送cookie
      resp.addCookie(c_password);
}

更改下面這個(gè)地方:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring
3. 用戶注冊(cè)

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

在Service層的UserService中寫入如下代碼:

//注冊(cè)方法
    public boolean register(User user){
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user1 = mapper.selectByUsername(user.getUsername());
        if(user1==null) {
            mapper.add(user);
            sqlSession.commit();
        }
        sqlSession.close();
        return user1 == null;
    }

在Web層的RegisterServlet中寫入如下代碼:

@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    private UserService service = new UserService();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        boolean flag = service.register(user);
        if(flag){
            req.setAttribute("register_msg","注冊(cè)成功請(qǐng)登錄");
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }else{
            req.setAttribute("register_msg","用戶名已存在");
            req.getRequestDispatcher("/register.jsp").forward(req,resp);
        }

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

然后再修改如下2個(gè)地方:?

???????會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

4. 驗(yàn)證碼

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

首先要導(dǎo)入一個(gè)CheckCodeUtil用于生成驗(yàn)證碼:

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

checkCode存儲(chǔ)用戶輸入的驗(yàn)證碼,checkCodeGen存儲(chǔ)程序生成的驗(yàn)證碼,存儲(chǔ)在session中,然后對(duì)二者進(jìn)行比對(duì),執(zhí)行跳轉(zhuǎn),如果匹配不成功直接返回。

   //獲取用戶輸入的驗(yàn)證碼
   String checkCode = req.getParameter("checkCode");
   //獲取程序的驗(yàn)證碼
   HttpSession session = req.getSession();
   String checkCodeGen = (String)session.getAttribute("checkCodeGen");

   //比對(duì)
   if(!checkCodeGen.equalsIgnoreCase(checkCode)){
   req.setAttribute("register_msg","驗(yàn)證碼錯(cuò)誤");
req.getRequestDispatcher("/register.jsp").forward(req,resp);
   return;
}

checkCodeServlet寫入如下代碼,用于生成驗(yàn)證碼然后存儲(chǔ)到session中:

@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    private UserService service = new UserService();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletOutputStream os = resp.getOutputStream(); //輸出流
        String checkCode = CheckCodeUtil.outputVerifyImage(100, 50, os, 4); //返回驗(yàn)證碼的值
        HttpSession session = req.getSession();
        session.setAttribute("checkCodeGen",checkCode);// 存入session
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

修改如下地方:?

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

三、HTTP相關(guān)知識(shí)點(diǎn)

1.1 預(yù)備知識(shí)

B/S架構(gòu):Browser/Server,瀏覽器/服務(wù)器 架構(gòu)模式,它的特點(diǎn)是,客戶端只需要瀏覽器,應(yīng)用程序的邏輯和數(shù)據(jù)都存儲(chǔ)在服務(wù)器端。瀏覽器只需要請(qǐng)求服務(wù)器,獲取Web資源,服務(wù)器把Web資源發(fā)給瀏覽器即可。好處:易于維護(hù)和升級(jí),客戶端無(wú)需任何部署可以使用新版本。

靜態(tài)資源:HTML、CSS、JavaScript、圖片等。負(fù)責(zé)頁(yè)面展示

動(dòng)態(tài)資源:Servlet、JSP等。負(fù)責(zé)邏輯處理。

數(shù)據(jù)庫(kù):負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。

Web服務(wù)器(Tomcat):負(fù)責(zé)解析HTTP協(xié)議,解析請(qǐng)求數(shù)據(jù),并發(fā)送響應(yīng)數(shù)據(jù)。

PS:自動(dòng)登錄、商品的歷史記錄是用會(huì)話技術(shù)實(shí)現(xiàn)的(Cookie、Session)。過(guò)濾器是過(guò)濾掉某些請(qǐng)求。

1.2 HTTP協(xié)議及特點(diǎn)

HTTP(Hyper Text Transfer Protocol 超文本傳輸協(xié)議):規(guī)定了瀏覽器和服務(wù)器之間數(shù)據(jù)傳輸?shù)囊?guī)則(服務(wù)器和客戶端之間進(jìn)行數(shù)據(jù)交互的格式)。

HTTP協(xié)議特點(diǎn):

1. 基于TCP協(xié)議:面向連接、安全

2. 基于請(qǐng)求-響應(yīng)模型的:一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)

3. HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議:對(duì)于事務(wù)處理沒(méi)有記憶能力。每次請(qǐng)求-響應(yīng)都是獨(dú)立的。缺點(diǎn):多次請(qǐng)求間不能共享數(shù)據(jù)。(Java中用會(huì)話技術(shù),如Cookie、Session來(lái)解決這個(gè)問(wèn)題)優(yōu)點(diǎn):速度快。

1.3 HTTP請(qǐng)求數(shù)據(jù)格式

1. 請(qǐng)求行:請(qǐng)求數(shù)據(jù)的第一行。其中GET表示請(qǐng)求方式,斜杠/表示請(qǐng)求資源路徑,HTTP/1.1表示協(xié)議版本。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

2. 請(qǐng)求頭:第二行開始,格式為key:value形式。(Host:表示請(qǐng)求的主機(jī)名。User-Agennt:瀏覽器的版本。Accept:瀏覽器能接收的資源類型,接收文本text/*,接收?qǐng)D片image/*,所有*/*。Accept-Language:表示瀏覽器偏好的語(yǔ)言。Accept-Encoding表示瀏覽器可以支持的壓縮類型。)

3. 請(qǐng)求體:POST請(qǐng)求的最后一部分,存放請(qǐng)求參數(shù)。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

1.4 GET和POST的區(qū)別

1. GET請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求行中,沒(méi)有請(qǐng)求體。POST請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求體中。

2. GET請(qǐng)求的請(qǐng)求參數(shù)大小有限制,POST沒(méi)有限制。

1.5 HTTP響應(yīng)數(shù)據(jù)格式

1. 響應(yīng)行:響應(yīng)數(shù)據(jù)的第一行。其中HTTP/1.1表示協(xié)議版本,200表示響應(yīng)狀態(tài)碼,OK表示狀態(tài)機(jī)描述。

會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記,學(xué)習(xí),筆記,http,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò),spring

2. 響應(yīng)頭:第二行開始,格式為key:value形式。(Content-Type:表示該響應(yīng)內(nèi)容的類型,比如text/html、image/jpeg。Content-Length:表示響應(yīng)內(nèi)容的長(zhǎng)度。Content-Encoding:表示該響應(yīng)壓縮算法。Cache-Control:指示客戶端應(yīng)如何緩存。)

3. 響應(yīng)體:最后一部分,存放響應(yīng)數(shù)據(jù)。

1.6 狀態(tài)碼

1xx? 響應(yīng)中? ——臨時(shí)狀態(tài)碼,表示請(qǐng)求已經(jīng)接受,告訴客戶端應(yīng)該繼續(xù)請(qǐng)求或者如果它已經(jīng)完成則忽略它。

?2xx? 成功? ——表示請(qǐng)求已經(jīng)被成功接收,處理已完成。

200? OK? 客戶端請(qǐng)求成功,即處理成功,這是我們最想看到的狀態(tài)碼

?3xx 重定向? ——(資源已經(jīng)存儲(chǔ)到了其它地方)重定向到其它地方:它讓客戶端再發(fā)起一個(gè)請(qǐng)求以完成整個(gè)處理。

302? Found? 指示所請(qǐng)求的資源已移動(dòng)到由`Location`響應(yīng)頭給定的 URL,瀏覽器會(huì)自動(dòng)重新訪問(wèn)到這個(gè)頁(yè)面(請(qǐng)求的資源移動(dòng)到了另外一個(gè)位置,通過(guò)Location給出了位置的URL)。
304? Not Modified? 沒(méi)有修改。告訴客戶端,你請(qǐng)求的資源至上次取得后,服務(wù)端并未更改,你直接用你本地緩存吧,相當(dāng)于隱式的重定向。

?4xx 客戶端錯(cuò)誤? ——【處理發(fā)生錯(cuò)誤,責(zé)任在客戶端】如:客戶端的請(qǐng)求一個(gè)不存在的資源,客戶端未被授權(quán),禁止訪問(wèn)等。

400? Bad Request? 錯(cuò)誤的請(qǐng)求??蛻舳苏?qǐng)求有 語(yǔ)法錯(cuò)誤 ,不能被服務(wù)器所理解。
403? Forbidden? 拒絕。服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù),比如:沒(méi)有權(quán)限訪問(wèn)相關(guān)資源 |
404? Not Found? 請(qǐng)求資源不存在,一般是URL輸入有誤,或者網(wǎng)站資源被刪除了
428? Precondition Required 有條件請(qǐng)求。 服務(wù)器要求有條件的請(qǐng)求,告訴客戶端要想訪問(wèn)該資源,必須攜帶特定的請(qǐng)求頭?
429? Too Many Requests? 太多請(qǐng)求,可以限制客戶端請(qǐng)求某個(gè)資源的數(shù)量,配合 Retry-After(多長(zhǎng)時(shí)間后可以請(qǐng)求)響應(yīng)頭一起使用(當(dāng)前資源有太多人訪問(wèn))。
431? ?Request Header Fields Too Large? 請(qǐng)求頭太大,服務(wù)器不愿意處理請(qǐng)求,因?yàn)樗念^部字段太大。請(qǐng)求可以在減少請(qǐng)求頭域的大小后重新提交。?
405? ?Method Not Allowed? ?請(qǐng)求方式有誤,比如應(yīng)該用GET請(qǐng)求方式的資源,用了POST?

?5xx?服務(wù)器端錯(cuò)誤? ——【處理發(fā)生錯(cuò)誤,責(zé)任在服務(wù)端】如:服務(wù)端拋出異常,路由出錯(cuò),HTTP版本不支持等 |

500 ? Internal Server Error? ?服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。服務(wù)器出異常了,趕緊看日志去吧。
503 ? Service Unavailable? 服務(wù)器尚未準(zhǔn)備好處理請(qǐng)求,服務(wù)器剛剛啟動(dòng),還未初始化好。
511? ?Network Authentication Required? 客戶端需要進(jìn)行身份驗(yàn)證才能獲得網(wǎng)絡(luò)訪問(wèn)權(quán)限。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-695422.html

到了這里,關(guān)于會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 客戶端會(huì)話跟蹤技術(shù) Cookie 淺談

    客戶端會(huì)話跟蹤技術(shù) Cookie 淺談

    用戶打開瀏覽器,第一次訪問(wèn) Web 服務(wù)器資源時(shí),會(huì)話建立,直到有一方斷開了連接則會(huì)話結(jié)束,例如瀏覽器或者服務(wù)器斷開。在一次會(huì)話中可以包含多次的請(qǐng)求和響應(yīng)。 上述的整個(gè)過(guò)程稱為會(huì)話。 例如,當(dāng)我們?cè)跒g覽器訪問(wèn)一個(gè)網(wǎng)站時(shí),瀏覽器和這個(gè)網(wǎng)站服務(wù)器就建立了一

    2024年02月03日
    瀏覽(25)
  • 如何在個(gè)人web項(xiàng)目中使用會(huì)話技術(shù)(cookie&session)?

    如何在個(gè)人web項(xiàng)目中使用會(huì)話技術(shù)(cookie&session)?

    編譯軟件:IntelliJ IDEA 2019.2.4 x64 操作系統(tǒng):win10 x64 位 家庭版 服務(wù)器軟件:apache-tomcat-8.5.27 翻開百度百科關(guān)于“ 會(huì)話 ”的詞條,它是這樣描述:“ 在計(jì)算機(jī)術(shù)語(yǔ)中,會(huì)話是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通訊的過(guò)程,比如從輸入賬戶密碼進(jìn)入操作系統(tǒng)到退出操作系統(tǒng)就是一

    2023年04月22日
    瀏覽(32)
  • Qt+QtWebApp開發(fā)筆記(四):http服務(wù)器使用Session和Cookie實(shí)現(xiàn)用戶密碼登錄和注銷功能

    Qt+QtWebApp開發(fā)筆記(四):http服務(wù)器使用Session和Cookie實(shí)現(xiàn)用戶密碼登錄和注銷功能

    ??前面實(shí)現(xiàn)了基礎(chǔ)的跳轉(zhuǎn),那么動(dòng)態(tài)交互中登錄是常用功能。 ??本篇實(shí)現(xiàn)一個(gè)動(dòng)態(tài)交互的簡(jiǎn)單登錄和注銷功能,在Qt中使用Session和Cookie技術(shù)。 ? ?? ??鏈接:https://pan.baidu.com/s/1nkmsHgr-11Khe9k6Ntyf_g?pwd=1234 ? ??Web應(yīng)用程序通常處理用戶輸入。將開發(fā)一個(gè)登錄表單,看看

    2024年02月06日
    瀏覽(29)
  • HTTP之Session、Cookie 與 Application

    HTTP之Session、Cookie 與 Application

    cookie、seesion、application三個(gè)都會(huì)緩存我們用戶狀態(tài)的數(shù)據(jù),使得我們?cè)跒g覽器訪問(wèn)網(wǎng)站時(shí)可以更快速的獲取到信息。 主要原因在于HTTP協(xié)議是無(wú)狀態(tài)的,我們每次訪問(wèn)服務(wù)器,對(duì)于服務(wù)器來(lái)說(shuō)都是一個(gè)單獨(dú)的請(qǐng)求,沒(méi)有上下文的聯(lián)系。以淘寶登錄的例子來(lái)說(shuō)明: 假如我們輸入

    2024年02月14日
    瀏覽(17)
  • 基礎(chǔ)網(wǎng)絡(luò)詳解4--HTTP Cookie&&Session 思考

    ????一臺(tái)多用戶瀏覽器發(fā)起了三筆請(qǐng)求,將某款產(chǎn)品放入購(gòu)物車中,A一次,選擇了籃球;B兩次,第一次選了足球,第二次選了鋼筆。如何確認(rèn)選擇籃球、足球、鋼筆的請(qǐng)求屬于誰(shuí)呢?如果不確認(rèn)屬于誰(shuí),請(qǐng)求將沒(méi)有意義。 ????如果每次請(qǐng)求都帶一個(gè)用戶標(biāo)識(shí),比如

    2024年02月11日
    瀏覽(23)
  • HTTP請(qǐng)求中token、cookie、session有什么區(qū)別

    HTTP請(qǐng)求中token、cookie、session有什么區(qū)別

    ?cookie HTTP 無(wú)狀態(tài)的,每次請(qǐng)求都要攜帶 cookie ,以幫助識(shí)別身份 服務(wù)端也可以向客戶端 set-cookie , cookie 大小 4kb 默認(rèn)有跨域限制:不可跨域共享,不可跨域傳遞 cookie (可通過(guò)設(shè)置 withCredential 跨域傳遞 cookie ) cookie本地存儲(chǔ) HTML5 之前 cookie 常被用于本地存儲(chǔ) HTML5 之后推薦使用

    2024年02月08日
    瀏覽(25)
  • Java基礎(chǔ)八 - HTTP相關(guān)/Cookie/Session/網(wǎng)絡(luò)攻擊

    Java基礎(chǔ)八 - HTTP相關(guān)/Cookie/Session/網(wǎng)絡(luò)攻擊

    一、 反射/序列化/拷貝 1. 反射 2. 序列化 3. 動(dòng)態(tài)代理 4. 深拷貝和淺拷貝 1. Session與Cookie 2. 如何避免sql注入 3. XSS(跨站腳本攻擊) 4.? CSRF( 跨站網(wǎng)站攻擊 )? 1. 301與302 redirect(重定向) 2.? forward 和 redirect 的區(qū)別 3. tcp和udp 4.?OSI 的七層模型 5.?HTTP常見(jiàn)狀態(tài)碼 6. HTTP HTTPS區(qū)別 7. HTTPS傳

    2024年02月11日
    瀏覽(24)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)之HTTP篇】Cookie與Session的區(qū)別

    【計(jì)算機(jī)網(wǎng)絡(luò)之HTTP篇】Cookie與Session的區(qū)別

    目錄 Cookie 原理 缺點(diǎn) Session 原理 區(qū)別 cookie是瀏覽器在本地存儲(chǔ)數(shù)據(jù)的一種機(jī)制。 ????????當(dāng)瀏覽器向服務(wù)器第一次發(fā)送請(qǐng)求時(shí),服務(wù)器會(huì)向?yàn)g覽器返回一個(gè)Cookie,此時(shí) cookie記錄著瀏覽器訪問(wèn)服務(wù)器的用戶登錄狀態(tài)。 ? ? ? ? 后續(xù)瀏覽器再次訪問(wèn)服務(wù)器時(shí),發(fā)送請(qǐng)求時(shí)也

    2024年02月08日
    瀏覽(23)
  • http 請(qǐng)求報(bào)文響應(yīng)報(bào)文的格式以及Token cookie session 區(qū)別

    HTTP 請(qǐng)求報(bào)文和響應(yīng)報(bào)文的格式如下: HTTP 請(qǐng)求報(bào)文格式: 方法 : 請(qǐng)求方法,例如 GET、POST、PUT、DELETE 等。 路徑 : 請(qǐng)求的路徑,表示需要訪問(wèn)的資源。 協(xié)議版本 : 使用的協(xié)議版本,通常是 HTTP/1.1 或 HTTP/2。 請(qǐng)求頭部字段:包含了關(guān)于請(qǐng)求的附加信息,每個(gè)字段由字段名和對(duì)

    2024年02月16日
    瀏覽(21)
  • 跨越HTTP無(wú)狀態(tài)邊界:Cookie與Session在Django中的實(shí)戰(zhàn)應(yīng)用

    本文深入探索了Django中的Cookie和Session,解析了如何應(yīng)對(duì)HTTP協(xié)議的無(wú)狀態(tài)性問(wèn)題,說(shuō)明其基礎(chǔ)概念,分析工作原理,并討論何時(shí)應(yīng)選擇使用Cookie或Session。文章進(jìn)階部分,提出高效管理Cookie和Session,以及如何利用它們進(jìn)行用戶身份驗(yàn)證。 HTTP,即超文本傳輸協(xié)議,是一種應(yīng)用層

    2024年02月13日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包