小編給大家分享一下Java中Servlet常見面試題有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)呼中,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):189808205751:什么是B/S和C/S
Browser/Server瀏覽器/服務(wù)器(瘦客戶端)
Custom/Server 客戶端/服務(wù)器(胖客戶端)
2:描述war包、jar包、ear包的結(jié)構(gòu)
war-
--myweb
---WEB-INF
----web.xml
----lib
----classes
jar-
--myjar
---META-INF
----.MF
ear-
--META-INF
---Application.xml
--.war
--.jar
3:什么是servlet?servlet主要做什么?
網(wǎng)絡(luò)服務(wù)的請(qǐng)求和響應(yīng)方式
通過WEB瀏覽器調(diào)用servlet的方法,主要是在服務(wù)端寫動(dòng)態(tài)代碼與服務(wù)器端交流;
4:servlet 與cgi相比的優(yōu)點(diǎn)?servlet的缺點(diǎn)
優(yōu)點(diǎn):
性能(線程比進(jìn)程更快)
可伸縮
Java強(qiáng)健且面向?qū)ο?/p>
Java獨(dú)立的平臺(tái)
缺點(diǎn):
處理代碼(業(yè)務(wù)邏輯)與HTML(表現(xiàn)邏輯)混合在一起
5:常用的servlet包的名稱是?
javax.servlet
javax.servlet.http
6:描述servlet接口的層次結(jié)構(gòu)?
Servlet
--genericServlet
--HttpServlet
--自己的servlet
ServletRequest
ServletResponse
7:對(duì)比get方法和post方法?
get方法: 請(qǐng)求對(duì)服務(wù)器沒有負(fù)面影響,F(xiàn)orm數(shù)據(jù)量小,數(shù)據(jù)的內(nèi)部應(yīng)在url中可見; 明文傳輸,安全度低。
post方法:請(qǐng)求的數(shù)據(jù)過程改變服務(wù)器的狀態(tài),F(xiàn)orm數(shù)據(jù)量大,數(shù)據(jù)的內(nèi)部應(yīng)在url中不可見,安全度高;
8:歸類描述HttpServletRequest接口都完成那些功能
1.讀取和寫入HTTP頭標(biāo)
2.取得和設(shè)置cookies
3.取得路徑信息
4.標(biāo)識(shí)HTTP會(huì)話。
9:歸類描述HttpServletResponse接口都完成那些功能
HttpServletResponse加入表示狀態(tài)碼、狀態(tài)信息和響應(yīng)頭標(biāo)的方法,它還負(fù)責(zé)對(duì)URL中寫入一Web頁面的HTTP會(huì)話ID進(jìn)行解碼。
10:描述Service方法所完成的基本功能?默認(rèn)是在那里實(shí)現(xiàn)的?
service方法是在servlet生命周期中的服務(wù)期,根據(jù)HTTP請(qǐng)求方法(GET、POST等),將請(qǐng)求分發(fā)到doGet、doPost等方法
HttpServlet類實(shí)現(xiàn)
11:如何開發(fā)自己的Servlet?描述應(yīng)該做的步驟和每步需要完成的工作
1.引jar包
1)構(gòu)建開發(fā)環(huán)境 common包-->lib包-->servlet--->api.jar
2.開發(fā)servlet類
1)首先繼承HttpServlet
2)實(shí)現(xiàn) doGet() doPost()
3)定義 doGet() doPost()
3.建個(gè)web應(yīng)用
4.部署
安裝web容器,例如Tomcat
在Tomcat的webapps目錄下新建一個(gè)文件夾作為web程序的根
在根下新建一個(gè)名為WEB-INF的文件夾,里面建立一個(gè)web.xml的文件、一個(gè)classes的文件夾、一個(gè)lib文件夾按照servlet的DTD配置web.xml文件。
把編譯好的servlet的class文件復(fù)制到classes目錄下lib文件存放程序所需要的jar包
12:為何servlet需要部署描述?
servlet需要配置web.xml文件來使容器認(rèn)識(shí)servlet程序
13:Servlet基本的描述應(yīng)該是?請(qǐng)寫出來
Hello sl314.web.FormBasedHello Hello /greeting
14:如何在html中使用servlet
FORM標(biāo)記
ACTION– 指定form信息的目的地(相關(guān)的URL)
METHOD – 指定HTTP方法(GET或POST)
語法:
15:如何接受request中的參數(shù)
String userName = (String)request.getParameter("userName")方法
16:如何接受request中header的值
request.getHeader(name);
request.getHeaders(names);等
17:如何輸出html
PrintWriter pw = response.getWriter();
pw.write("");
pw.write("Hello");
pw.write("");
18:如何設(shè)置輸出的contentType
response.getContentType()
19:描述servlet的生命周期?
生命周期是指servlet實(shí)例在web容器中從:首次創(chuàng)建調(diào)用init方法開始初始化期,經(jīng)過service方法運(yùn)行期,一直到destory方法銷毀期 結(jié)束
servlet實(shí)例的生命周期由web容器來管理
20:描述init,service,destroy方法的功能和特點(diǎn)
init方法: 是在servlet實(shí)例創(chuàng)建時(shí)調(diào)用的方法,用于創(chuàng)建或打開任何與servlet相關(guān)資源和初始化servlet的狀態(tài)Servlet規(guī)范保證調(diào)用init方法前不會(huì)處理任何請(qǐng)求。
service方法:是servlet真正處理客戶端傳過來的請(qǐng)求的方法,由web容器調(diào)用,根據(jù)HTTP請(qǐng)求方法(GET、POST等),將請(qǐng)求分發(fā)到doGet、doPost等方法
destory方法:是在servlet實(shí)例被銷毀時(shí)有web容器調(diào)用。Servlet規(guī)范確保在destroy方法調(diào)用之前所有請(qǐng)求的處理均完成需要覆蓋destroy方法的情況:釋放任何在init方法中打開的與servlet相關(guān)的資源存儲(chǔ)servlet的狀態(tài)
21:什么是回調(diào)方法?有什么特點(diǎn)?
由容器來調(diào)用程序的方法
由容器來決定什么時(shí)候來調(diào)
22:如何設(shè)置初始化servlet的參數(shù)?
greetingText Hello
23:如何獲取servlet初始化的參數(shù)
public void init() { greetingText = getInitParameter("greetingText"); System.out.println(">> greetingText = '" + greetingText + "'"); }
24:ServletConfig接口默認(rèn)在那里實(shí)現(xiàn)的
GenericServlet類實(shí)現(xiàn)ServletConfig接口
25:什么是ServletContext?有什么作用?
Servlet上下文
ServletContext對(duì)象是Web應(yīng)用的運(yùn)行時(shí)表示,可通過其實(shí)現(xiàn)Web應(yīng)用中的資源共享
26:如何訪問ServletContext接口?是在那里實(shí)現(xiàn)的?
Servlet通過getServletContext()方法訪問
GenericServlet類實(shí)現(xiàn)
27:ServletContext接口的功能包括?分別用代碼示例
只讀初始化參數(shù): getInitParameter(name:String) : String
getInitParameterNames() : Enumeration
讀寫訪問應(yīng)用級(jí)屬性:getAttribute(name:String) : Object
setAttribute(name:String, value:Object)
getAttributeNames() : Enumeration
只讀訪問文件資源: getResource(path) : URL
getResourceAsStream(path) : InputStream
寫web應(yīng)用日志文件:log(message:String)
log(message:String, Throwable:excp)
28:如何設(shè)置Context的參數(shù)?
catalogFileName /WEB-INF/catalog.txt
29:如何獲取Context設(shè)置的參數(shù)值?
ServletContext context = sce.getServletContext(); String catalogFileName = context.getInitParameter(“catalogFileName”);
30:描述Web應(yīng)用的生命周期?
Web容器啟動(dòng)時(shí),初始化每個(gè)Web應(yīng)用
可以創(chuàng)建"監(jiān)聽器"對(duì)象觸發(fā)這些事件;
Web容器關(guān)閉時(shí),銷毀每個(gè)Web應(yīng)用
31:如何用代碼實(shí)現(xiàn)監(jiān)控Web應(yīng)用的生命周期?
public class Test implements ServletContextListener{ public void contextInitialized(ServletContextEvent sce) { // } }com.csy.Test
32:web應(yīng)用中如下錯(cuò)誤碼示什么意思:400,401,404,500
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
33:描述Web應(yīng)用中用聲明方式來進(jìn)行錯(cuò)誤處理的兩種方法
使用error-page元素聲明一個(gè)給定HTTP狀態(tài)碼的處理器
可以聲明任意數(shù)量的錯(cuò)誤頁面,但一個(gè)給定的狀態(tài)碼只能對(duì)應(yīng)一個(gè)頁面
使用exception-type元素聲明給定Java異常的處理器
java.lang.ArithmeticException
可以聲明任意數(shù)量的錯(cuò)誤頁面,但一個(gè)給定的異常類型只對(duì)應(yīng)一個(gè)頁面
不能使用父類捕獲多種異常
34:描述記錄異常日志的方法,都位于那些接口?
GenericServlet:
log(message:String)
log(message:String, Throwable:excp)
ServletContext:
log(message:String)
log(message:String, excp:Throwable)
35:什么是會(huì)話?
Web容器可為每個(gè)用戶保存一個(gè)"會(huì)話對(duì)象",用來存儲(chǔ)特定用戶的會(huì)話信息
36:如何獲得會(huì)話?
HttpSession session = request.getSesseion();
37:會(huì)話Api的基本功能?
getID() :String
isNew() :boolean
getAttribute(name):Object
setAttribute(name,value)
removeAttribute(name)
38:如何銷毀會(huì)話?
1、可使用部署描述符控制所有會(huì)話的生命周期
2、可使用控制特定會(huì)話對(duì)象的生命周期HttpSession接口
invalidate()
getCreationTime() :long
getLastAccessedTime() :long
getMaxInactiveInterval() :int
setMaxInactiveInterval(int)
39:描述會(huì)話保持狀態(tài)的基本原理
當(dāng)客戶端第一次請(qǐng)求時(shí),服務(wù)器創(chuàng)建一個(gè)session與request綁定,用響應(yīng)對(duì)象response來返回sessionid 放到客戶端的cookies中存儲(chǔ)下來,下次在發(fā)送請(qǐng)求時(shí),直接根據(jù)sessionid來檢索服務(wù)器的會(huì)話(每次請(qǐng)求都會(huì)將所有的cookies帶到服務(wù)器端)
40:如何讀寫cookie,代碼示例
寫:String name = request.getParameter("firstName"); Cookie c = new Cookie("yourname", name); response.addCookie(c); 讀:Cookie[] allCookies = request.getCookies(); for ( int i=0; i < allCookies.length; i++ ) { if ( allCookies[i].getName().equals(“yourname”) ) { name = allCookies[i].getValue(); } }
41:什么是URL重寫,如何實(shí)現(xiàn),代碼示例
Cookie不能使用時(shí),可使用URL重寫 request.encodeURL();
客戶在每個(gè)URL的后面追加額外的數(shù)據(jù)
服務(wù)器將此標(biāo)識(shí)符與其存儲(chǔ)的有關(guān)會(huì)話數(shù)據(jù)相關(guān)聯(lián)
http://host/path/file;jsessionid=123
41:描述web應(yīng)用的4種認(rèn)證技術(shù)
BASIC – Web瀏覽器接收用戶名和口令,將其以明碼方式發(fā)送給Web服務(wù)器
DIGEST – Web瀏覽器接收用戶名和口令,使用加密算法將此數(shù)據(jù)發(fā)送給Web服務(wù)器
FORM – Web應(yīng)用提供發(fā)送給Web瀏覽器的HTML form
CLIENT-CERT – Web容器使用SSL驗(yàn)證用戶,服務(wù)端和客戶端的鏈路保護(hù)
42:什么是授權(quán),什么是驗(yàn)證?
授權(quán)是分局用戶角色劃分web資源的過程,其標(biāo)識(shí)web應(yīng)用中的安全域 分配權(quán)限
web容器使用廠商指定的機(jī)制驗(yàn)證用戶的角色 匹配權(quán)限
43:什么是HTTPS
HTTPS (Secure Hypertext Transfer Protocol) 是使用SSL協(xié)議的HTTP
44:什么是審計(jì)?
也就是訪問跟蹤,是為web應(yīng)用的每次訪問保留記錄的過程
45:如何實(shí)現(xiàn)聲明性授權(quán)
1、標(biāo)識(shí)web資源集
2、標(biāo)識(shí)角色
3、將web資源集影射到角色
4、標(biāo)識(shí)每個(gè)角色中的用戶
在 web.xml里配
46:描述servlet并發(fā)問題?
多個(gè)同類線程運(yùn)行,可以共享同一個(gè)Servlet實(shí)例,共享的數(shù)據(jù)和資源未合理同步,可能會(huì)引起數(shù)據(jù)的沖突
47:描述Web應(yīng)用中的六種屬性范圍
局部變量(頁面范圍)
實(shí)例變量
類變量
請(qǐng)求屬性(請(qǐng)求范圍)
會(huì)話屬性(會(huì)話范圍)
上下文屬性(應(yīng)用范圍)
48:支出上述六種那些是線程安全的
局部變量和請(qǐng)求屬性
49:什么是STM?如何實(shí)現(xiàn)?
SingleThreadModel接口
可以實(shí)現(xiàn)SingleThreadModel接口保證某一時(shí)刻只有一個(gè)請(qǐng)求執(zhí)行service方法
50:如何實(shí)現(xiàn)并發(fā)管理?
盡可能使用局部和請(qǐng)求屬性
使用synchronized語法控制并發(fā)
盡可能減少同步塊和同步方法的使用
使用正確設(shè)置了線程安全的資源類
以上是“Java中Servlet常見面試題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!