java面試題(二)
11、說出Servlet的生命周期,並說出Servlet和CGI的區別?
Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
與cgi的區別在於servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
12、轉發(forward)和重定向(redirect)的區別?
forward(轉發):是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因為這個跳轉過程實在服務器實現的,並不是在客戶端實現的所以客戶端並不知道這個跳轉動作,所以它的地址欄還是原來的地址.
redirect(重定向):是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
轉發是服務器行為,重定向是客戶端行為。
13、JSP有哪些內置對象?作用分別是什麽?
SP共有以下9種基本內置組件
1、request對象 客戶端請求,此請求會包含來自GET/POST請求的參數通過它才能了 解到客戶的需求,然後做出響應。
2、response對象 響應客戶請求的有關信息
3、session對象 它指的是客戶端與服務器的一次會話,從客戶端連到服務器的一個 WebApplication開始,直到客戶端與服務 器斷開連接為止。
4、out對象 它是JspWriter類的實例,是向客戶端輸出內容常用的對象
5、page對象 它是指向當前JSP頁面本身,有點象類中的this指針,它是 Java.lang.Object類的實例
6、application對象 它實現了用戶間數據的共享,可存放全局變量。它開始於服務器的啟動,直到服務器的關閉
7、exception對象 它是一個例外對象,當一個頁面在運行過程中發生了例外,就產生這個對象。
8、pageContext對象 它提供了對JSP頁面內所有的對象及名字空間的訪問
9、config對象 它是在一個Servlet初始化時,JSP引擎向它傳遞信息用的
14、get和post請求的區別?
1.GET請求,請求的數據會附加在URL之後,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之後再傳輸。
POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數據。
2、傳輸數據的大小
在HTTP規範中,沒有對URL的長度和傳輸的數據大小進行限制。但是在實際開發過程中,對於GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。
對於POST,由於不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規定對POST提交數據大小進行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高。這裏的安全是指真正的安全,而不同於上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露再URL上,因為登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數據還可能會造成Cross-site request frogery攻擊因此,GET請求的數據會暴露在地址欄中,而POST請求則不會。
15、常用的Web容器
tomcat
類型:servlet容器和HTTP web服務器
功能:實現了一些J2EE特性包括Java Servlet、JSP頁面、Java EL和websocket,還有純java的http web server.
重要組件:
catalina是一個servlet容器
coyote是連接器
Jasper是tomcat JSP引擎,解析編譯JSP稱為servlet,運行時,可以檢測JSP的改動並且重新編譯它們。
Cluster用來管理大型應用,用來做LB
WAS(Wephere Application Server)
web應用程序服務器,是一個軟件產品,扮演web應用程序服務器的角色,是一個軟件框架和中間件,為基於Java的web應用程序服務。
was可以和眾多web服務器配置使用,包括Apache HTTP服務器,Netscape企業服務器。微軟IIS服務器,IBM HTTP Server。
JBoss web server集成了apache http server,servlet引擎,LB和tomcat本地庫
Jetty web server
Java開發的web server
類型:web server 和 servlet容器
免費開源
用於Apache ActiveMQ/Alfresco/Apache Geronimo/Apache Maven/Apache Spark/Google App Engine/Eclipse/FuSE/IDempiere/Twitter‘s Streaming Api/Zimbra.
oracle weblogic Server
是一個java EE 的應用程序服務器,現在由oracle維護,是由Weblogic發展而來。
Apache http server
apache 軟件基金會開發
c和xml開發
類型:web server
apache是使用最廣泛的web服務器。
支持perl/python/tcl/php語言,ssl、tls,代理,URL重寫,日誌過濾等。
apache支持很多插件模塊擴展,
支持虛擬主機,可以讓一個apache部署多個web站點同時支持1W連接
反向代理(帶緩存):LB(帶活躍度檢查)、多種負載均衡機制、容錯能力(故障自動恢復)/websocket/FastCGI/SCGI/AJP和UWSGIt支持(帶緩存)、動態配置
Nginx
web server,反向代理,郵件正向代理。
反向代理服務器支持TCP、UDP、HTTP、HTTPS、SMTP、POP3和IMAP協議,還有負載均衡和HTTP緩存功能。
nginx使用同步事件驅動方法來處理請求。
HTTP代理和web服務器特性
處理1W同步連接才用2.5MB內存,保持同步連接。
處理靜態文件、索引文件和自動索引文件
帶緩存的反向代理
帶健康檢查的負載均衡。
容錯
TLS/SSL
websocket和HTTP1.1
FLV和MP4流
web頁面訪問認證
gzip壓縮和解壓縮
URL重寫
請求處理閑置
嵌入Perl腳本
郵箱代理特性
TLS、SSL支持
STARTTLS支持
SMTP、POP3和IMAP代理
外部HTTP服務器認證
Haproxy
C語言開發,免費、開源,提供高可用負載均衡和TCP/HTTP代理。
性能:配備了雙核心的Opteron或Xeon處理器的服務器通常達到每秒點擊15000到40000之間,並且有麻煩飽和Linux下2 Gbit / sec的連接。
IHS(IBM Http Server)
是web服務器,基於APache服務器實現的,支持IBM的WAS應用程序服務器集成。用來做負載均衡。
16、JSP 和Servlet 有什麽關系?
1.jsp經編譯後就變成了Servlet.(JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識別的java類)
2.jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制.
3.Servlet中沒有內置對象,Jsp中的內置對象都是必須通過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象得到.
Jsp是Servlet的一種簡化,使用Jsp只需要完成程序員需要輸出到客戶端的內容,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用於生成對客戶端的響應。
17、JSP中的四種作用域?
page:當前頁面,也就是只要跳到別的頁面就失效了
request:一次會話,簡單的理解就是一次請求範圍內有效
session:瀏覽器進程,只要當前頁面沒有被關閉(沒有被程序強制清除),不管怎麽跳轉都是有效的
application:服務器,只要服務器沒有重啟(沒有被程序強制清除),數據就有效
18、如何實現JSP或Servlet的單線程模式?
實現servlet的單線程的jsp命令是: <%@ page isThreadSafe=”false”%>
<%@ page isThreadSafe="true|false" %>
默認值為true
isThreadSafe=false模式表示它是以Singleton模式運行。
該模式implements了接口SingleThreadMode,
該模式同一時刻只有一個實例,不會出現信息同步與否的概念。
若多個用戶同時訪問一個這種模式的頁面,
那麽先訪問者完全執行完該頁面後,後訪問者才開始執行。
19、實現會話跟蹤的技術有哪些?
1).隱藏表單域:<input type="hidden">,非常適合步需要大量數據存儲的會話應用。
2).URL 重寫:URL 可以在後面附加參數,和服務器的請求一起發送,這些參數為名字/值對。 見 http://blog.csdn.net/xh16319/article/details/8464055
3).Cookie:一個 Cookie 是一個小的,已命名數據元素。服務器使用 SET-Cookie 頭標將它作為 HTTP
響應的一部分傳送到客戶端,客戶端被請求保存 Cookie 值,在對同一服務器的後續請求使用一個
Cookie 頭標將之返回到服務器。與其它技術比較,Cookie 的一個優點是在瀏覽器會話結束後,甚至
在客戶端計算機重啟後它仍可以保留其值。 見:http://blog.csdn.net/xh16319/article/details/8464319
4).Session:使用 setAttribute(String str,Object obj)方法將對象捆綁到一個會話
20、過濾器有哪些作用和用法?
過濾器顧名思義就是進行過濾的,可以實現代碼的定向執行和預處理。
通俗點說法filter相當於加油站,request是條路,response是條路,目的地是servlet,這個加油站設在什麽地方對什麽數據操作可以由你來控制。
備註:過濾器可以再請求和響應之前做一部分預處理,有效的過濾掉不需要的內容,而且過濾器可以被復用,節省了大量的復用代碼,提高了java的代碼執行效率
Servlet 過濾器是小型的 Web 組件,它們攔截請求和響應,以便查看、提取或以某種方式操作正在客戶機和服務器之間交換的數據。過濾器是通常封裝了一些功能的 Web 組件,這些功能雖然很重要,但是對於處理客戶機請求或發送響應來說不是決定性的。典型的例子包括記錄關於請求和響應的數據、處理安全協議、管理會話屬性, 等等。過濾器提供一種面向對象的模塊化機制,用以將公共任務封裝到可插入的組件中,這些組件通過一個配置文件來聲明,並動態地處理。
聲明式的:過濾器通過 Web 部署描述符(web.xml)中的 XML 標簽來聲明。這樣允許添加和刪除過濾器,而無需改動任何應用程序代碼或 JSP 頁面。
動態的:過濾器在運行時由 Servlet 容器調用來攔截和處理請求和響應。
靈活的:過濾器在 Web 處理環境中的應用很廣泛,涵蓋諸如日誌記錄和安全等許多最公共的輔助任務。過濾器還是靈活的,因為它們可用於對來自客戶機的直接調用執行預處理和後期處 理,以及處理在防火墻之後的 Web 組件之間調度的請求。最後,可以將過濾器鏈接起來以提供必需的功能。
模塊化的:通過把應用程序處理邏輯封裝到單個類文件中,過濾器從而定義了可容易地從請求/響應鏈中添加或刪除的模塊化單元。
可移植的:與 Java 平臺的其他許多方面一樣,Servlet 過濾器是跨平臺和跨容器可移植的,從而進一步支持了 Servler 過濾器的模塊化和可重用本質。
可重用的:歸功於過濾器實現類的模塊化設計,以及聲明式的過濾器配置方式,過濾器可以容易地跨越不同的項目和應用程序使用。
透明的:在請求/響應鏈中包括過濾器,這種設計是為了補充(而不是以任何方式替代)servlet 或 JSP 頁面提供的核心處理。因而,過濾器可以根據需要添加或刪除,而不會破壞 servlet 或 JSP 頁面。
所以 Servlet 過濾器是通過一個配置文件來靈活聲明的模塊化可重用組件。過濾器動態地處理傳入的請求和傳出的響應,並且無需修改應用程序代碼就可以透明地添加或刪除它 們。最後,過濾器獨立於任何平臺或者 Servlet 容器,從而允許將它們容易地部署到任何相容的 J2EE 環境中。
java面試題(二)