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

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

二、  Tomcat的缺省端口是多少,怎麼修改?web

a)      默認端口號是8080數據庫

b)      修改步驟:apache

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

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

<connector connectionTimeout=」20000」 port=」8080」 安全

改變其中的8080就能夠了服務器

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

a)      BIOsession

                 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。

四、  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>

五、  Servlet生命週期

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

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

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

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

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

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

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

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

七、  doGet與doPost方法的兩個參數是什麼?什麼狀況下調用

a)      HttpServletRequest和HttpServletResponse

b)      JSP頁面中的form標籤裏的method屬性爲get時調用doGet()爲post時調用doPost();超連接跳轉頁面時調動的是doGet()

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

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

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

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

d)      用session域對象

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

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

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

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

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

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

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

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

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

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

十一、         什麼是cookie?什麼是session?session和cookie的區別

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

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

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

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

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

十二、         Tomcat是如何建立servlet類實例?用到了什麼原理

a)      當tomcat啓動時,會讀取在webapps目錄下全部的web應用中的web.xml文件。而後對xml文件進行解析,並讀取servlet註冊信息。而後將每一個應用中註冊的servlet類都進行加載,並經過反射的方式實例化

1三、         Servlet安全性問題

a)      由於servlet是單列模式建立的,只實例化一次,同一個servlet能夠處理多個用戶請求,當同時有兩個用戶訪問時,則會啓動兩個負責處理請求的servlet線程,因此會出現線程安全問題

b)      解決方案:

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

                ii.          加鎖:用synchronized進行保護,可是要儘可能的縮小保護範圍

1四、         JSP與servlet的區別

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

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

1五、         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 :主要用於輸出數據

1六、         JavaWeb中四大域對象及做用範圍

a)      PageContext : 做用範圍在整個頁面(一個頁面)

b)      HttpRequest : 做用範圍在一次請求

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

d)      ServletContext :做用範圍在整個web應用

1七、 JSP和HTML之間的關係

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

1八、 JSP靜態包含和動態包含的區別

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

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

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

1九、 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來生成動態網頁

2一、 如何避免JSP頁面自動生成Session對象?爲何要這麼作?

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

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

2二、 自定義標籤要繼承哪一個類

a)      能夠繼承TagSupport或者BodyTagSuppot,二者的差異是前者適用於沒有主題的標籤,然後者適用於有主題的標籤

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

相關文章
相關標籤/搜索