日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

淺析Servlet三大容器的常用方法及其作用域

作者:Ran959 更新時間: 2022-09-05 編程語言

在JavaWeb中,Servlet中三大作用域對象分別是request,session,application,其主要目的是用來共享數據的。

三大作用域的使用,其本質是根據作用域的范圍,生命周期決定其使用的方式.:

對象名稱 對象的類型
request HttpServletRequest
session HttpSession
application ServletContext

作用域對象如何共享數據:

        1.設置作用域中的共享數據。

        作用域對象名.setAttribute(String name,Object value);

        2.獲取作用域中的共享數據。

       Object value=作用域對象名.getAttribute(String name);

       3.獲取作用域中的共享數據。

        作用域對象.removeAttribute(String name);

注意:在哪一個作用域中設置共享數據,就只能從該作用域中取出數據。

三大作用域:

request:每一次請求都是一個新的request對象,如果在Web組件之間需要共享同一個請求中的數據,只能使用請求轉發。
session:每一次會話都是一個新的session對象,如果需要在一次會話中的多個請求之間需要共享數據,只能使用session。
application:應用對象,Tomcat 啟動到關閉,表示一個應用,在一個應用中有且只有一個applic-ation對象,作用于整個Web應用,可以實現多次會話之間的數據共享。
 

代碼演示:

我們新建兩個類:ScopeServlet  ResultServlet

package com.ape.view;

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

/**
 * Servlet implementation class ScopeServlet
 */
@WebServlet("/scope.do")
public class ScopeServlet extends HttpServlet {
	@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //1.request
        Integer numInRequest=(Integer)req.getAttribute("NUM_IN_REQUEST") ;
        if (numInRequest == null) {
            req.setAttribute("NUM_IN_REQUEST",1);
        }
        else {
            req.setAttribute("NUM_IN_REQUEST",numInRequest+1);
        }
        //2.Session
        Integer numInSession=(Integer)req.getSession().getAttribute("NUM_IN_SESSION") ;
        if (numInSession == null) {
            req.getSession().setAttribute("NUM_IN_SESSION",1);
        }
        else {
            req.getSession().setAttribute("NUM_IN_SESSION",numInSession+1);
        }
        //3.application

        Integer numInApplication=(Integer) req.getServletContext().getAttribute("NUM_IN_APPLICATION");
        if (numInApplication == null) {
            req.getServletContext().setAttribute("NUM_IN_APPLICATION",1);
        }
        else {
            req.getServletContext().setAttribute("NUM_IN_APPLICATION",numInApplication+1);
        }

        req.getRequestDispatcher("/result").forward(req,resp);

    }

}
package com.ape.view;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ResultServlet
 */
@WebServlet("/result.do")
public class ResultServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out=resp.getWriter();

        Integer numInRequest=(Integer) req.getAttribute("NUM_IN_REQUEST");
        Integer numInSession=(Integer) req.getSession().getAttribute("NUM_IN_SESSION");
        Integer numInApplication=(Integer) req.getServletContext().getAttribute("NUM_IN_APPLICATION");

        out.println("Request="+numInRequest);
        out.println("Session="+numInSession);
        out.println("Application="+numInApplication);
    }

}

然后我們運行一下

第一次訪問 三個作用域都是1

刷新了5次 會看到 request一次 session與Application都是6次

 

接下來我們換一個瀏覽器 會發現 session 是1了 而 Appplication又增加了一次

 

 又刷新了幾次,發現session從0開始重新計數

 返回我們的第一個Google瀏覽器 Google里面的session自己又加1了

 因此 我們會發現 

Request是一次請求

Session是一個會話

Application是多次會話(Tomcat開啟到關閉)

常用方法:

1. Request:

request.setAttribute(); //向request域里設置數據
request.getAttribute(); //向request域里取出數據
request.removeAttribute(); //向request域里移除數據
request.getParameter(). //從request域里獲取傳遞的數據

2.Session:

session.setAttribute(); //向session域里存放共享數據
session.getAttribute(); //從session域里取出共享數據
session.removeAttribute();//從session域里移除共享數據

3. Application(ServletContext):

1. 設置作用域中的共享數據
   作用域對象.setAttribute(String name,Object value);
2. 獲取作用域中的共享數據
   Object value = 作用域對象.getAttribute(String name);
3. 移除作用域中的指定的共享數據
   作用域對象.removeAttribute(String name);

完事。


原文鏈接:https://blog.csdn.net/weixin_67588007/article/details/125546600

欄目分類
最近更新