1.Servlet和jsp頁面過濾器Filter的作用及配置
【參考答案】
過濾器是一個駐留在服務器端的Web組件,它可以截取客戶端和服務器端資源之間的請求與響應信息,并對這些信息進行過濾。作用:用戶請求審查、用戶數據轉換、統一認證、輸出數據進行壓縮、對請求響應進行加密。
配置:一般在web.xml中配置,通過和元素來完成的。
2.JSP內置對象作用,如何取Cookie的方法
【參考答案】
使用request對象的getCookies()方法取到所有客戶端cookies信息。
(1) HttpServletRequest類的request對象
作用:代表請求對象,主要用于接受客戶端通過HTTP協議連接傳輸到服務器端的數據。
(2) HttpServletResponse類的respone對象
作用:代表響應對象,主要用于向客戶端發送數據
(3) JspWriter類的out對象
作用:主要用于向客戶端輸出數據;
Out的基類是JspWriter
(4) HttpSession類的session對象
作用:主要用于來分別保存每個用戶信息,與請求關聯的會話;
會話狀態維持是Web應用開發者必須面對的問題。
(5) ServletContext類的application對象
作用:主要用于保存用戶信息,代碼片段的運行環境;
它是一個共享的內置對象,即一個容器中的多個用戶共享一個application對象,故其保存的信息被所有用戶所共享.
(6) PageContext類的pageContext對象
作用:管理網頁屬性,為JSP頁面包裝頁面的上下文,管理對屬于JSP中特殊可見部分中已命名對象的訪問,它的創建和初始化都是由容器來完成的。
(7) ServletConfig類的config對象
作用:代碼片段配置對象,表示Servlet的配置。
(8) Object類的Page(相當于this)對象
作用:處理JSP網頁,是Object類的一個實例,指的是JSP實現類的實例,即它也是JSP本身,只有在JSP頁面范圍之內才是合法的。
(9)Exception
作用:處理JSP文件執行時發生的錯誤和異常
3.通過部署描述文件(web.xml)可以配置哪些功能?
【參考答案】
1、配置項目的歡迎頁面。
2、配置Servlet訪問URL
3、配置Web容器、Servlet的初始化參數
4、配置錯誤頁面,可以通過異常編號進行錯誤頁面跳轉。
5、Servlet加載優先級。
6、Web容器監聽器。
7、Web請求過濾器。
8、設置會話的過期時間。
4.JSP有哪些的動作?分別有什么作用?
【參考答案】
:在頁面被請求的時候引入一個文件。
:尋找或者實例化一個JavaBean。
:設置JavaBean的屬性。
:輸出某個JavaBean的屬性。
:把請求轉到一個新的頁面。
:在請求轉發與include中進行頁面傳參。
:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。
【分析】
主要說出常用的即可,分類羅列,一類與JavaBean相關的動作,
>\\,另一類是轉發包含的指令\
d>\
5.JSP與SERVLET區別
【參考答案】
JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.Servlet完全是JAVA程序代碼構成,擅長于流程控制;而.JSP由HTML代碼和JSP標簽構成,可以方便地編寫動態網頁.因此在實際應用中采用Servlet來控制業務流程,而采用JSP來生成動態網頁,同時在MVC設計模式中JSP充當視圖層,而Servlet位于控制層。另外JSP也是Servlet技術的擴展,本質上就是Servlet,就是JSP的另一種簡易體現形式,因為JSP編譯后就是一個“類servlet”,再經由JVM編譯生成Java類文件來執行。
6.Tomcat的class加載的優先順序一覽
【參考答案】
加載順序圖示如下:
第一步:加載JVM類庫。一般是加載由虛擬機提供的基本的運行時類和系統擴展目錄($JAVA_HOME/jre/lib/ext)下的JAR包。
第二步:加載系統環境變量的類庫。這個加載器用來加載CLASSPATH環境變量中指定的類。
第三步:加載Tomcat下面common文件夾下面的公共類庫。
第四步:加載自己需要的catalina類庫。
第五步:webapps下面自己應用的類庫,包括webapp1、webapp1......等。
7.BS與CS的聯系與區別。【極地信息面試題】
【參考答案】
C/S是Client/Server的縮寫,表示客戶端需要安裝專用的客戶端軟件與服務器交互。
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Internet Explorer。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在服務器端實現。瀏覽器通過Web Server同數據庫進行數據交互。
C/S與B/S區別:
1.硬件環境不同:
C/S一般建立在專用的網絡上,小范圍里的網絡環境,局域網之間再通過專門服務器提供連接和數據交換服務.
B/S建立在廣域網之上的,不必是專門的網絡硬件環境,例與電話上網,租用設備.信息自己管理.有比C/S更強的適應范圍,一般只要有操作系統和瀏覽器就行
2.對安全要求不同
C/S一般面向相對固定的用戶群,對信息安全的控制能力很強.一般高度機密的信息系統采用C/S結構適宜.可以通過B/S發布部分可公開信息.
B/S建立在廣域網之上,對安全的控制能力相對弱,可能面向不可知的用戶。
3.對程序架構不同
C/S程序可以更加注重流程,可以對權限多層次校驗,對系統運行速度可以較少考慮.
B/S對安全以及訪問速度的多重的考慮,建立在需要更加優化的基礎之上.比C/S有更高的要求B/S結構的程序架構是發展的趨勢,從MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持網絡的構件搭建的系統. SUN和IBM推的JavaBean構件技術等,使B/S更加成熟.
4.軟件重用不同
C/S程序可以不可避免的整體性考慮,構件的重用性不如在B/S要求下的構件的重用性好.
B/S對的多重結構,要求構件相對獨立的功能.能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統維護不同
C/S程序由于整體性,必須整體考察,處理出現的問題以及系統升級.升級難.可能是再做一個全新的系統
B/S構件組成,方面構件個別的更換,實現系統的無縫升級.系統維護開銷減到最小.用戶從網上自己下載安裝就可以實現升級.
6.處理問題不同
C/S程序可以處理用戶面固定,并且在相同區域,安全要求高需求,與操作系統相關.應該都是相同的系統
B/S建立在廣域網上,面向不同的用戶群,分散地域,這是C/S無法作到的.與操作系統平臺關系最小.
7.用戶接口不同
C/S多是建立的Window平臺上,表現方法有限,對程序員普遍要求較高
B/S建立在瀏覽器上,有更加豐富和生動的表現方式與用戶交流.并且大部分難度減低,減低開發成本.
8.信息流不同
C/S程序一般是典型的中央集權的機械式處理,交互性相對低
B/S信息流向可變化, B-B B-C B-G等信息、流向的變化,更像交易中心。
8.Servlet與CGI的區別。【大唐動力面試題】
【參考答案】
Servlet主要是運行在服務器端的一個組件,基于Java語法構建,延用Java的傳統優勢——可移植、穩健、易開發。CGI不可移植,為某一特定平臺編寫的CGI應用只能運行于這一環境中。每一個CGI應用存在于一個由客戶端請求激活的進程中,并且在請求被服務后被卸載。這種模式將引起很高的內存、CPU開銷,而且在同一進程中不能服務多個客戶。
Servlet對CGI的最主要優勢在于一個Servlet被客戶端發送的第一個請求激活,然后它將繼續運行于后臺,等待后續請求。每個請求將生成一個新的線程,而不是一個完整的進程,多個客戶能夠在同一個進程中同時得到服務,也就是說它是基于多線程模式。而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。
9.Servlet中的init()方法什么時候被調用?
【參考答案】
當客戶端第一次請求該Servlet時,由容器調用該Servlet類的init()方法對該Servlet進行初始化,該初始始化方法只被調用一次。
10.用什么方法使服務器關閉之后,session所保存的信息不會丟失?
【參考答案】
使用cookie實現,服務器端將需要保存的信息,通過Cookie并寫入客戶端磁盤中,下次訪問時,客戶端瀏覽器攜帶寫入的信息提交至服務器,這樣可以使信息不會因服務器關閉而丟失。
【分析】
主要考查Cookie的相關知識,比如還有一道題問:如果登錄某個網站后,想在本周內都不用重新登錄,也是通過Cookie實現的
11.Forward與Redirect的區別?有哪些方式實現
【參考答案】
forward是服務器資源轉發,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,客戶機并不知道發送的內容是從哪兒來的,所以地址欄中還是原來的地址;redirect則是服務器收到請求后發送一個狀態頭給客戶,客戶將再請求一次,這里多了兩次網絡通信的來往。forward會將請求狀態和信息發至下一個jsp或Servlet。redirect是送到client端后再一次請求,信息不被保留,就是我們說的無法獲取request中的參數。
實現方式:
HttpServletResponse接口sendRedirect()方法進行重定向轉發
RequestDispatcher.接口forward()方法進行請求轉發
12.Servlet的生命周期分為3個階段?和CGI的區別?
【參考答案】
Servlet的生命周期主要由3個過程組成。
(1)init()方法:服務器初始化servlet。
(2)service()方法:初始化完畢,servlet對象調用該方法響應客戶的請求。
(3)destroy()方法:調用該方法消滅servlet對象。
其中,init()方法只在servlet第一次被請求加載的時候被調用一次,當有客戶再請求servlet服務時,web服務器將啟動一個新的線程,在該線程中,調用service方法響應客戶的請求。
【分析】
后一個問題,與CGI的區別,可以參考前面的答案。
13.描述Cookie和Session的作用?區別和各自的應用范圍?Session工作原理。【北京科瑞明】
【參考答案】
Cookie和Session都是用來服務器端和客戶端進行會話跟蹤的一種技術。
區別:Cookie只能傳輸字符數據,字符是通過加密后寫到客戶端,下次請求時協帶至服務器端,Cookie協帶的數據大小為4KB,對數據量超出4KB的數據,無法處理,Cookie數據一般是通過加密后存儲在客戶端,而Session在服務器端和瀏覽器緩存中都保存在ID的值,通過此ID來識別唯一的客戶端。Session對數據存儲的大小沒有限制,但存儲的信息加重服務器的負載,另外Session在分布式服務器的使用上也有限制,Session無法跨域,也就是多臺服務器無法共享會話。
Session原理:當客戶端用戶訪問時,服務器都為每個用戶分配一個唯一的會話ID(Session ID)保存在服務器內存中,服務器響應客戶端時,將Session ID寫入瀏覽器緩存中,當下次客戶端請求時,就會將該Session ID攜帶至服務器,服務器再根據ID比對,識別不同客戶端請求,以此方式來不斷維持服務器和客戶端狀態跟蹤。
14.dao是什么及作用
【參考答案】
DAO是數據庫訪問接口,負責管理與數據庫打交道操作對象,將對數據維護與操作的方法通過DAO封裝起來,使得這些操作可以從系統的業務邏輯中獨立出來,從而使系統中的數據庫操作變得統一和簡單化,方便開發人員對組件職責進行劃分。
15.解釋一下什么是servlet
【參考答案】
Servlet是用Java編寫的服務器端程序,由服務器端調用和執行的Java類。是使用Java Servlet應用程序設計接口(API)及相關類和方法來構建的,而Java Servlet API定義了servlet和Java使能的服務器之間的一個標準接口,這使得Servlets具有跨服務器平臺的特性,當客戶機發送請求至服務器時,服務器可以將請求信息發送給Servlet,并讓Servlet建立起服務器返回給客戶機的響應。Servlet的功能很廣泛,例如可以創建響應至客戶端的所有HTML元素內容和動態數據內容,與其它組件通訊等等。
16.HTTP請求的GET與POST方式的區別
【參考答案】
GET和POST.是HTTP定義的與服務器交互的不同方法,是使用HTTP的標準協議動詞,用于編碼和傳送變量名/變量值對參數,并且使用相關的請求語義。
1、Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交,無法在地址欄看到。
2、GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。
3、GET一般用作小數據量的請求,POST一般用作大數據量的請求,如:附件。
17.什么情況下調用doGet()和doPost()?
【參考答案】
根據客戶端的請求的方式來決定調用哪個方法處理請求,如果客戶端采用GET方式
發送請求,服務器端則采用doGET()來處理,如果采用post方式,服務器端則采用doPOST()
18.request對象的主要方法
【參考答案】
setAttribute(String name,Object):設置名字為name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例
getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用于獲得請求中的數據
getMethod():獲得客戶端向服務器端傳送數據的方法
getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值
getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例
getParametervalues(String name):獲得有name指定的參數的所有值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
19.request.getAttribute()和request.getParameter()有何區別?
【參考答案】
request.getAttribute()獲取在請求對象中設置的屬性,該方法返回對象為Object類型,而getParameter()方法是獲取指定的請求參數值,返回值為String類型的字符串。
20.jsp有哪些內置對象?作用分別是什么?分別有什么方法?【軟通動力面試題】
【參考答案】
答:JSP共有以下9個內置的對象:
1)request用戶端請求,此請求會包含來自GET/POST請求的參數
2)response網頁傳回用戶端的回應
3)pageContext網頁的屬性是在這里管理
4)session與請求有關的會話期
5)application servlet正在執行的內容
6)out用來傳送回應的輸出
7)config servlet的構架部件
8)page JSP網頁本身
9)exception針對錯誤網頁,未捕捉的例外
具體說明如下:
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header,和session數據的有用的方法。
response表示HttpServletResponse對象,并提供了幾個用于設置送回瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息
applicaton表示一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和servlet環境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數。
page表示從該頁面產生的一個servlet實例
21.JSP的常用指令
【參考答案】
共三種,分別是:
1)<%@include >用來在JSP頁面包含靜態資源
2)<%@taglib >用來指定JSP頁面標簽類型
3)<%@page >用來指定頁面相關屬性
22.頁面間對象傳遞的方法
【參考答案】
request、session、application、Cookie等,其中比較常用的像request、Session。request主要是應用在同一請求周期內,可能進行對象或參數的共享傳遞。而Session主要可以應用于同一客戶端會話周期內進行參數屬性的共享。
23.MVC的各個部分都有那些技術來實現?如何實現?
【參考答案】
MVC是Model-View-Controller的簡寫。Model代表的是應用的業務邏輯(通過JavaBean,EJB組件實現),View是應用的表示面(由JSP頁面產生),Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。
24.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
【參考答案】
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系統安全因素有哪些?
【參考答案】
1)操作系統、后臺數據庫的安全問題:這里指操作系統和后臺數據庫的漏洞,配置不當,如弱口令等等,導致黑客、病毒可以利用這些缺陷對網站進行攻擊。
2)Web發布系統的漏洞:Web業務常用的發布系統(即Web服務器),如IIS、Apache
等,這些系統存在的安全漏洞,會給入侵者可乘之機。
3)Web應用程序的漏洞:主要指Web應用程序的編寫人員,在編程的過程中沒有考慮到
安全的因素,使得黑客能夠利用這些漏洞發起對網站的攻擊,比如SQL注入、跨站腳本攻擊等等。
4)自身網絡的安全狀況:網站服務器所處的網絡安全狀況也影響著網站的安全,比如網絡中存在的DoS攻擊等,也會影響到網站的正常運營。
26.web運用程序的穩定、安全需要考慮哪些?
【參考答案】
Web服務器的性能考慮主要有:并發用戶數、事務安全、負載均衡、時段流量、網絡帶寬
網格安全等。
網絡安全方面:
·關鍵數據的保護,例如用戶數據等
·功能服務的正常提供。
·網站的防攻擊能力。
·對異常災害的恢復能力。
程序性能:
·響應請求并運行得出結果的時間。
·錯誤的檢測和攔截。
·擴展性。
27.介紹幾種WEB服務器,問Tomcat里面的文件組成?
【參考答案】
Apache、Tomcat、Jetty、Jboss、Websphere、WebLogic
bin:啟動、關閉Tomcat的命令。
common/lib:網絡編程的jar文件。
conf:配置文件。
logs:日志文件.
server:自帶的web應用(三個).
shared:所有web應用都可以訪問的內容.
temp:臨時.
webapps:默認站點文件夾.
work:jsp生成的類.
Tomcat是一個開放源代碼、運行servlet和JSP Web應用軟件的基于Java的Web應用軟件容器。Tomcat Server是根據servlet和JSP規范進行執行的,因此我們就可以說Tomcat Server也實行了Apache-Jakarta規范且比絕大多數商業應用軟件服務器要好。
28.將ISO8859-1字符串轉成GB2312編碼,語句為?
【參考答案】
String s=new String(text.getBytes(“iso8859-1”),”gb2312”)
29.與<%@include>的區別
【參考答案】
上面兩種都是在當前頁面加載或包含另一頁面內容,而使用動作標簽實現時它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且包含的頁頁要符合web容器語法要求,因為被包含的頁面會被web引擎進行編譯和加載,同時包含時會發送http請求,所以可以攜帶參數。
而<%@include>是用偽碼實現,定不會檢查所含文件的變化,只是簡單的將被加載的資源拷貝到了當前,而這種包含更多的是一種重用,不能實現參數共享。
30.說出數據連接池的工作機制是什么?
【參考答案】
web服務器啟動時會建立一定數量的池連接,并一直維持不少于此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接并將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
實現方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關連接,而是把它代理的Connection對象還回到連接池中。
31.如何實現Servlet單線程
【參考答案】
<%@ page isThreadSafe="false"%>
32.哪些方法可以提高JDBC性能?
【參考答案】
1.使用數據連接池(Connection Pool),避免使用DriverManager.getConnection()。
2.合理的配置數據連接池參數,合理如何設置數據連接池的初始大小
3.選擇合適的事務等級,按照不同的數據庫操作類型選擇不同的事務等級。
4.及時關閉Connection,不關閉的話會嚴重影響系統的性能,甚至造成系統罷工
5.優化Statement
1)選擇合適的Statement,根據不同的數據庫操作選擇Statement, PreparedStatement或者CallableStatement
2)盡可能的使用batch,這樣可以減少調用JDBC的次數。
3) Statement執行完畢后關閉Statement
6.優化你的SQL,盡量減少你的結果集,不要每次都"select * from XXX"
7.使用一些緩存工具進行緩存,特別是大數據查詢。
33.實現會話跟蹤有哪幾個方式?
【參考答案】
1、URL重寫
2、隱藏表單域
3、Cookie
4、Session
34.Web容器里面的對象存活周期?
【參考答案】
當然由web容器進行創建管理的對象主要有application,session,request,page這四個級別的對象,而這4種級別的對象,根據它們自身的特點來管理所持的對象,如:request中的對象的生命周期就是在請求范圍內,Session在是會話周期內,page是在當前JSP Page內,Application是在服務器啟、停的周期內。
【分析】
總的來說這道題有點沒明白,提問者想問的是東西是什么。看到題第一反應以為是問Servlet的生存周期,因為說到Web容器對象,一般指的是Servlet,Servlet組件是由容器進行創建、調用和管理的,所以首先想到了Servlet的存活周期。
35.瀏覽器頁面與Tomcat的交互過程?
【參考答案】
當一個JSP頁面第一次被訪問的時候,JSP引擎將執行以下步驟:
(1)將JSP頁面翻譯成一個Servlet,這個Servlet是一個java文件,同時也是一個完整的java程序
(2)再由java編譯器對這個Servlet進行編譯,得到可執行class文件
(3)再由JVM解釋器來解釋執行class文件,生成向客戶端發送的應答,然后發送給客戶端
以上三個步驟僅僅在JSP頁面第一次被訪問時才會執行,以后的訪問速度會因為class文件已經生成而大大提高。
36.什么是斷點續傳,HTTP是否支持上傳下載,原理?【大唐動力面試題】
所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。客戶端在請求時,除了其它的信息外,需要增加一條參數,告訴服務器從哪里開始傳,在讀取時從指定的字節數的開始位向后讀取。簡單示例:
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 100000; //表示從100000字節位置開始讀取。
//定位文件指針到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//從輸入流中讀入字節流,然后寫到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);