J2EE面試題(一)

1.  瀏覽器jsp,html之間的關係

》JSP與Java Servlet一樣,是在服務器端執行的,通常返回該客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽

》在大多數Browser/Server結構的Web應用中,瀏覽器直接通過HTML或者JSP的形式與用戶交互,響應用戶的請求
》JSP在服務器上執行,並將執行結果輸出到客戶端瀏覽器,我們可以說基本上與瀏覽器無關


2. 自定義標籤要繼承哪個類

這個類可以繼承TagSupport或者BodyTagSupport,兩者的差別是前者適用於沒有主體的標籤,而後者適用於有主體的標籤。如果選擇繼承TagSupport,可以實現doStartTag和doEndTag兩個方法實現Tag的功能,如果選擇繼承BodyTagSupport,可以實現doAfterBody這個方法。


3. 過濾器Filter的作用及配置

過濾器是一個對象,可以傳輸請求或修改響應。它可以在請求到達Servlet/JSP之前對其進行預處理,而且能夠在響應離開Servlet/JSP之後對其進行後處理。所以如果你有幾個Servlet/JSP需要執行同樣的數據轉換或頁面處理的話,你就可以寫一個過濾器類,然後在部署描述文件(web.xml)中把該過濾器與對應的Servlet/JSP聯繫起來。你可以一個過濾器以作用於一個或一組servlet,零個或多個過濾器能過濾一個或多個servlet。一個過濾器實現java.servlet.Filter接口並定義它的三個方法:
》void init(FilterConfig config) throws ServletException:在過濾器執行service前被調用,以設置過濾器的配置對象。

》void destroy();在過濾器執行service後被調用。

》void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;


4. forward,與redirect 的區別?有哪些方式實現
forward是把另一個頁面加載到本頁面,不改變瀏覽器的路徑,redirect是跳轉到另一個頁面,會改變瀏覽器的路徑
重定向:   response.sendRedirect(“重定向的路徑”)
轉發:     request.getRequestDispatcher(“轉發路徑”).forward(request, response);


5. jsp內置對象和作用?
有九個內置對象:request、response、out、session、application、pageContext、config、page、exception

作用如下:
(1) HttpServletRequest類的Request對象
作用:代表請求對象,主要用於接受客戶端通過HTTP協議連接傳輸到服務器端的數據。

(2) HttpServletResponse類的Respone對象
作用:代表響應對象,主要用於向客戶端發送數據

(3) JspWriter類的out對象
作用:主要用於向客戶端輸出數據; 
        Out的基類是JspWriter

(4) HttpSession類的session對象
作用:主要用於來分別保存每個用戶信息,與請求關聯的會話;
         會話狀態維持是Web應用開發者必須面對的問題。

(5) ServletContex類的application對象
作用:主要用於保存用戶信息,代碼片段的運行環境;
        它是一個共享的內置對象,即一個容器中的多個用戶共享一個application對象,故其保存的信息被所有用戶所共享.

(6) PageContext類的PageContext對象
作用:管理網頁屬性,爲JSP頁面包裝頁面的上下文,管理對屬於JSP中特殊可見部分中已命名對象的訪問,它的創建和初始化都是由容器來完成的。

(7) ServletConfig類的Config對象
作用:代碼片段配置對象,表示Servlet的配置。

(8) Object類的Page(相當於this)對象
作用:處理JSP網頁,是Object類的一個實例,指的是JSP實現類的實例,即它也是JSP本身,只有在JSP頁面範圍之內纔是合法的。

(9)Exception
作用:處理JSP文件執行時發生的錯誤和異常


6. 如果用JSP開發一個聊天程序,不用數據庫存儲聊天紀錄,請問聊天記錄最好存儲在()中。

Application


7. doPost,doGet的區別?

在使用表單提交數據到服務器的時候有兩張方式可共選擇,一個是post,一個是get。可在<form>中的method屬性中指定提交的方式。如:<form action="inputForm" method="post">,如果不指定method屬性,則會默認該屬性爲”get”方式。

我們直接去訪問一個資源,也是get請求(比如直接訪問Servlet)。

點擊超級鏈接等等,也是get請求。


那麼,Get和post都能夠提交數據,那麼他們有什麼不同呢?
不同點一:
通過get方式提交的數據有大小的限制,通常在2048字節左右。也就是說如果提交的數據很大,用get方法就可需要小心;而post方式沒有數據大小的限制,理論上傳送多少數據都可以。不過大小限制也不一定是2K,也可能是8K,這個不同的瀏覽器不一樣。


不同點二:
通過get傳遞數據,實際上是將傳遞的數據按照”key,value”的方式跟在URL的後面來達到傳送的目的的;而post傳遞數據是通過http請求的附件進行的,在URL中並沒有明文顯示。


8. jsp亂碼如何解決,幾種解決方案。

分下面幾種情況來解決:
一、JSP頁面顯示亂碼如何解決
二、表單提交中文時出現亂碼如何解決
三、數據庫連接時出現亂碼如何解決


9. 頁面間對象傳遞的方法
request,session,application,cookie 等


10. 我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
text = new String( text.getBytes(“iso8859-1″),”GBK”);
首先以”iso8859-1″解碼爲byte數組,再用”GBK”重構字符串


11. 簡單介紹一下servlet
servlet容器:
負責處理客戶請求、把請求傳送給servlet並把結果返回給客戶。不同程序的容器實際實現可能有所變化,但容器與servlet之間的接口是由servletAPI定義好的,這個接口定義了servlet容器在servlet上要調用的方法及傳遞給servlet的對象類。

servlet的生命週期:
servlet容器創建servlet的一個實例
容器調用該實例的init()方法
如果容器對該servlet有請求,則調用此實例的service()方法
容器在銷燬本實例前調用它的destroy()方法
銷燬並標記該實例以供作爲垃圾收集
一旦請求了一個servlet,就沒有辦法阻止容器執行一個完整的生命週期。

容器在servlet首次被調用時創建它的一個實例,並保持該實例在內存中,讓它對所有的請求進行處理。容器可以決定在任何時候把這個實例從內存中移走。在典型的模型中,容器爲每個servlet創建一個單獨的實例,容器並不會每接到一個請求就創建一個新線程,而是使用一個線程池來動態的將線程分配給到來的請求,但是這從servlet的觀點來看,效果和爲每個請求創建一個新線程的效果相同。


12. BS與CS的聯繫與區別
C/S是Client/Server的縮寫。服務器通常採用高性能的PC、工作站或小型機,並採用大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端需要安裝專用的客戶端軟件。
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這種結構下,用戶界面完全通過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等信息、流向的變化, 更像交易中心。


13. JSP與SERVLET的區別
JSP先編譯成SERVLET然後再編譯成CLASS文件  
JSP—–SERVLET—–JAVA文件—CLASS
JSP主要做視圖層,SERVLET主要做控制層


14. JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現 它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。 
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面。


15. JSP的內置對象及方法
9大內置對象:
request,response,pagecontext,session,application,out,config,page,exception
request–HttpServletRequest的子類
response–HttpServletResponse的子類
session–HttpSession 的子類
pagecontext–PageContext的子類
application–ServletContext 的子類
out–JspWriter 的子類
config–ServletConfig 的子類 
page–Object 的子類
exception–Throwab 的子類


16. 四種會話跟蹤技術
會話跟蹤是爲了跟蹤用戶於service之間的多次交互. 
》cookie 也就是我們常見的在C盤/文件夾下有一個COOKIE目錄 
》session 比Cookie安全.不可見.但佔用srevice資源 
》url重寫.這是在用戶的IE禁止Cookie的時候採用的方法。因爲不管是Cookie還是 session 都要藉助

》隱藏域


17. <%…%>和<%!…%>的區別
<% … %> 用於在JSP頁面中嵌入Java腳本
<%! … %> 用於在JSP頁面中申明變量或方法,可以在該頁面中的<% … %>腳本中調用,聲明的變量相當於Servlet中的定義的成員變量。


18. 簡單說明下你對servlet的認識及其Servlet的基本架構、生命週期
HttpServlet類是一個抽象類,可以從該類派生出一個子類來實現一HttpServlet,接受來自Web站點的請求(該請求來自訪問該Web站點的客戶瀏覽器),並將處理後的響應結果發回Web站點(Web站點再將響應結果發送給客戶瀏覽器),在HttpServlet的子類中,必須至少重載下表中的其中一種方法。


方法名doGet
        如果Servlet支持Http GET請求,用於Http GET請求 。
方法名doPost
       如果Servlet支持Http POST請求,用於Http POST請求 

方法名doPut

如果Servlet支持Http PUT請求,用於Http PUT請求 
方法名doDelete
         如果Servlet支持Http DELETE請求,用於Http DELETE請求 
init和destroy
          如果需要管理Servlet生命週期內所持有資源,可以重載這兩個方法

通常,不重載service方法,對於上表中的每一種HTTP請求,service方法通過分派它們到相應的Handler線程(doXXX方法)來處理這些標準的HTTP請求。

同樣地,通常也不重載doOptions和doTrace方法,service方法通過分派它們到doTrace和doOptions來支持HTTP1.1 TRACE和OPTIONS。

Servlet通常運行在多線程的服務器中,因此,所編寫的Servlet代碼必須能夠處理並行請求和對數據資源的同步訪問。共享資源包括內存中的數據(例如:實例或類變量)和外部對象(例如:文件、數據庫連接或網絡連接)。

Protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException

從Service方法授並處理HTTP GET請求。GET方法允許客戶讀取來自Web服務器的信息,客戶通過傳遞一個帶URL的查詢字符串可以告訴服務器它需什麼信息。

重載支持GET請求的doGet方法還將自動支持HTTP HEAD請求,HEAD請求也是一個GET請求,它得到的返回響應中只有一個請求頭(header)字段,而沒有響應信息的內容。

如果重載方法,應該從該請求讀數據,在響應中設置整個headers,訪問PrintWriter或輸出流對象,最後寫響應數據。當設置headers時,應確保包含content type和encoding。如果使用PrintWriter對象返回響應,在存取PrintWriter對象之前必須設置content type。

Servlet引擎必須在寫響應數據之前寫headers,因爲在寫數據之後headers隨時都可能被刷新。


19. 簡單描述下數據連接池的工作機制是什麼?
數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被 使用,連接池都將一直保證至少擁有這麼多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超 過最大連接數量時,這些請求將被加入到等待隊列中。

數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素: 
1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;

2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,後面的數據庫連接請求將被加入到等待隊列中,這會影響之後的數據庫操作。

3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的數據庫連接。不過,這些大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重複使用或是空閒超時後被釋放。


20. JSP亂碼如何解決,給出三種以上的對應解決方案,並給出對應的程序案例;
》JSP頁面顯示亂碼
<%@ page contentType=”text/html; charset=gb2312″%>
》表單提交中文時出現亂碼
request.seCharacterEncoding(“gb2312″)對請求進行統一編碼
》數據庫連接出現亂碼
要涉及中文的地方全部是亂碼,解決辦法:在數據庫的數據庫URL中加上useUnicode=true&characterEncoding=GBK就OK了。
》通過過濾器完成
》在server.xml中的設置編碼格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章