1. 程式人生 > >java面試③Web部分

java面試③Web部分

理解 初始 限制 欺騙 get 正在 servlet 加載 ini

2.2.1 講一下http get和post請求的區別

get和post請求都是http的請求方式,用戶通過不同的http請求方式完成對資源(url)的不同操作,具體點來講get一般用於獲取/查詢資源信息,而post一般用於更新資源信息。

http定義了與服務器交互的不同方法,最基本的方法有4種,分別是get,post,put,delete,url全稱是資源描述符,我們可以這樣認為:一個URL地址,它用於描述一個網絡上的資源,而http中的get,post,put,delete就是對應著這個資源的查,改,增,刪4個操作,具體點get一般用於獲取/查詢資源信息,而post一般用於更新資源信息。

1)get請求提交的數據會在地址欄顯示出來,而post請求不會在地址欄顯示出來。

get提交請求的數據會附在URL之後(就是把數據放置在http協議頭中)以?分割url和傳輸數據,多個參數用&連接;post提交:把提交的數據放置的是在http包的包體中,因此,get提交的數據會在地址欄中顯示出來,而post提交,地址欄不會改變。

2)傳輸數據的大小

http get請求由於瀏覽器對地址長度的限制而導致傳輸的數據有限制,而post請求不會因為地址長度限制而導致傳輸數據限制。

3)安全性,post的安全性要比get的安全性高,由於數據是會在地址中呈現,所以安全性可以歷史記錄找到密碼相關等信息。

2.2.2 講一下你對servlet的理解?或者servlet是什麽?

servlet(servlet applet),全稱java servlet,是用java編寫的服務端程序,而這些Servlet都要實現Servlet這個接口,其主要功能在於交互式地瀏覽和修改數據,生成動態web內容,servlet運行於支持java的應用服務器中。

httpservlet重寫doGet和doPost方法或者你也可以重寫service方法完成對get和post請求的響應。

技術分享

2.2.3 簡單說一下servlet的生命周期?

servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束,這個生存期由java servlet Servlet接口的init,service,destory方法表達。

Servlet啟動時,開始加載Servlet生命周期開始,servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對其的doxxx方法(doGet,doPost)等,當服務器決定將實例化銷毀的時候(服務器關閉)調用其destory方法

加載Servlet的class-->實例化Servlet的init完成初始化-->響應請求(Servlet的service方法)-->Servlet容器關閉時(Servlet的destory方法)

2.2.4 Servlet API中forward()與redirect()的區別?

前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的鏈接,瀏覽器(客戶端)將會得到跳轉的鏈接,並重新發送請求鏈接。forward還是原來的請求而rediect是重新發起請求。這樣,從瀏覽器的地址欄中可以看出跳轉後的鏈接地址,所以前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且這樣有助於隱藏實際的鏈接,在有些情況下,比如,需要跳轉到一個其他服務器上的資源則必須使用sendRedirect()方法。

1)forward是服務器請求的轉向而rediect是客戶端的跳轉。

2)使用forward瀏覽器的地址不會發生改變,而redrect會發生改變。

3)forward是一次請求中完成,而redrect是重新發起請求。

3)forward是在服務器端完成,而不用客戶端重新發起請求,效率高。

技術分享

2.2.5 JSP和Servlet有哪些相同點和不同點,它們之間的聯系是什麽?

JSP是Servlet的擴展。所有的jsp文件都會被翻譯為一個繼承httpServlet的類,也就是說jsp最終也是一個Servlet,這個servlet對外提供服務。

Servlet和JSP最主要的不同點在於,Servlet如果要實現html的功能,必須使用Writer輸出對應的html比較麻煩,Servlet的應用邏輯是在java文件,並完全從表示層中的html分離出來,而jsp的情況是Java和HTML可以組合成一個擴展名為.jsp文件比較方便而嵌入邏輯比較復雜,jsp側重視圖,Servlet主要用於控制邏輯。

2.2.6 jsp有哪些內置對象?作用分別是什麽?

9個內置的對象:

request 用戶請求,此請求會包含來自get/post請求的參數

response 網頁傳回用戶端的回應

pageContext 網頁的屬性是在這裏管理

session 與請求有關的會話棋

application servlet正在執行的內容

out 用來傳送回應的輸出

config servlet 的構架部件

page jsp網頁本身

exception 針對錯誤網頁,未捕抓的例外

四大作用域:pageContext,request,session,application可以通過jstl從四大作用域中取值

jsp傳遞值request,session,application,cookie也能傳值

技術分享

2.2.7 說一下session和cookie的區別?你在項目中都有哪些地方使用了

Session和cookie都是會話跟蹤技術,cookie通過客戶端記錄信息確定用戶身份,session通過在服務端確定用戶身份,但是session的實現依賴於cookie,sessionId(session的唯一標識需要存放在客戶端)

cokike和session的區別

1)cookie數據存放在客戶的瀏覽器上,session數據存放在服務器上。

2)cookie不是很安全,別人可以分析存放本地的cookie並進行cookie欺騙,考慮到安全性應當使用session

3)session會在一定時間內保存在服務器上,當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用cookie

4)單個cookie保存的數據不能超過4k,很多瀏覽器都限制一個站點最多保存20cookie

5)所以個人建議:

將登錄等重要信息存放為session,其他信息如果需要保留,可以存放cookie中,比如購物車。

購物車最好使用cookie,但是cookie是可以在用戶端禁用的,這時候我們要使用cookie+數據庫的方式實現,當從cookie中不能取出數據時,就從數據庫獲取

2.2.8 mvc的各部分都有哪些技術來實現

M(Model)模型 javaBean,hibernate,mybatis

V(View)代碼視圖 jsp,html,freemaker,velocity

C(Controller)控制器 Servlet,Action,struts

Jsp+Servlet+javaBean 最經典mvc模式。實際上就是model2的實現方式,就是把視圖和邏輯隔離開來

model1的方式 jsp+service+dao

model2的方式 jsp+servlet+service+dao

使用struts2和springMVC這樣的mvc結構後,jsp+核心控制器+action+javaBean

java面試③Web部分