JavaEE基礎必會關於Tomcat和Servlet的面試題

2020-12-20 51面試官

什麼是Tomcat?

Tomcat簡單的說就是一個運行JAVA的網絡伺服器,底層是Socket的一個程序,它也是JSP和Serlvet的一個容器。

tomcat結構目錄有哪些?bin:啟動和關閉tomcat的bat文件

conf:配置文件server.xml該文件用於配置server相關的信息,比如tomcat啟動的埠號,配置主機(Host)web.xml文件配置與web應用(web應用相當於一個web站點)tomcat-user.xml配置用戶名密碼和相關權限.lib:該目錄放置運行tomcat運行需要的jar包logs:存放日誌,當我們需要查看日誌的時候,可以查詢信息webapps:放置我們的web應用work工作目錄:該目錄用於存放jsp被訪問後生成對應的server文件和.class文件

如何配置Tomcat虛擬目錄?

1. 在server.xml中的節點下添加如下代碼。path表示的是訪問時輸入的web項目名,docBase表示的是站點目錄的絕對路徑2. 進入到confCatalinalocalhost文件下,創建一個xml文件,該文件的名字就是站點的名字。

Tomcat體系結構是怎樣的?

瀏覽器 -> tomcat server-> service ->connector -> engine(引擎) -> host(主機) -> web應用

Web請求在Tomcat請求中的請求流程是怎麼樣的?

1.瀏覽器輸入URL地址2.查詢本機hosts文件尋找IP3.查詢DNS伺服器尋找IP4.向該IP發送Http請求5.Tomcat容器解析主機名6.Tomcat容器解析Web應用7.Tomcat容器解析資源名稱8.Tomcat容器獲取資源9.Tomcat響應瀏覽器

什麼是Servlet?

Servlet其實就是一個遵循Servlet開發的java類。Servlet是由伺服器調用的,運行在伺服器端。

HttpServlet類有哪些方法?

有init【初始化】,destroy【銷毀】,service【服務】,ServletConfig【Servlet配置】,getServletInfo【Servlet信息】。

Servlet生命周期?

加載Servlet : 當Tomcat第一次訪問Servlet的時候,Tomcat會負責創建Servlet的實例初始化 : 當Servlet被實例化後,Tomcat會調用init()方法初始化這個對象處理服務 : 當瀏覽器訪問Servlet的時候,Servlet 會調用service()方法處理請求銷毀 : 當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調用destroy()方法,讓該實例釋放掉所佔的資源。一個Servlet如果長時間不被使用的話,也會被Tomcat自動銷毀卸載 : 當Servlet調用完destroy()方法後,等待垃圾回收。如果有需要再次使用這個Servlet,會重新調用init()方法進行初始化操作。簡單總結:只要訪問Servlet,service()就會被調用。init()只有第一次訪問Servlet的時候才會被調用。destroy()只有在Tomcat關閉的時候才會被調用。

Servlet是單例的嗎?

瀏覽器多次對Servlet的請求,一般情況下,伺服器只創建一個Servlet對象,也就是說,Servlet對象一旦創建了,就會駐留在內存中,為後續的請求做服務,直到伺服器關閉。

Servlet是如何實現請求和響應的?

對於每次訪問請求,Servlet引擎都會創建一個新的HttpServletRequest請求對象和一個新的HttpServletResponse響應對象,然後將這兩個對象作為參數傳遞給它調用的Servlet的service()方法,service方法再根據請求方式分別調用doXXX方法。

Servlet存在線程安全的問題嗎?

當多個用戶訪問Servlet的時候,伺服器會為每個用戶創建一個線程。當多個用戶並發訪問Servlet共享資源的時候就會出現線程安全問題。如果一個變量需要多個用戶共享,則應當在訪問該變量的時候,加同步機制synchronized (對象){}如果一個變量不需要共享,則直接在 doGet() 或者 doPost()定義.這樣不會存在線程安全問題

Servlet的加載時機是在什麼時候?

在servlet的配置當中,可以使用<load-on-startup>5</load-on-startup>標籤進行配置標記容器是否在啟動的時候就加載這個servlet。當值為0或者大於0時,表示容器在應用啟動時就加載這個servlet;當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載。正數的值越小,啟動該servlet的優先級越高。

為什麼我沒有配置關於圖片的Servlet我缺可以訪問這個靜態圖片?

在web訪問任何資源都是在訪問Servlet,這是由預設Servlet為你服務的!什麼叫做預設Servlet?凡是在web.xml文件中找不到匹配的元素的URL,它們的訪問請求都將交給預設Servlet處理,也就是說,預設Servlet用於處理所有其他Servlet都不處理的訪問請求既然我說了在web訪問任何資源都是在訪問Servlet,那麼我訪問靜態資源【本地圖片,本地HTML文件】也是在訪問這個預設Servlet【DefaultServlet】總結:無論在web中訪問什麼資源【包括JSP】,都是在訪問Servlet。沒有手工配置預設Servlet的時候,你訪問靜態圖片,靜態網頁,預設Servlet會在你web站點中尋找該圖片或網頁,如果有就返回給瀏覽器,沒有就報404錯誤

ServletConfig對象有什麼用?

ServletConfig獲取的是配置的是單個Servlet的參數信息,ServletContext可以獲取的是配置整個web站點的參數信息通過此對象可以讀取web.xml中配置的初始化參數。能夠讓你的程序更加靈活【更換需求,更改配置文件web.xml即可,程序代碼不用改】

什麼是ServletContext對象?

當Tomcat啟動的時候,就會創建一個ServletContext對象。它代表著當前web站點ServletContext既然代表著當前web站點,那麼所有Servlet都共享著一個ServletContext對象,所以Servlet之間可以通過ServletContext實現通訊。ServletConfig獲取的是配置的是單個Servlet的參數信息,ServletContext可以獲取的是配置整個web站點的參數信息可以利用ServletContext讀取web站點的資源文件實現Servlet的轉發【用ServletContext轉發不多,主要用request轉發】

通過Servlet讀取一個文件有哪些方式?

文件在class路徑下(使用絕對路徑)ServletContext servletContext = this.getServletContext();InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/test/web/1.png")

文件在class路徑下(使用類加載器)ClassLoader classLoader = Servlet111.class.getClassLoader();InputStream inputStream = classLoader.getResourceAsStream("3.png");

文件在Web路徑下(相對路徑名)ServletContext servletContext = this.getServletContext();InputStream inputStream = servletContext.getResourceAsStream("2.png");

什麼是HttpServletRequest和HttpServletResponse對象?

Tomcat收到客戶端的http請求,會針對每一次請求,分別創建一個代表請求的request對象、和代表響應的response對象。HttpServletRequest和HttpServletResponse就是針對請求和響應進行封裝的對象。

HttpServletResponse向頁面輸出內容的方式有哪些?

調用getOutputStream()方法向瀏覽器輸出數據response.getOutputStream().write("aaa".getBytes());

調用getWriter()方法向瀏覽器輸出數據PrintWriter printWriter = response.getWriter(); printWriter.write("哈哈!");

解決輸出中文亂碼response.setContentType("text/html;charset=UTF-8");

Tomcat的預設埠是多少,怎麼修改

8080

找到Tomcat目錄下的conf文件夾進入conf文件夾裡面找到server.xml文件打開server.xml文件在server.xml文件裡面找到下列信息<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

Tomcat 有哪幾種Connector 運行模式(優化)?

bio(blocking I/O)nio(non-blocking I/O)apr(Apache Portable Runtime/Apache可移植運行庫)bio: 傳統的Java I/O操作,同步且阻塞IO。nio: JDK1.4開始支持,同步阻塞或同步非阻塞IOaio(nio.2): JDK7開始支持,異步非阻塞IO

Tomcat有幾種部署方式?

直接把Web項目放在webapps下,Tomcat會自動將其部署在server.xml文件上配置節點,設置相關的屬性即可通過Catalina來進行配置:進入到confCatalinalocalhost文件下,創建一個xml文件,該文件的名字就是站點的名字。編寫XML的方式來進行設置。get方式和post方式有何區別

數據攜帶上GET方式:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K。POST方式:可以在請求的實體內容中向伺服器發送數據,傳送的數據量無限制。

請求參數的位置上GET方式:請求參數放在URL地址後面,以?的方式來進行拼接POST方式:請求參數放在HTTP請求包中

用途上GET方式一般用來獲取數據POST方式一般用來提交數據

HttpServlet的 doGet與doPost方法的兩個參數是什麼

HttpServletRequest:封裝了與請求相關的信息HttpServletResponse:封裝了與響應相關的信息

Servlet獲取頁面的元素的值有幾種方式,分別說一下

request.getParameter() 返回客戶端的請求參數的值request.getParameterNames() 返回所有可用屬性名的枚舉request.getParameterValues() 返回包含參數的所有值的數組

request.getAttribute()和request.getParameter()區別

用途上request.getAttribute(), 一般用於獲取request域對象的數據(在跳轉之前把數據使用setAttribute來放到request對象上)。request.getParameter(), 一般用於獲取客戶端提交的參數。

存儲數據上request.getAttribute()可以獲取Objcet對象request.getParameter()只能獲取字符串(這也是為什麼它一般用於獲取客戶端提交的參數)

forward和redirect的區別?

發生位置不同轉發是發生在伺服器的,重定向是發生在瀏覽器的(二次請求,丟失第一次請求的數據)。

傳遞數據的類型不同轉發的request對象可以傳遞各種類型的數據,包括對象,重定向只能傳遞字符串。

跳轉的時間不同轉發時:執行到跳轉語句時就會立刻跳轉。重定向:整個頁面執行完之後才執行跳轉。

能夠去往的URL的範圍不一樣:轉發是伺服器跳轉只能去往當前web應用的資源。重定向是伺服器跳轉,可以去往任何的資源。

典型的應用場景:轉發: 訪問 Servlet 處理業務邏輯,然後 forward 到 jsp 顯示處理結果,瀏覽器裡 URL 不變重定向: 提交表單,處理成功後 redirect 到另一個 jsp,防止表單重複提交,瀏覽器裡 URL 變了

tomcat容器是如何創建servlet類實例?用到了什麼原理?

當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然後對 xml文件進行解析,並讀取servlet註冊信息。然後,將每個應用中註冊的servlet類都進行加載,並通過 反射的方式實例化。(有時候也是在第一次請求時實例化)。在servlet註冊時加上1如果為正數,則在一開始就實例化,如果不寫或為負數,則第一次請求實例化。

相關焦點

  • Tomcat面試題(2020最新版)
    tomcat容器是如何創建servlet類實例?用到了什麼原理?當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然後對 xml文件進行解析,並讀取servlet註冊信息。然後,將每個應用中註冊的servlet類都進行加載,並通過 反射的方式實例化。
  • Tomcat是如何加載Spring和SpringMVC及Servlet相關知識
    概述大家是否清楚,Tomcat是如何加載Spring和SpringMVC,今天我們就弄清下這個過程(記錄最關鍵的東西)其中會涉及到大大小小的知識,包括加載時候的設計模式,Servlet知識等,看了你肯定有所收穫~Tomcat
  • 十六個Tomcat常見面試題 你都知道答案嗎?
    1)解釋什麼是Jasper?= 「AJP/1.3」 tomcatAuthentication = 「false」 />  4)請解釋一下什麼時候可以使用「.」  在Tomcat中,使用了兩種類型的連接器:  HTTP連接器:它有許多可以更改的屬性,以確定它的工作方式和訪問功能,如重定向和代理轉發  AJP連接器:它以與HTTP連接器相同的方式工作,但是他們使用的是HTTP的AJP協議。
  • smart-servlet v0.1.0 首發,籌備了 3 年的開源 Servlet 伺服器
    1個月前,開源 smart-servlet。在 smart-http 的基礎上實現 servlet 3.1 規範。項目特色 零學習成本,素未謀面,卻已相知。保留用戶原有的 Tomcat、Undertow 使用習慣。
  • Servlet3 異步原理與實踐
    規範中描述了Java Servlet API 的標準,定義了 Java Servlet API 中類、接口、方法籤名的完整規範且附帶的 Javadoc 文檔供開發人員查閱,目的主要是為 Java Servlet 給出一個完整和清晰的解釋。從下圖可以看出 Servlet 規範版本和 tomcat 支持的版本的對應關係。
  • 拿下BAT的offer,這篇匯總的Servlet常見面試題正適合你
    這篇文章主要是對servlet的運行過程進行一個分析。涉及了一些基本的用法和常見的面試題。一、什麼是servlet我們使用電腦在天貓商城買東西的時候,商品往往都有相應的圖片,當我們點擊不同的商品就會顯示不同的圖片。這個過程其實是請求伺服器資源的過程。
  • 從 0 開始手寫一個Tomcat,7 步搞定!
    那麼想一想,Tomcat 和我們的 Web 應用是什麼關係?從感性上來說,我們一般需要把 Web 應用打成 WAR 包部署到 Tomcat 中,在我們的 Web 應用中,我們要指明 URL 被哪個類的哪個方法所處理「不論是原始的 Servlet 開發,還是現在流行的 Spring MVC 都必須指明」。
  • servlet生命周期
    ,init()方法只會調用一次Servlet容器會在一下幾種情況裝載Servlet:Servlet容器啟動時自動裝載某些servlet,實現這個需要在web.xml文件中添加<loadstartup>1</load-on-startup>
  • 吊打Tomcat,Undertow 性能很炸!
    這就讓我們可以靈活的在 Java EE servlet 4.0 容器和底層非阻塞處理器或者其他更多之間進行選擇。Undertow 被設計成完全可嵌入式的,所以也叫嵌入式容器,具有易於使用的流暢構建 API,另外,Undertow 的生命周期也完全由所嵌入的應用程式所控制。
  • Servlet知識點總結
    API1:javax.servlet.Servlet【接口】(1)該接口中定義了所有servlet都必須實現的方法。(4)為了實現該接口,可以繼承javax.servlet.GenericServlet也可以繼承javax.servlet.http.HttpServlet.
  • Tomcat相關面試題,看這篇就夠了!
    Tomcat相關的面試題出場的機率並不高,正式因為如此,很多人忽略了對Tomcat相關技能的掌握,下面這一篇文章整理了
  • Eclipse如何配置Tomcat並發布程序
    創建完web項目後,若不配置tomcat等中間件,則會報「javax.servlet.http.HtttpServlet」was not found on the Java Build Path的錯誤。點擊「Window」->"Preferences",打開如下窗口:點擊「Add」按鈕,選中「Apache Tomcat v8.0」。
  • javaee是不是2018IT行業最熱門的崗位?零基礎學javaee需要多久?
    參加javaee培訓的話零基礎學會javaee需要多久?        javaee是不是2018IT行業最熱門的崗位?目前IT行業也有各種各樣的崗位需求,有的IT崗位已經飽和了,還有的IT崗位卻需求旺盛,自然是得選擇需求旺盛的IT崗位才好就業。
  • 後續之《SpringBoot伺服器壓測對比jetty、tomcat、undertow》
    一、前言昨天發了一個《SpringBoot伺服器壓測對比(jetty、tomcat、undertow)》,本是工作的一個筆記,沒想到被紅薯翻牌了(榮幸之至)。看了OSCer的回覆,感覺需要重新梳理下,因為確實存在描述不清和不合理的配置。
  • 面試題之java基礎
    應部分網友的建議,從今天起會逐步的總結一些java、php相關的面試題,由簡單到複雜歸納一個系列:【金三銀四】,中間部分題目的答案來源於網絡,如若不嚴謹還望諒解。java基礎面試題 1、簡述Java程序編譯和運行的過程:答:①  Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之後,程序會先被編譯成 「.class」 文件。
  • 那我手寫來解釋下吧——>面試官
    -- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId>
  • Tomcat 調優的技巧 | 必學必知
    轉載:www.cnblogs.com/wangsen最近,看到一篇講述 Tomcat 調優的文章,寫得挺不錯的,由於之前寫了好幾篇關於
  • 詳解 Tomcat 的連接數與線程池
    二、3個參數:acceptCount、maxConnections、maxThreads前言在使用tomcat時,經常會遇到連接數、線程數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的連接器(Connector)。
  • Servlet聲明和mapping替換你的Web
    Servlet聲明和mapping替換你的Web 本文介紹Servlet聲明和mapping替換你的Web,以及在apach5.x中改變servlet的上下文。