成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

誰再問Servlet的問題,我就親自上門來教學了

開發 前端
在這篇簡短的文章中,我們將從概念上理解什么是servlet 和 servlet 容器以及它們是如何工作的。同時,還能在請求、響應、會話對象、共享變量和多線程的上下文中看到它們的身影。

[[358266]]

 1. 概述

在這篇簡短的文章中,我們將從概念上理解什么是servlet 和 servlet 容器以及它們是如何工作的。同時,還能在請求、響應、會話對象、共享變量和多線程的上下文中看到它們的身影。

2. Servlets 和 它的容器

servlet 是 JEE 用于 web 開發常用的組件。它們基本上是運行在容器邊界內的Java程序。總的來說,它們負責接受請求,處理請求,并返回響應。

要使用它們,首先需要容器注冊 servlet ,無論是基于 JEE 還是基于 Spring 的容器,都可以在啟動時接收它們。在開始時,容器通過調用 init() 方法來實例化 servlet。初始化完成后,servlet 就可以接受傳入的請求。隨后,容器將這些請求定向到 servlet 的 service 方法中進行處理。之后,它根據HTTP請求類型將請求進一步委托給適當的方法,例如 doGet() 或 doPost() 。

使用 destroy(),容器會銷毀 servlet,并且不再接受傳入的請求。我們將這個 init-service-destroy 的循環稱為 servlet 的生命周期。

現在我們從容器的角度來看,比如 Apache Tomcat 或 Jetty 在啟動時,創建一個 ServletContext 的對象,ServletContext 的任務是充當服務器或容器的內存,并記住與web應用程序相關聯的所有servlet、過濾器和偵聽器,如其 web.xml文件或等效注解。在容器停止之前,ServletContext 會一直保留它。

不管怎么說,servlet的 load-on-startup 參數扮演重要的角色 。如果此參數的值大于零,則只有在啟動時服務器才會對其進行初始化。如果未指定此參數,則在請求第一次命中 servlet時調用它的 init()。

3. Request, Response 和 Session

在上一節中,我們討論了發送請求和接收響應,這基本上是任何CS應用程序的基礎。現在,我們從servlet的角度來詳細了解它們。

在這種情況下,請求將由 HttpServletRequest 表示,響應將用 HttpServletResponse 表示。

每當瀏覽器或curl命令等發送請求時,容器都會創建一個新的 HttpServletRequest 和 HttpServletResponse 對象。然后將這些新對象傳遞給 servlet 的 service方法。基于 HttpServletRequest 的 method 屬性,此方法確定應調用哪個 doXXX方法。

除了有關方法的信息外,request對象還攜帶其他信息,如頭、參數和主體。類似地,HttpServletResponse對象也攜帶頭、參數和主體——我們可以在 servlet 的 doXXX 方法中設置它們。

這些對象的生命稍縱即逝。當客戶端獲得響應時,服務器將標記用于垃圾回收的請求和響應對象。那么我們如何在隨后的客戶端請求或連接之間保持一個狀態?答案就是 HttpSession。

原理是將這些對象綁定到用戶會話,以便與特定用戶相關的信息可以跨多個請求持久化。這通常是通過使用cookies的概念,使用 [JSESSIONID] 作為給定會話的唯一標識符。我們可以在web.xml中指定會話的超時時長。

  1. <session-config> 
  2.     <session-timeout>10</session-timeout> 
  3. </session-config> 

以上配置表示,如果會話空閑了10分鐘,服務器將丟棄它。任何后續請求都將創建一個新的會話。

4. Servlets 共享數據

根據所需的范圍,servlet 可以通過多種方式共享數據。

正如在前面的章節中提到的,不同的對象有不同的生命周期。HttpServletRequest和HttpServletResponse 對象只存在于一個 servlet 調用之間。HttpSession只要它處于活動狀態并且沒有超時,它就會一直存在。

ServletContext的生命周期最長。它與Web應用程序一起誕生,只有當應用程序本身關閉時才會被銷毀。由于servlet、filter 和 listener 實例與上下文綁定,所以只要web應用程序啟動并運行,它們也會一直存在。

因此,如果我們的需求是在所有servlet之間共享數據,假設我們要計算站點的訪問者數量,那么我們應該將變量放在 ServletContext 中。如果我們需要在一個會話中共享數據,那么我們就把它保存在會話范圍內。在本例中,用戶名就是一個例子。

最后,還有與單個請求的數據相關的請求范圍,比如請求有效負載。

5. 處理多線程

多個HttpServletRequest 對象彼此共享 servlet,這樣每個請求都使用它自己的 servlet 實例線程進行操作。

就線程安全而言,這實際上表明:我們不應該將請求或會話范圍內的數據指定為 servlet的實例變量。

例如,下面的代碼片段:

  1. public class ExampleThree extends HttpServlet { 
  2.      
  3.     private String instanceMessage; 
  4.  
  5.     @Override 
  6.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  7.       throws ServletException, IOException { 
  8.         String message = request.getParameter("message"); 
  9.         instanceMessage = request.getParameter("message"); 
  10.         request.setAttribute("text", message); 
  11.         request.setAttribute("unsafeText", instanceMessage); 
  12.         request.getRequestDispatcher("/jsp/ExampleThree.jsp").forward(request, response); 
  13.     } 

在本例中,會話中的所有請求共享 instanceMessage,而 message對于給定的請求對象是唯一的。因此,在并發請求的情況下,instanceMessage 中的數據可能不一致。

6. 總結

在本教程中,我們探討了有關servlet的一些概念、它們的容器以及它們所圍繞的一些基本對象,以及 servlet 如何共享數據和多線程如何影響它們.

本文轉載自微信公眾號「鍋外的大佬」,可以通過以下二維碼關注。轉載本文請聯系鍋外的大佬公眾號。

 

責任編輯:武曉燕 來源: 鍋外的大佬
相關推薦

2021-01-27 08:37:22

IDEAProjectIntelliJ ID

2019-12-17 09:29:02

數據庫架構分庫分表

2020-10-30 09:02:15

Redis內存數據

2019-08-28 10:41:35

RustC語言編程

2009-08-05 11:30:08

2009-07-06 15:55:52

Servlet例子Ruby

2009-07-07 14:11:07

XML來配置Servl

2020-03-25 09:40:57

微軟瀏覽器Windows

2020-09-02 08:04:59

多線程互聯網高并發

2020-07-14 11:14:55

網絡安全APP技術

2009-07-06 09:49:26

Servlet JSP

2021-04-14 09:49:19

FSFRMS軟件

2021-07-07 06:54:37

網頁Selenium瀏覽器

2024-04-26 00:00:00

OpenAIGPT-5超算

2025-05-29 02:23:00

Excel報表數據

2009-07-07 13:29:33

Servlet和JSP

2009-07-03 17:18:34

Servlet多線程

2022-01-05 09:40:03

DIff算法前端

2015-05-06 10:11:48

2015-09-21 16:10:59

我來貸
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 韩日视频在线观看 | 天天干天天爽 | 日韩欧美中文在线 | 国产伦精品一区二区三区高清 | 欧美极品少妇xxxxⅹ免费视频 | 97超级碰碰 | 亚洲色欧美另类 | av在线电影网站 | 久久国产精品无码网站 | 欧美一级全黄 | 精品一区二区在线观看 | 午夜精 | 91精品一区二区三区久久久久久 | 亚洲中字在线 | 国产一区二区三区亚洲 | 欧美精品一区二区在线观看 | 免费黄色片在线观看 | 成人性生交大免费 | 成人一级毛片 | 日韩国产精品一区二区三区 | www国产精品 | 亚洲欧美精 | 日日精品 | 久久久久久亚洲国产精品 | 亚洲欧美中文日韩在线v日本 | 国产女人与拘做受视频 | 激情五月婷婷丁香 | 亚洲精品在线看 | 久久久久久久久久一区二区 | 91亚洲精品国偷拍自产在线观看 | 亚洲综合在线一区二区 | 99久久精品免费看国产小宝寻花 | 人人人干 | 欧美一区二区三区在线观看 | 色网在线观看 | 亚洲一本 | 网站黄色在线 | 91久久久久久久 | 国产精品欧美一区二区三区不卡 | 九九天堂网 | 精品国产乱码久久久久久闺蜜 |