一、 什麼是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這個方法