Servlet+JSP及Tomcat常見面試題(面試必備)


1、  什么是servlet?
servlet是用來處理客戶端請求並產生動態網頁內容的java類

2、  Tomcat的缺省端口是多少,怎么修改?

a)      默認端口號是8080

b)      修改步驟:

                 i.          打開tomcat的安裝目錄,找到conf文件

                ii.          找到其中的server.xml,打開后找到其中的

<connector connectionTimeout=”20000” port=”8080”

改變其中的8080就可以了

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

a)      BIO

                 i.          一個線程處理一個請求,缺點:並發量高的時候,線程數較多,浪費資源

Tomcat7或以下,在Linux系統中默認使用這種方式

b)      NIO

                 i.          利用java的異步IO處理,可以通過少量的線程處理大量的請求
Tomcat8在Linux系統中默認使用這種方式。
Tomcat7必須修改Connector配置來啟動
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

         connectionTimeout="20000" redirectPort="8443"/>

c)      APR

                 i.          即Apache Portable Runtime,從操作系統層面解決IO阻塞問題
Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式
Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。

4、  Tomcat有幾種部署方式?

a)      第一種:直接將web項目文件拷貝到webapps目錄中

b)      第二種:修改sercer.xml文件。在conf下的server.xml文件里找到Host標簽,在里面添加如下代碼:
<Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true"></Context>

c)      第三種:在conf\Catalina\localhost目錄下添加xml配置文件
新建名為jfinal_demo.xml文件,文件內容配置如下:
<Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true"></Context>

5、  Servlet生命周期

a)      加載Servlet
web容器負責加載servlet,當web容器啟動時或者是在第一次使用這個servlet時,容器會負責創建servlet實例

b)       初始化
當一個servlet加載后,容器將調用init()方法初始化這個對象,初始化的目的是為了讓servlet在處理客戶端請求前完成一些初始化的工作

c)      請求處理
當有請求提交時,servlet將調用service()方法進行處理客戶端請求,並且會根據不同的請求調用不同的doGet()或doPost()方法

d)      銷毀
當web容器關閉或檢測到一個servlet實例要從服務器中被移除時,容器就會調用destroy()方法,以便讓該實例釋放掉所占用的資源

6、  Get()與post()的區別?

a)      Get是向服務器發送、索取數據的一種請求,而post是向服務器提交數據的一種請求

b)      Get方式傳遞數據安全性較低,post方式比較安全。但是post方式的執行效率比get方式要差一些

c)      Get請求方式將請求信息放在URL后面,請求信息和URL之間以“?”隔開,這種請求方式直接將請求信息暴露在URL中;
post請求方式將請求信息放置在報文體中,想獲得請求信息必須解析報文

7、  doGet與doPost方法的兩個參數是什么?什么情況下調用

a)      HttpServletRequest和HttpServletResponse

b)      JSP頁面中的form標簽里的method屬性為get時調用doGet()為post時調用doPost();超鏈接跳轉頁面時調動的是doGet()

8、  獲取頁面的元素的值有幾種方式?分別說一下

a)      用<input>輸入域提交參數

b)      request.setAttribute();在下個頁面直接request.getAttriute()得到

c)      <jsp:forward=”你要跳轉的頁面”>
<jsp:param>你要傳遞的參數

d)      用session域對象

e)      url?a=””&b=””

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

a)      都是HttpServletRequest中的方法,用來傳遞數據的

b)      getParameter():響應的是web客戶端向web服務端通過點擊鏈接或提交按鈕傳遞數據,代表HTTP請求數據;獲取的是post/get傳遞的參數值
    getAttribute():是獲取對象容器中的數據,獲取的是session的值

c)      getParameter():只能得到String類型數據
    getAttribute():可以接受String類型,也可以是對象

10、         forward(轉發)和redirect(重定向)的區別

a)      forward:requset.getRequsetDispatcher(“/***.jsp”).forward(request,response)
    redirect:response.sendRedirect(“/***.jsp”)

b)      forward是服務器端發起的請求;redirect是客戶端發起的請求;

c)      forward只有一次請求;redirect會產生2次請求。

d)      forward數據會同時轉發過去;redirect數據不會同時傳遞過去。

11、         什么是cookie?什么是session?session和cookie的區別

a)      Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,它的過期時間可以任意設置,如果不主動清除,很長一段時間都能保留

b)      Session是在無狀態的HTTP協議下,服務端記錄用戶狀態時用於標識具體用戶的機制,它是在服務端保存的用來跟蹤用戶的狀態的數據結構,可以保存在文件、數據庫、或者集群中。

c)      他們都是一種會話技術,區別如下

                 i.          Session:
        數據存放在服務端,安全(只存放和狀態相關的)
        session不僅僅是存放字符串,還可以存放對象
        session是域對象(session本身是不能跨域的,但可以通過相應技術來解決)
        sessionID的傳輸默認是需要cookie支持的

                ii.          Cookie
        數據存放在客戶端,不安全(存放的數據一定是和安全無關緊要的數據)
        cookie只能存放字符串,不能存放對象
        cookie不是域對象(Cookie是支持跨域的)

12、         Tomcat是如何創建servlet類實例?用到了什么原理

a)      當tomcat啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件。然后對xml文件進行解析,並讀取servlet注冊信息。然后將每個應用中注冊的servlet類都進行加載,並通過反射的方式實例化

13、         Servlet安全性問題

a)      因為servlet是單列模式創建的,只實例化一次,同一個servlet可以處理多個用戶請求,當同時有兩個用戶訪問時,則會啟動兩個負責處理請求的servlet線程,所以會出現線程安全問題

b)      解決方案:

                 i.          在servlet中定義變量時,盡量都定義局部變量。在servlet中負責保存上下文ServletContext和負責處理session對象的HttpSession是線程不安全的,而負責處理請求的servletRequest是線程安全的

                ii.          加鎖:用synchronized進行保護,但是要盡量的縮小保護范圍

14、         JSP與servlet的區別

a)      JSP本質上就是一個簡易的servlet,Web容器將JSP代碼編譯成JVM能識別的java類

b)      Jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制

15、         JSP的內置對象有哪些,作用是什么

a)      Request :本質上就是HttpServletRequest,包含用戶端請求的信息,就是請求對象

b)      Response :本質上就是HttpServletResponse,包含服務器傳回客戶端的響應信息,就是響應對象

c)      Session : 是HttpSession,是一個會話對象,主要用於保存狀態

d)      Application : 是servletContext,指的的整個web應用

e)      Page : 指整個jsp頁面,類似this偽對象

f)       PageContext : 主要用於管理整個jsp頁面

g)      Exception : 異常對象,jsp頁面上的異常都會封裝在這里面

h)      Config : 本質上就是servletConfig對象

i)       Out :主要用於輸出數據

16、         JavaWeb中四大域對象及作用范圍

a)      PageContext : 作用范圍在整個頁面(一個頁面)

b)      HttpRequest : 作用范圍在一次請求

c)      HttpSession : 這是JavaWeb的一種會話機制,作用在整個會話中

d)      ServletContext :作用范圍在整個web應用

17、 JSP和HTML之間的關系

a)      JSP是簡單的servlet,是在服務端執行的,通常返回客戶端的是一個HTML文本

18、 JSP靜態包含和動態包含的區別

a)      靜態包含:<%@ include file=”被包含的頁面” %>
    動態包含:<jsp:include page=”被包含的頁面” flush=“true” >

b)      靜態包含在翻譯的時候,將多個JSP翻譯成一個servlet
    動態包含在翻譯的時候,將多個JSP翻譯成多個servlet,在程序運行加載到JVM中的時候,動態合並,動態包含可以傳遞數據

c)      靜態包含,編輯器引入,先包含在運行
    動態包含,運行期引入,先運行,把結果引入

19、 JSP是如何被執行的?執行效率會比servlet低嘛?

a)      JSP本質上是一個簡單的servlet,在執行JSP的時候,會被轉譯成一個*_jsp.java的java文件,然后再跟尋常的java文件一樣被解析成一個class文件,最后被jre執行

b)      與servlet相比,第一次執行效率比較低,因為第一次會被轉化為servlet,之后執行效率都相同

20、 JSP和servlet的區別、共同點、各自應用的范圍?

a)      JSP在本質上就是servlet,但兩者的創建方式不一樣,servlet完全是java程序代碼構成擅長於流程控制和事務處理而通過的servlet類生成動態網頁;JSP由HTML代碼和JSP標簽構成,可以方便的編寫動態網頁

b)      采用Servlet來控制業務流程;用JSP來生成動態網頁

21、 如何避免JSP頁面自動生成Session對象?為什么要這么做?

a)      <%@ page session=”false”>

b)      在默認情況下,在對一個JSP頁面發出請求時,如果session還沒建立,JSP頁面會自動為請求建立一個Session對象,但是session是比較消耗資源的,如果沒有必要保持和使用session,就不應該創建session

22、 自定義標簽要繼承哪個類

a)      可以繼承TagSupport或者BodyTagSuppot,兩者的差別是前者適用於沒有主題的標簽,而后者適用於有主題的標簽

b)      若選擇TagSupport,可以實現doStartTag和doEndTag這兩個方法實現Tag的功能;如果選擇繼承BodyTagSupport,可以實現doAfterBody這個方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM