1.Servlet和jsp頁(yè)面過濾器Filter的作用及配置
【參考答案】
過濾器是一個(gè)駐留在服務(wù)器端的Web組件署咽,它可以截取客戶端和服務(wù)器端資源之間的請(qǐng)求與響應(yīng)信息杂抽,并對(duì)這些信息進(jìn)行過濾诈唬。作用:用戶請(qǐng)求審查、用戶數(shù)據(jù)轉(zhuǎn)換缩麸、統(tǒng)一認(rèn)證铸磅、輸出數(shù)據(jù)進(jìn)行壓縮、對(duì)請(qǐng)求響應(yīng)進(jìn)行加密杭朱。
配置:一般在web.xml中配置阅仔,通過和元素來(lái)完成的。
2.JSP內(nèi)置對(duì)象作用弧械,如何取Cookie的方法
【參考答案】
使用request對(duì)象的getCookies()方法取到所有客戶端cookies信息八酒。
(1) HttpServletRequest類的request對(duì)象
作用:代表請(qǐng)求對(duì)象,主要用于接受客戶端通過HTTP協(xié)議連接傳輸?shù)椒?wù)器端的數(shù)據(jù)刃唐。
(2) HttpServletResponse類的respone對(duì)象
作用:代表響應(yīng)對(duì)象羞迷,主要用于向客戶端發(fā)送數(shù)據(jù)
(3) JspWriter類的out對(duì)象
作用:主要用于向客戶端輸出數(shù)據(jù);
Out的基類是JspWriter
(4) HttpSession類的session對(duì)象
作用:主要用于來(lái)分別保存每個(gè)用戶信息,與請(qǐng)求關(guān)聯(lián)的會(huì)話画饥;
會(huì)話狀態(tài)維持是Web應(yīng)用開發(fā)者必須面對(duì)的問題衔瓮。
(5) ServletContext類的application對(duì)象
作用:主要用于保存用戶信息,代碼片段的運(yùn)行環(huán)境荒澡;
它是一個(gè)共享的內(nèi)置對(duì)象报辱,即一個(gè)容器中的多個(gè)用戶共享一個(gè)application對(duì)象,故其保存的信息被所有用戶所共享.
(6) PageContext類的pageContext對(duì)象
作用:管理網(wǎng)頁(yè)屬性,為JSP頁(yè)面包裝頁(yè)面的上下文单山,管理對(duì)屬于JSP中特殊可見部分中已命名對(duì)象的訪問碍现,它的創(chuàng)建和初始化都是由容器來(lái)完成的。
(7) ServletConfig類的config對(duì)象
作用:代碼片段配置對(duì)象米奸,表示Servlet的配置昼接。
(8) Object類的Page(相當(dāng)于this)對(duì)象
作用:處理JSP網(wǎng)頁(yè),是Object類的一個(gè)實(shí)例悴晰,指的是JSP實(shí)現(xiàn)類的實(shí)例慢睡,即它也是JSP本身,只有在JSP頁(yè)面范圍之內(nèi)才是合法的铡溪。
(9)Exception
作用:處理JSP文件執(zhí)行時(shí)發(fā)生的錯(cuò)誤和異常
3.通過部署描述文件(web.xml)可以配置哪些功能漂辐?
【參考答案】
1、配置項(xiàng)目的歡迎頁(yè)面棕硫。
2髓涯、配置Servlet訪問URL
3、配置Web容器哈扮、Servlet的初始化參數(shù)
4纬纪、配置錯(cuò)誤頁(yè)面蚓再,可以通過異常編號(hào)進(jìn)行錯(cuò)誤頁(yè)面跳轉(zhuǎn)。
5包各、Servlet加載優(yōu)先級(jí)摘仅。
6、Web容器監(jiān)聽器问畅。
7娃属、Web請(qǐng)求過濾器。
8按声、設(shè)置會(huì)話的過期時(shí)間膳犹。
4.JSP有哪些的動(dòng)作?分別有什么作用签则?
【參考答案】
:在頁(yè)面被請(qǐng)求的時(shí)候引入一個(gè)文件。
:尋找或者實(shí)例化一個(gè)JavaBean铐料。
:設(shè)置JavaBean的屬性渐裂。
:輸出某個(gè)JavaBean的屬性。
:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面钠惩。
:在請(qǐng)求轉(zhuǎn)發(fā)與include中進(jìn)行頁(yè)面?zhèn)鲄ⅰ?/p>
:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記柒凉。
【分析】
主要說(shuō)出常用的即可,分類羅列篓跛,一類與JavaBean相關(guān)的動(dòng)作膝捞,
>\\,另一類是轉(zhuǎn)發(fā)包含的指令\
d>\
5.JSP與SERVLET區(qū)別
【參考答案】
JSP在本質(zhì)上就是SERVLET,但是兩者的創(chuàng)建方式不一樣.Servlet完全是JAVA程序代碼構(gòu)成愧沟,擅長(zhǎng)于流程控制蔬咬;而.JSP由HTML代碼和JSP標(biāo)簽構(gòu)成,可以方便地編寫動(dòng)態(tài)網(wǎng)頁(yè).因此在實(shí)際應(yīng)用中采用Servlet來(lái)控制業(yè)務(wù)流程沐寺,而采用JSP來(lái)生成動(dòng)態(tài)網(wǎng)頁(yè)林艘,同時(shí)在MVC設(shè)計(jì)模式中JSP充當(dāng)視圖層,而Servlet位于控制層混坞。另外JSP也是Servlet技術(shù)的擴(kuò)展狐援,本質(zhì)上就是Servlet,就是JSP的另一種簡(jiǎn)易體現(xiàn)形式究孕,因?yàn)镴SP編譯后就是一個(gè)“類servlet”啥酱,再經(jīng)由JVM編譯生成Java類文件來(lái)執(zhí)行。
6.Tomcat的class加載的優(yōu)先順序一覽
【參考答案】
加載順序圖示如下:
第一步:加載JVM類庫(kù)厨诸。一般是加載由虛擬機(jī)提供的基本的運(yùn)行時(shí)類和系統(tǒng)擴(kuò)展目錄($JAVA_HOME/jre/lib/ext)下的JAR包镶殷。
第二步:加載系統(tǒng)環(huán)境變量的類庫(kù)。這個(gè)加載器用來(lái)加載CLASSPATH環(huán)境變量中指定的類泳猬。
第三步:加載Tomcat下面common文件夾下面的公共類庫(kù)批钠。
第四步:加載自己需要的catalina類庫(kù)宇植。
第五步:webapps下面自己應(yīng)用的類庫(kù),包括webapp1埋心、webapp1......等指郁。
7.BS與CS的聯(lián)系與區(qū)別】酱簦【極地信息面試題】
【參考答案】
C/S是Client/Server的縮寫,表示客戶端需要安裝專用的客戶端軟件與服務(wù)器交互闲坎。
B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個(gè)瀏覽器(Browser)茬斧,如Internet Explorer腰懂。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn)项秉,一部分事務(wù)邏輯在前端實(shí)現(xiàn)绣溜,但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)。瀏覽器通過Web Server同數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互娄蔼。
C/S與B/S區(qū)別:
1.硬件環(huán)境不同:
C/S一般建立在專用的網(wǎng)絡(luò)上,小范圍里的網(wǎng)絡(luò)環(huán)境,局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).
B/S建立在廣域網(wǎng)之上的,不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng),租用設(shè)備.信息自己管理.有比C/S更強(qiáng)的適應(yīng)范圍,一般只要有操作系統(tǒng)和瀏覽器就行
2.對(duì)安全要求不同
C/S一般面向相對(duì)固定的用戶群,對(duì)信息安全的控制能力很強(qiáng).一般高度機(jī)密的信息系統(tǒng)采用C/S結(jié)構(gòu)適宜.可以通過B/S發(fā)布部分可公開信息.
B/S建立在廣域網(wǎng)之上,對(duì)安全的控制能力相對(duì)弱,可能面向不可知的用戶怖喻。
3.對(duì)程序架構(gòu)不同
C/S程序可以更加注重流程,可以對(duì)權(quán)限多層次校驗(yàn),對(duì)系統(tǒng)運(yùn)行速度可以較少考慮.
B/S對(duì)安全以及訪問速度的多重的考慮,建立在需要更加優(yōu)化的基礎(chǔ)之上.比C/S有更高的要求B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢(shì),從MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng). SUN和IBM推的JavaBean構(gòu)件技術(shù)等,使B/S更加成熟.
4.軟件重用不同
C/S程序可以不可避免的整體性考慮,構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.
B/S對(duì)的多重結(jié)構(gòu),要求構(gòu)件相對(duì)獨(dú)立的功能.能夠相對(duì)較好的重用.就入買來(lái)的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統(tǒng)維護(hù)不同
C/S程序由于整體性,必須整體考察,處理出現(xiàn)的問題以及系統(tǒng)升級(jí).升級(jí)難.可能是再做一個(gè)全新的系統(tǒng)
B/S構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無(wú)縫升級(jí).系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級(jí).
6.處理問題不同
C/S程序可以處理用戶面固定,并且在相同區(qū)域,安全要求高需求,與操作系統(tǒng)相關(guān).應(yīng)該都是相同的系統(tǒng)
B/S建立在廣域網(wǎng)上,面向不同的用戶群,分散地域,這是C/S無(wú)法作到的.與操作系統(tǒng)平臺(tái)關(guān)系最小.
7.用戶接口不同
C/S多是建立的Window平臺(tái)上,表現(xiàn)方法有限,對(duì)程序員普遍要求較高
B/S建立在瀏覽器上,有更加豐富和生動(dòng)的表現(xiàn)方式與用戶交流.并且大部分難度減低,減低開發(fā)成本.
8.信息流不同
C/S程序一般是典型的中央集權(quán)的機(jī)械式處理,交互性相對(duì)低
B/S信息流向可變化, B-B B-C B-G等信息、流向的變化,更像交易中心岁诉。
8.Servlet與CGI的區(qū)別锚沸。【大唐動(dòng)力面試題】
【參考答案】
Servlet主要是運(yùn)行在服務(wù)器端的一個(gè)組件涕癣,基于Java語(yǔ)法構(gòu)建哗蜈,延用Java的傳統(tǒng)優(yōu)勢(shì)——可移植、穩(wěn)健坠韩、易開發(fā)距潘。CGI不可移植,為某一特定平臺(tái)編寫的CGI應(yīng)用只能運(yùn)行于這一環(huán)境中同眯。每一個(gè)CGI應(yīng)用存在于一個(gè)由客戶端請(qǐng)求激活的進(jìn)程中绽昼,并且在請(qǐng)求被服務(wù)后被卸載。這種模式將引起很高的內(nèi)存须蜗、CPU開銷硅确,而且在同一進(jìn)程中不能服務(wù)多個(gè)客戶。
Servlet對(duì)CGI的最主要優(yōu)勢(shì)在于一個(gè)Servlet被客戶端發(fā)送的第一個(gè)請(qǐng)求激活明肮,然后它將繼續(xù)運(yùn)行于后臺(tái)菱农,等待后續(xù)請(qǐng)求。每個(gè)請(qǐng)求將生成一個(gè)新的線程柿估,而不是一個(gè)完整的進(jìn)程循未,多個(gè)客戶能夠在同一個(gè)進(jìn)程中同時(shí)得到服務(wù),也就是說(shuō)它是基于多線程模式。而CGI對(duì)每個(gè)請(qǐng)求都產(chǎn)生新的進(jìn)程的妖,服務(wù)完成后就銷毀绣檬,所以效率上低于servlet。
9.Servlet中的init()方法什么時(shí)候被調(diào)用嫂粟?
【參考答案】
當(dāng)客戶端第一次請(qǐng)求該Servlet時(shí)娇未,由容器調(diào)用該Servlet類的init()方法對(duì)該Servlet進(jìn)行初始化,該初始始化方法只被調(diào)用一次星虹。
10.用什么方法使服務(wù)器關(guān)閉之后零抬,session所保存的信息不會(huì)丟失?
【參考答案】
使用cookie實(shí)現(xiàn)宽涌,服務(wù)器端將需要保存的信息平夜,通過Cookie并寫入客戶端磁盤中,下次訪問時(shí)卸亮,客戶端瀏覽器攜帶寫入的信息提交至服務(wù)器忽妒,這樣可以使信息不會(huì)因服務(wù)器關(guān)閉而丟失。
【分析】
主要考查Cookie的相關(guān)知識(shí)嫡良,比如還有一道題問:如果登錄某個(gè)網(wǎng)站后锰扶,想在本周內(nèi)都不用重新登錄,也是通過Cookie實(shí)現(xiàn)的
11.Forward與Redirect的區(qū)別?有哪些方式實(shí)現(xiàn)
【參考答案】
forward是服務(wù)器資源轉(zhuǎn)發(fā)寝受,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來(lái)罕偎,然后把這些內(nèi)容再發(fā)給瀏覽器很澄,客戶機(jī)并不知道發(fā)送的內(nèi)容是從哪兒來(lái)的,所以地址欄中還是原來(lái)的地址颜及;redirect則是服務(wù)器收到請(qǐng)求后發(fā)送一個(gè)狀態(tài)頭給客戶甩苛,客戶將再請(qǐng)求一次,這里多了兩次網(wǎng)絡(luò)通信的來(lái)往俏站。forward會(huì)將請(qǐng)求狀態(tài)和信息發(fā)至下一個(gè)jsp或Servlet讯蒲。redirect是送到client端后再一次請(qǐng)求,信息不被保留,就是我們說(shuō)的無(wú)法獲取request中的參數(shù)肄扎。
實(shí)現(xiàn)方式:
HttpServletResponse接口sendRedirect()方法進(jìn)行重定向轉(zhuǎn)發(fā)
RequestDispatcher.接口forward()方法進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)
12.Servlet的生命周期分為3個(gè)階段?和CGI的區(qū)別墨林?
【參考答案】
Servlet的生命周期主要由3個(gè)過程組成。
(1)init()方法:服務(wù)器初始化servlet犯祠。
(2)service()方法:初始化完畢旭等,servlet對(duì)象調(diào)用該方法響應(yīng)客戶的請(qǐng)求。
(3)destroy()方法:調(diào)用該方法消滅servlet對(duì)象衡载。
其中搔耕,init()方法只在servlet第一次被請(qǐng)求加載的時(shí)候被調(diào)用一次,當(dāng)有客戶再請(qǐng)求servlet服務(wù)時(shí)痰娱,web服務(wù)器將啟動(dòng)一個(gè)新的線程弃榨,在該線程中菩收,調(diào)用service方法響應(yīng)客戶的請(qǐng)求。
【分析】
后一個(gè)問題鲸睛,與CGI的區(qū)別娜饵,可以參考前面的答案。
13.描述Cookie和Session的作用腊凶?區(qū)別和各自的應(yīng)用范圍划咐?Session工作原理【迹【北京科瑞明】
【參考答案】
Cookie和Session都是用來(lái)服務(wù)器端和客戶端進(jìn)行會(huì)話跟蹤的一種技術(shù)褐缠。
區(qū)別:Cookie只能傳輸字符數(shù)據(jù),字符是通過加密后寫到客戶端风瘦,下次請(qǐng)求時(shí)協(xié)帶至服務(wù)器端队魏,Cookie協(xié)帶的數(shù)據(jù)大小為4KB,對(duì)數(shù)據(jù)量超出4KB的數(shù)據(jù)万搔,無(wú)法處理胡桨,Cookie數(shù)據(jù)一般是通過加密后存儲(chǔ)在客戶端,而Session在服務(wù)器端和瀏覽器緩存中都保存在ID的值瞬雹,通過此ID來(lái)識(shí)別唯一的客戶端昧谊。Session對(duì)數(shù)據(jù)存儲(chǔ)的大小沒有限制,但存儲(chǔ)的信息加重服務(wù)器的負(fù)載酗捌,另外Session在分布式服務(wù)器的使用上也有限制呢诬,Session無(wú)法跨域,也就是多臺(tái)服務(wù)器無(wú)法共享會(huì)話胖缤。
Session原理:當(dāng)客戶端用戶訪問時(shí)尚镰,服務(wù)器都為每個(gè)用戶分配一個(gè)唯一的會(huì)話ID(Session ID)保存在服務(wù)器內(nèi)存中,服務(wù)器響應(yīng)客戶端時(shí)哪廓,將Session ID寫入瀏覽器緩存中狗唉,當(dāng)下次客戶端請(qǐng)求時(shí),就會(huì)將該Session ID攜帶至服務(wù)器涡真,服務(wù)器再根據(jù)ID比對(duì)分俯,識(shí)別不同客戶端請(qǐng)求,以此方式來(lái)不斷維持服務(wù)器和客戶端狀態(tài)跟蹤综膀。
14.dao是什么及作用
【參考答案】
DAO是數(shù)據(jù)庫(kù)訪問接口,負(fù)責(zé)管理與數(shù)據(jù)庫(kù)打交道操作對(duì)象澳迫,將對(duì)數(shù)據(jù)維護(hù)與操作的方法通過DAO封裝起來(lái),使得這些操作可以從系統(tǒng)的業(yè)務(wù)邏輯中獨(dú)立出來(lái),從而使系統(tǒng)中的數(shù)據(jù)庫(kù)操作變得統(tǒng)一和簡(jiǎn)單化剧劝,方便開發(fā)人員對(duì)組件職責(zé)進(jìn)行劃分橄登。
15.解釋一下什么是servlet
【參考答案】
Servlet是用Java編寫的服務(wù)器端程序,由服務(wù)器端調(diào)用和執(zhí)行的Java類。是使用Java Servlet應(yīng)用程序設(shè)計(jì)接口(API)及相關(guān)類和方法來(lái)構(gòu)建的拢锹,而Java Servlet API定義了servlet和Java使能的服務(wù)器之間的一個(gè)標(biāo)準(zhǔn)接口谣妻,這使得Servlets具有跨服務(wù)器平臺(tái)的特性,當(dāng)客戶機(jī)發(fā)送請(qǐng)求至服務(wù)器時(shí)卒稳,服務(wù)器可以將請(qǐng)求信息發(fā)送給Servlet蹋半,并讓Servlet建立起服務(wù)器返回給客戶機(jī)的響應(yīng)。Servlet的功能很廣泛充坑,例如可以創(chuàng)建響應(yīng)至客戶端的所有HTML元素內(nèi)容和動(dòng)態(tài)數(shù)據(jù)內(nèi)容减江,與其它組件通訊等等。
16.HTTP請(qǐng)求的GET與POST方式的區(qū)別
【參考答案】
GET和POST.是HTTP定義的與服務(wù)器交互的不同方法捻爷,是使用HTTP的標(biāo)準(zhǔn)協(xié)議動(dòng)詞辈灼,用于編碼和傳送變量名/變量值對(duì)參數(shù),并且使用相關(guān)的請(qǐng)求語(yǔ)義也榄。
1巡莹、Get方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到甜紫;POST方式降宅,數(shù)據(jù)放置在HTML HEADER內(nèi)提交,無(wú)法在地址欄看到囚霸。
2腰根、GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制拓型。
3唠雕、GET一般用作小數(shù)據(jù)量的請(qǐng)求,POST一般用作大數(shù)據(jù)量的請(qǐng)求吨述,如:附件。
17.什么情況下調(diào)用doGet()和doPost()钞脂?
【參考答案】
根據(jù)客戶端的請(qǐng)求的方式來(lái)決定調(diào)用哪個(gè)方法處理請(qǐng)求揣云,如果客戶端采用GET方式
發(fā)送請(qǐng)求,服務(wù)器端則采用doGET()來(lái)處理冰啃,如果采用post方式邓夕,服務(wù)器端則采用doPOST()
18.request對(duì)象的主要方法
【參考答案】
setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對(duì)象阎毅,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請(qǐng)求中的字符編碼方式
getContentLength():返回請(qǐng)求的Body的長(zhǎng)度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值焚刚,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請(qǐng)求的輸入流扇调,用于獲得請(qǐng)求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字矿咕,結(jié)果是一個(gè)枚舉的實(shí)例
getParametervalues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請(qǐng)求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請(qǐng)求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請(qǐng)求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號(hào)
removeAttribute(String name):刪除請(qǐng)求中的一個(gè)屬性
19.request.getAttribute()和request.getParameter()有何區(qū)別?
【參考答案】
request.getAttribute()獲取在請(qǐng)求對(duì)象中設(shè)置的屬性,該方法返回對(duì)象為Object類型,而getParameter()方法是獲取指定的請(qǐng)求參數(shù)值碳柱,返回值為String類型的字符串捡絮。
20.jsp有哪些內(nèi)置對(duì)象?作用分別是什么?分別有什么方法?【軟通動(dòng)力面試題】
【參考答案】
答:JSP共有以下9個(gè)內(nèi)置的對(duì)象:
1)request用戶端請(qǐng)求莲镣,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)
2)response網(wǎng)頁(yè)傳回用戶端的回應(yīng)
3)pageContext網(wǎng)頁(yè)的屬性是在這里管理
4)session與請(qǐng)求有關(guān)的會(huì)話期
5)application servlet正在執(zhí)行的內(nèi)容
6)out用來(lái)傳送回應(yīng)的輸出
7)config servlet的構(gòu)架部件
8)page JSP網(wǎng)頁(yè)本身
9)exception針對(duì)錯(cuò)誤網(wǎng)頁(yè)福稳,未捕捉的例外
具體說(shuō)明如下:
request表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息瑞侮,并且提供了幾個(gè)用于獲取cookie, header,和session數(shù)據(jù)的有用的方法的圆。
response表示HttpServletResponse對(duì)象,并提供了幾個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies,頭信息等)
out對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例半火,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果越妈。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存取各種范圍的名字空間慈缔、servlet相關(guān)的對(duì)象的API叮称,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象藐鹤。Session可以存貯用戶的狀態(tài)信息
applicaton表示一個(gè)javax.servle.ServletContext對(duì)象瓤檐。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)娱节。
page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例
21.JSP的常用指令
【參考答案】
共三種挠蛉,分別是:
1)<%@include >用來(lái)在JSP頁(yè)面包含靜態(tài)資源
2)<%@taglib >用來(lái)指定JSP頁(yè)面標(biāo)簽類型
3)<%@page >用來(lái)指定頁(yè)面相關(guān)屬性
22.頁(yè)面間對(duì)象傳遞的方法
【參考答案】
request、session肄满、application谴古、Cookie等,其中比較常用的像request、Session稠歉。request主要是應(yīng)用在同一請(qǐng)求周期內(nèi)掰担,可能進(jìn)行對(duì)象或參數(shù)的共享傳遞。而Session主要可以應(yīng)用于同一客戶端會(huì)話周期內(nèi)進(jìn)行參數(shù)屬性的共享怒炸。
23.MVC的各個(gè)部分都有那些技術(shù)來(lái)實(shí)現(xiàn)?如何實(shí)現(xiàn)?
【參考答案】
MVC是Model-View-Controller的簡(jiǎn)寫带饱。Model代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn))阅羹,View是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生)勺疼,Controller是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯捏鱼,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)执庐。這些組件可以進(jìn)行交互和重用。
24.我們?cè)?/b>web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符导梆,如iso8859-1等轨淌,如何輸出一個(gè)某種編碼的字符串迂烁?
【參考答案】
public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
25.Web系統(tǒng)安全因素有哪些?
【參考答案】
1)操作系統(tǒng)猿诸、后臺(tái)數(shù)據(jù)庫(kù)的安全問題:這里指操作系統(tǒng)和后臺(tái)數(shù)據(jù)庫(kù)的漏洞婚被,配置不當(dāng),如弱口令等等梳虽,導(dǎo)致黑客址芯、病毒可以利用這些缺陷對(duì)網(wǎng)站進(jìn)行攻擊。
2)Web發(fā)布系統(tǒng)的漏洞:Web業(yè)務(wù)常用的發(fā)布系統(tǒng)(即Web服務(wù)器)窜觉,如IIS谷炸、Apache
等,這些系統(tǒng)存在的安全漏洞禀挫,會(huì)給入侵者可乘之機(jī)旬陡。
3)Web應(yīng)用程序的漏洞:主要指Web應(yīng)用程序的編寫人員,在編程的過程中沒有考慮到
安全的因素语婴,使得黑客能夠利用這些漏洞發(fā)起對(duì)網(wǎng)站的攻擊描孟,比如SQL注入、跨站腳本攻擊等等砰左。
4)自身網(wǎng)絡(luò)的安全狀況:網(wǎng)站服務(wù)器所處的網(wǎng)絡(luò)安全狀況也影響著網(wǎng)站的安全匿醒,比如網(wǎng)絡(luò)中存在的DoS攻擊等,也會(huì)影響到網(wǎng)站的正常運(yùn)營(yíng)缠导。
26.web運(yùn)用程序的穩(wěn)定廉羔、安全需要考慮哪些?
【參考答案】
Web服務(wù)器的性能考慮主要有:并發(fā)用戶數(shù)僻造、事務(wù)安全憋他、負(fù)載均衡、時(shí)段流量髓削、網(wǎng)絡(luò)帶寬
網(wǎng)格安全等竹挡。
網(wǎng)絡(luò)安全方面:
·關(guān)鍵數(shù)據(jù)的保護(hù),例如用戶數(shù)據(jù)等
·功能服務(wù)的正常提供立膛。
·網(wǎng)站的防攻擊能力此迅。
·對(duì)異常災(zāi)害的恢復(fù)能力。
程序性能:
·響應(yīng)請(qǐng)求并運(yùn)行得出結(jié)果的時(shí)間旧巾。
·錯(cuò)誤的檢測(cè)和攔截。
·擴(kuò)展性忍些。
27.介紹幾種WEB服務(wù)器鲁猩,問Tomcat里面的文件組成?
【參考答案】
Apache罢坝、Tomcat廓握、Jetty搅窿、Jboss、Websphere隙券、WebLogic
bin:啟動(dòng)男应、關(guān)閉Tomcat的命令。
common/lib:網(wǎng)絡(luò)編程的jar文件娱仔。
conf:配置文件沐飘。
logs:日志文件.
server:自帶的web應(yīng)用(三個(gè)).
shared:所有web應(yīng)用都可以訪問的內(nèi)容.
temp:臨時(shí).
webapps:默認(rèn)站點(diǎn)文件夾.
work:jsp生成的類.
Tomcat是一個(gè)開放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器牲迫。Tomcat Server是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的耐朴,因此我們就可以說(shuō)Tomcat Server也實(shí)行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。
28.將ISO8859-1字符串轉(zhuǎn)成GB2312編碼盹憎,語(yǔ)句為筛峭?
【參考答案】
String s=new String(text.getBytes(“iso8859-1”),”gb2312”)
29.與<%@include>的區(qū)別
【參考答案】
上面兩種都是在當(dāng)前頁(yè)面加載或包含另一頁(yè)面內(nèi)容,而使用動(dòng)作標(biāo)簽實(shí)現(xiàn)時(shí)它總是會(huì)檢查所含文件中的變化陪每,適合用于包含動(dòng)態(tài)頁(yè)面影晓,并且包含的頁(yè)頁(yè)要符合web容器語(yǔ)法要求,因?yàn)楸话捻?yè)面會(huì)被web引擎進(jìn)行編譯和加載,同時(shí)包含時(shí)會(huì)發(fā)送http請(qǐng)求檩禾,所以可以攜帶參數(shù)挂签。
而<%@include>是用偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,只是簡(jiǎn)單的將被加載的資源拷貝到了當(dāng)前锌订,而這種包含更多的是一種重用竹握,不能實(shí)現(xiàn)參數(shù)共享。
30.說(shuō)出數(shù)據(jù)連接池的工作機(jī)制是什么?
【參考答案】
web服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接辆飘,并一直維持不少于此數(shù)目的池連接啦辐。客戶端程序需要連接時(shí)蜈项,池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙芹关。如果當(dāng)前沒有空閑連接,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接紧卒,新建連接的數(shù)量有配置參數(shù)決定侥衬。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑跑芳,其他調(diào)用就可以使用這個(gè)連接轴总。
實(shí)現(xiàn)方式,返回的Connection是原始Connection的代理博个,代理Connection的close方法不是真正關(guān)連接怀樟,而是把它代理的Connection對(duì)象還回到連接池中。
31.如何實(shí)現(xiàn)Servlet單線程
【參考答案】
<%@ page isThreadSafe="false"%>
32.哪些方法可以提高JDBC性能?
【參考答案】
1.使用數(shù)據(jù)連接池(Connection Pool),避免使用DriverManager.getConnection()盆佣。
2.合理的配置數(shù)據(jù)連接池參數(shù)往堡,合理如何設(shè)置數(shù)據(jù)連接池的初始大小
3.選擇合適的事務(wù)等級(jí)械荷,按照不同的數(shù)據(jù)庫(kù)操作類型選擇不同的事務(wù)等級(jí)。
4.及時(shí)關(guān)閉Connection虑灰,不關(guān)閉的話會(huì)嚴(yán)重影響系統(tǒng)的性能吨瞎,甚至造成系統(tǒng)罷工
5.優(yōu)化Statement
1)選擇合適的Statement,根據(jù)不同的數(shù)據(jù)庫(kù)操作選擇Statement, PreparedStatement或者CallableStatement
2)盡可能的使用batch,這樣可以減少調(diào)用JDBC的次數(shù)。
3) Statement執(zhí)行完畢后關(guān)閉Statement
6.優(yōu)化你的SQL,盡量減少你的結(jié)果集穆咐,不要每次都"select * from XXX"
7.使用一些緩存工具進(jìn)行緩存颤诀,特別是大數(shù)據(jù)查詢。
33.實(shí)現(xiàn)會(huì)話跟蹤有哪幾個(gè)方式庸娱?
【參考答案】
1着绊、URL重寫
2、隱藏表單域
3熟尉、Cookie
4归露、Session
34.Web容器里面的對(duì)象存活周期?
【參考答案】
當(dāng)然由web容器進(jìn)行創(chuàng)建管理的對(duì)象主要有application斤儿,session剧包,request,page這四個(gè)級(jí)別的對(duì)象往果,而這4種級(jí)別的對(duì)象疆液,根據(jù)它們自身的特點(diǎn)來(lái)管理所持的對(duì)象,如:request中的對(duì)象的生命周期就是在請(qǐng)求范圍內(nèi)陕贮,Session在是會(huì)話周期內(nèi)堕油,page是在當(dāng)前JSP Page內(nèi),Application是在服務(wù)器啟肮之、停的周期內(nèi)掉缺。
【分析】
總的來(lái)說(shuō)這道題有點(diǎn)沒明白漾岳,提問者想問的是東西是什么关串∨粞酰看到題第一反應(yīng)以為是問Servlet的生存周期理卑,因?yàn)檎f(shuō)到Web容器對(duì)象,一般指的是Servlet挽放,Servlet組件是由容器進(jìn)行創(chuàng)建以舒、調(diào)用和管理的甫恩,所以首先想到了Servlet的存活周期柑土。
35.瀏覽器頁(yè)面與Tomcat的交互過程蜀肘?
【參考答案】
當(dāng)一個(gè)JSP頁(yè)面第一次被訪問的時(shí)候,JSP引擎將執(zhí)行以下步驟:
(1)將JSP頁(yè)面翻譯成一個(gè)Servlet稽屏,這個(gè)Servlet是一個(gè)java文件幌缝,同時(shí)也是一個(gè)完整的java程序
(2)再由java編譯器對(duì)這個(gè)Servlet進(jìn)行編譯,得到可執(zhí)行class文件
(3)再由JVM解釋器來(lái)解釋執(zhí)行class文件诫欠,生成向客戶端發(fā)送的應(yīng)答涵卵,然后發(fā)送給客戶端
以上三個(gè)步驟僅僅在JSP頁(yè)面第一次被訪問時(shí)才會(huì)執(zhí)行,以后的訪問速度會(huì)因?yàn)閏lass文件已經(jīng)生成而大大提高荒叼。
36.什么是斷點(diǎn)續(xù)傳轿偎,HTTP是否支持上傳下載,原理被廓?【大唐動(dòng)力面試題】
所謂斷點(diǎn)續(xù)傳坏晦,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載〖蕹耍客戶端在請(qǐng)求時(shí)昆婿,除了其它的信息外,需要增加一條參數(shù)蜓斧,告訴服務(wù)器從哪里開始傳仓蛆,在讀取時(shí)從指定的字節(jié)數(shù)的開始位向后讀取。簡(jiǎn)單示例:
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 100000; //表示從100000字節(jié)位置開始讀取挎春。
//定位文件指針到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//從輸入流中讀入字節(jié)流看疙,然后寫到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);