1. Servlet的生命周期
答:
? ? ? 分為 5 個階段:加載蒂教、創(chuàng)建、初始化畴嘶、處理客戶請求蛋逾、卸載。
①窗悯、加載:容器通過類加載器使用 Servlet 類對應(yīng)的文件加載 servlet区匣;
②、創(chuàng)建:通過調(diào)用 Servlet 構(gòu)造函數(shù)創(chuàng)建一個 Servlet 實例蒋院;
③亏钩、初始化:調(diào)用 init() 方法初始化;
④欺旧、處理客戶請求:每當有一個客戶請求姑丑,容器會創(chuàng)建一個新的線程來處理客戶請求(調(diào)用 service() 方法來響應(yīng)客戶請求,service() 方法會根據(jù)請求的 method 屬性來調(diào)用 doGet() & doPost() 方法)
⑤辞友、卸載:容器在卸載 Servlet 之前栅哀,需要調(diào)用 destroy() 方法讓 Servlet 自己釋放其占用的資源。
2. 如何現(xiàn)實servlet的單線程模式
<%@ page isThreadSafe=”false”%>
3. JAVA SERVLET API中forward() 與redirect()的區(qū)別称龙?
forward是服務(wù)器請求資源留拾,服務(wù)器直接訪問目標地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來鲫尊,然后把這些內(nèi)容再發(fā)給瀏覽器痴柔,其實客戶端瀏覽器只發(fā)了一次請求,所以它的地址欄中還是原來的地址马昨,session,request參數(shù)都可以獲取竞帽。
redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,相當于客戶端瀏覽器發(fā)送了兩次請求鸿捧。
4. 過濾器的作用
答:
可以驗證客戶是否來自可信的網(wǎng)絡(luò)屹篓,可以對客戶提交的數(shù)據(jù)進行重新編碼,可以從系統(tǒng)里獲得配置的信息匙奴,可以過濾 掉客戶的某些不應(yīng)該出現(xiàn)的詞匯堆巧,可以驗證用戶是否登錄,可以驗證客戶的瀏覽器是否支持當前的應(yīng)用泼菌,可以記錄 系統(tǒng)的日志等等谍肤。
5. 過濾器的用法
答:
首先要實現(xiàn)(implements)Filter 接口,同時覆蓋Filter 接口的三個方法:
init(FilterConfig config) //用于獲得FilterConfig 對象哗伯;
doFilter(ServletRequest request, ServletResponse response,FilterChain chain) //進行過濾處理一些業(yè)務(wù)荒揣;
destroy() //銷毀Filter。
6. 過濾器和監(jiān)聽器的區(qū)別
答:
過濾器Filter是實現(xiàn)了javax.servlet.Filter接口的服務(wù)器端程序焊刹,監(jiān)聽器Listener是實現(xiàn)了 javax.servlet.ServletContextListener 接口的服務(wù)器端程序
都是隨web應(yīng)用的啟動而啟動系任,只初始化一次恳蹲,隨web應(yīng)用的停止而銷毀
過濾器攔截指定的請求,監(jiān)聽器偵聽指定的動作
7. 轉(zhuǎn)發(fā)和重定向的區(qū)別
答:轉(zhuǎn)發(fā)是服務(wù)器端跳轉(zhuǎn)俩滥,地址欄地址不改變嘉蕾,客戶端向服務(wù)器發(fā)送一次請求,重定向是客戶端跳轉(zhuǎn)霜旧,地址欄地址發(fā)生改 變错忱,向服務(wù)器發(fā)送兩次請求
8. POST和GET的區(qū)別
答:
1、GET請求挂据,請求的數(shù)據(jù)會附加在URL之后以清,以?分割URL和傳輸數(shù)據(jù),多個參數(shù)用&連接棱貌。URL的編碼格式采用的是ASCII編碼玖媚,而不是uniclde,即是說所有的非ASCII字符都要編碼之后再傳輸婚脱。
POST請求:POST請求會把請求的數(shù)據(jù)放置在HTTP請求包的包體中今魔。上面的item=bandsaw就是實際的傳輸數(shù)據(jù)。
因此障贸,GET請求的數(shù)據(jù)會暴露在地址欄中错森,而POST請求則不會。
2篮洁、傳輸數(shù)據(jù)的大小
在HTTP規(guī)范中涩维,沒有對URL的長度和傳輸?shù)臄?shù)據(jù)大小進行限制。但是在實際開發(fā)過程中袁波,對于GET瓦阐,特定的瀏覽器和服務(wù)器對URL的長度有限制。因此篷牌,在使用GET請求時睡蟋,傳輸數(shù)據(jù)會受到URL長度的限制。
對于POST枷颊,由于不是URL傳值戳杀,理論上是不會受限制的,但是實際上各個服務(wù)器會規(guī)定對POST提交數(shù)據(jù)大小進行限制夭苗,Apache信卡、IIS都有各自的配置。
3题造、安全性
POST的安全性比GET的高傍菇。這里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全界赔,上面提到的安全僅僅是不修改服務(wù)器的數(shù)據(jù)丢习。比如须妻,在進行登錄操作,通過GET請求泛领,用戶名和密碼都會暴露再URL上,因為登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因敛惊,此時的用戶名和密碼就很容易被他人拿到了渊鞋。除此之外,GET請求提交的數(shù)據(jù)還可能會造成Cross-site request frogery攻擊
4瞧挤、HTTP中的GET锡宋,POST,SOAP協(xié)議都是在HTTP上運行的
9. doGet()方法和doPost()方法有什么區(qū)別特恬?
doGet:GET方法會把名值對追加在請求的URL后面执俩。因為URL對字符數(shù)目有限制,進而限制了用在客戶端請求的參數(shù)值的數(shù)目癌刽。并且請求中的參數(shù)值是可見的役首,因此,敏感信息不能用這種方式傳遞显拜。
doPOST:POST方法通過把請求參數(shù)值放在請求體中來克服GET方法的限制衡奥,因此,可以發(fā)送的參數(shù)的數(shù)目是沒有限制的远荠。最后矮固,通過POST請求傳遞的敏感信息對外部客戶端是不可見的。
10. sendRedirect()和forward()方法有什么區(qū)別譬淳?
sendRedirect()方法會創(chuàng)建一個新的請求档址,而forward()方法只是把請求轉(zhuǎn)發(fā)到一個新的目標上。重定向(redirect)以后邻梆,之前請求作用域范圍以內(nèi)的對象就失效了守伸,因為會產(chǎn)生一個新的請求,而轉(zhuǎn)發(fā)(forwarding)以后确虱,之前請求作用域范圍以內(nèi)的對象還是能訪問的含友。一般認為sendRedirect()比forward()要慢。
11. 什么是MVC
答:MVC是一種設(shè)計模式校辩,即model(模型)窘问、view(視圖)、control(控制)分離設(shè)計宜咒;這是目前WEB 應(yīng)用服務(wù)系統(tǒng) 的主流設(shè)計方向惠赫。
Model:即處理業(yè)務(wù)邏輯的模塊,每一種處理一個模塊故黑;
View:負責頁面顯示儿咱,顯示MODEL 處理結(jié)果給用戶庭砍,主要實現(xiàn)數(shù)據(jù)到頁面轉(zhuǎn)換過程;
Control:負責每個請求的分發(fā)混埠,把FORM 數(shù)據(jù)傳遞給MODEL 處理怠缸,把處理結(jié)果的數(shù)據(jù)傳遞給VIEW 顯示。
12. 解釋一下mvc 以及熟悉的mvc 框架
MVC 是Model-View-Controller 的簡寫钳宪。Model 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean揭北,EJB 組件實現(xiàn)), View 是應(yīng)用的表示層(由JSP吏颖、HTML搔体、各種Taglib 等組成),Controller 是提供應(yīng)用程序的中心控制處理半醉。通過這種設(shè)計模型把應(yīng)用邏輯疚俱,處理過程和顯示邏輯分成不同的組件實現(xiàn),這些組件可以進行交互和重用缩多,另外有利于維護呆奕。Struts1、Struts2瞧壮、Spring MVC登馒、WebWork 等這些都是屬于基于MVC 模式實現(xiàn)的框架
13. Tomcat,apache咆槽,jboss的區(qū)別
Tomcat是servlet容器陈轿,用于解析jsp,servlet秦忿。是一個輕量級的高效的容器麦射;缺點是不支持EJB,只能用于Java應(yīng)用灯谣。
Apache是http服務(wù)器(web服務(wù)器)潜秋,類似于IIS可以用來建立虛擬站點,編譯處理靜態(tài)頁面胎许。支持SSL技術(shù)峻呛,支持多個虛擬主機等功能。
Jboss是應(yīng)用服務(wù)器辜窑,運行EJB的javaee應(yīng)用服務(wù)器钩述,遵循javaee規(guī)范,能夠提供更多平臺的支持和更多集成功能穆碎,如數(shù)據(jù)庫連接牙勘,JCA等。其對servlet的支持是通過集成其他servlet容器來實現(xiàn)的所禀。如tomcat方面。