日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Servlet面试题

發布時間:2023/12/20 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Servlet面試題

    • servlet的生命周期
    • servlet的線程安全問題
      • 如何解決?
    • get 與 post 區別

servlet的生命周期

  • servlet初始化—init()方法
    ①第一次創建Servlet時調用,只會執行一次初始化
    ②默認是第一次處理請求時創建Servlet,也可以設置為服務器第一次啟動時就創建Servlet

    public void init() throws ServletException {// 初始化代碼... }
  • servlet處理請求:service()方法
    ①處理來自瀏覽器的請求,將處理后的結果響應給瀏覽器
    ②servlet接收到請求后,調用service方法來進行處理,service中針對不同的請求進行匹配,選擇調用doPost或doGet等方法
    ③在編寫servlet時,需要實現doPost/doGet等方法

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getMethod();long lastModified;if (method.equals("GET")) {//處理get請求}} else if (method.equals("HEAD")) {} else if (method.equals("POST")) {this.doPost(req, resp);} else if (method.equals("PUT")) {this.doPut(req, resp);} else if (method.equals("DELETE")) {this.doDelete(req, resp);} else if (method.equals("OPTIONS")) {this.doOptions(req, resp);} else if (method.equals("TRACE")) {this.doTrace(req, resp);} else {//其他} }
  • servlet長時間沒有被調用或服務器關閉,會調用destroy()方法銷毀servlet,由JVM垃圾回收器來回收servlet
    destroy方法只會執行一次
    執行后,該servlet被標記為垃圾,等待回收

  • servlet的線程安全問題

    servlet不是線程安全的

    servlet是單例的,初始化后,只有長時間不再接受請求或容器關閉時,這個servlet才會銷毀,多個請求線程都訪問的是這一個servlet

    一個servlet在處理第一次請求前進行實例化,初始化。或在容器啟動時初始化(需要設置)
    后續調用這個servlet的請求,都是獨立的線程來調用service方法,存在線程安全問題

    如何解決?

  • 不在servlet中使用成員變量,線程之間沒有資源競爭,線程安全

  • 使用ThreadLocal為每個線程提供一份獨立的變量

  • 給處理請求的方法加鎖;造成阻塞

    protected synchronized void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
  • 實現SingleThreadModel接口;會為每個用戶創建一個servlet實例,性能差(已棄用)

    public class DormServlet extends HttpServlet implements SingleThreadModel
  • get 與 post 區別

    HTTP請求默認使用get

    getpost
    參數在url中參數在 resquest body 請求體中
    有長度限制沒有長度限制
    暴露在url中,不安全隱藏在請求體中,安全
    只能url編碼支持多種編碼
    產生一個TCP數據包產生兩個TCP數據包
    獲取服務器中的數據修改服務器上的數據

    總結

    以上是生活随笔為你收集整理的Servlet面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。