1、Tomcat的優化經驗
答:去掉對web.xml的監視,把JSP提前編輯成Servlet;有富余物理內存的情況下,加大Tomcat使用的JVM內存。
2、什么是Servlet?
答:可以從兩個方面去看Servlet:
a、API:有一個接口servlet,它是servlet規范中定義的用來處理客戶端請求的程序需要實現的頂級接口。
b、組件:服務器端用來處理客戶端請求的組件,需要在web.xml文件中進行配置。
3、Servlet的生命周期,並說出Servlet和CGI的區別?
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。
這個生存期由javax.servlet.servlet接口中的init、service、destroy方法表達。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現
根據請求的不同調用不同的do**()方法。結束服務,web容器調用servlet的destroy()方法。
區別:
Servlet處於服務器進程中,它通過多線程運行service()方法,一個實例可以服務於多個請求,並且實例一般不會被銷毀;而
CGI對每個請求都產生一個新的進程,服務完成后就銷毀,所有效率低於Servlet。
4、Servlet的基本架構
答:
public class ServletName extends HttpServlet { //初始化方法 public void init() { …… } //GET請求處理的方法 public void doGet(HttpServletRequest request,HttpServletResponse response) { …… } //POST請求處理的方法 public void doPost(HttpServletRequest request,HttpServletResponse response) { …… } //結束服務的方法 public void destroy() { …… } }
5、Servlet API中forware()和redirect()的區別?
答:
a、瀏覽器顯示
重定向會改變URL地址,請求轉發不會改變URL地址。
b、資源共享
重定向不可以資源共享,請求轉發可以。
c、功能
重定向可以用URL絕對路徑訪問其他Web服務器的資源,而請求轉發只能在一個Web應用程序內進行資源轉發,即服務器內部的一種操作。
d、效率
重定向效率低,相當於再一次請求;請求轉發效率相對較高,跳轉僅發生在服務器端。
6、什么情況下調用doGet()和doPost()?
答:默認情況是調用doGet()方法,JSP頁面中的Form表單的method屬性設置為post的時候,調用的為doPost()方法;為get的時候,調用deGet()方法。
7、request.getParameter()和request.getAttribute()的區別?
答:
a、request.getParameter()獲取的類型是String;
request.getAttribute()獲取的類型是Object
b、request.getPrameter()獲取的是POST/GET傳遞的參數值和URL中的參數;
request.getAttribute()獲取的是對象容器中的數據值/對象
c、request.setAttribute()和request.getAttribute()可以發送、接收對象;
request.getParamter()只能接收字符串,官方不開放request.setParamter()(也就是沒有這個方法)
setAttribute()和getAttribute()的傳參原理:
setAttribute()是應用服務器把這個對象放在該頁面所對應的一塊內存中去,當你的頁面服務器重定向到另外一個頁面時,
應用服務器會把這塊內存拷貝到另一個頁面所對應的那塊內存中。這個就可以通過getAttribute()獲取到相應的參數值或者對象。
8、JSP有哪些內置對象?作用分別是什么?
答:JSP一共有9個內置對象:
request:負責得到客戶端請求的信息,對應類型:javax.servlet.http.HttpServletRequest
response:負責向客戶端發出響應,對應類型:javax.servlet.http.HttpServletResponse
session:負責保存同一客戶端一次會話過程中的一些信息,對應類型:javax.servlet.http.httpsession
out:負責管理對客戶端的輸出,對應類型:javax.serlvet.jsp.jspwriter
application:表示整個應用環境的信息,對應類型:javax.servlet.servletcontext
config:表示ServletConfig,對應類型:javax.servlet.servletconfig
exception:表示頁面中發生的異常,可以通過它獲得頁面異常信息,對應類型:java.lang.exception
pagecontext:表示這個JSP頁面上下文,對應類型:javax.servlet.jsp.pagecontext
page:表示當前JSP頁面本身。
9、JSP有哪些動作?作用分別是什么?
答:JSP一共有以下6中基本動作
JSP:include (當頁面被請求的時候引入一個文件)
JSP:forward (將請求轉到另一個頁面)
JSP:useBean (獲得JavaBean的一個實例)
JSP:setProperty (設置JavaBean的屬性)
JSP:getProperty (獲得JavaBean的屬性)
JSP:plugin (根據瀏覽器類型為Java插件生成object或者embed兩種標記)
10、JSP常用指令有哪些?
答:page、include、taglib
a、page指令:定義頁面的一些屬性,常用屬性:
contentType="text/html;charset=utf-8"; 向瀏覽器端輸出數據的編碼
pageEncoding="utf-8"; JSP編譯成java文件時所用的編碼
session="true" 是否自動創建session
b、include指令:引入一個靜態的JSP頁面
c、taglib指令:引入一個標簽庫
11、JSP中動態include和靜態include的區別?
答 : a、靜態include:語法:<%@ include file="文件名" %>,相當於復制,編輯時將對應的文件包含進來,當內容變化時,不會再一次對其編譯,不易維護。
b、動態include:語法:<jsp:include page="文件名">,能夠自動檢查被包含文件,當客戶端對JSP文件進行請求時,會重新將對應的文件包含進來,進行實時的更新。
12、頁面間對象傳遞的方法?
答:request、session、application、cookie等。
13、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么?
答:JSP是Servlet的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是"類Servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在java文件中,並且完全從表示層中的HTML里分離開來。而JSP的情況是java和HTML可以組合成一個擴展名為.jsp的文件。JSP偏重於視圖,Servlet偏重於業務邏輯。
14、 詳細描述MVC。
答:基於java的web應用系統采用MVC設計模型,即用Model(模型)、View(視圖)和Controller(控制)分離設計,這是目前web應用服務系統的主流設置方向。
Model:處理業務邏輯的模塊。
View:負責頁面顯示,顯示Model的處理結果給用戶,主要實現數據到頁面的轉換過程。
Controller:負責每個請求的分發,把Form數據傳遞給Model進行處理,處理完成后,把處理結果返回給相應的View顯示給用戶。
15、MVC各個部分都有哪些技術實現?如何實現?
答:MVC是Model-View-Controller的簡寫。Model代表應用的業務邏輯(通過JavaBean、EJB組件實現),View是引用的表示面(由JSP產生),Controller是提供應用的處理過程機制
(一般是一個Servelt),通過這種設計模型把應用邏輯、處理過程和顯示邏輯分成不同的組件來實現。這些組件可以交互和重用。
16、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso-8859-1等,如何輸出一個某種編碼的字符串?
答:下面這個例子是將iso-8859-1轉換成utf-8編碼方式。
public String Translate(String str) { String s=""; try{ s=new String(str.getBytes("iso-8859-1"),"UTF-8"); s=str.trim(); }catch(Exception e){ System.err.println(e.getMessage()); }
return s; }
17、get和post的區別?
a、get是用來從服務器上獲取數據,而post是用來向服務器傳遞數據;
b、get將表單中數據按照variable=value的形式,添加到action所指向的URL后面,並且兩者用"?"連接,變量之間用"&"連接;
而post是將表單中的數據放在form的數據體中,按照變量與值對應的方式,傳遞到action所指定的URL。
c、get是不安全的,因為在傳輸過程中,數據是被放在請求的URL中;而post的所有操作對用戶來說都是不可見的。
d、get傳輸的數據量小,這主要應為受url長度限制;而post可以傳輸大量的數據,所有上傳文件只能用post提交。
e、get限制form表單的數據集必須為ASCII字符;而post支持整個IS01 0646字符集。
f、get是form表單的默認方法。
18、javascript常用的方面?
答:數據校驗、頁面特殊效果等。
19、常用的web容器和開發工具?
答:容器:Tomcat、Weblogic
工具:Eclipse、Jbuilder
20、JSP的四種范圍?
答:a、page是代表一個頁面相關的對象和屬性。一個頁面由一個編譯好的java servlet類(可以帶有include指令,但不可以帶有include動作)表示。這既包括servlet又包括編譯成servlet的jsp頁面。
b、request是代表與web客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個web組件(由於forware指令和include動作的關系)
c、session是代表與用於某個web客戶機的一個用戶體驗相關的對象和屬性。一個web回話也可以經常跨域多個客戶機請求。
d、application是代表與整個web應用程序相關的對象和屬性。這實質上是跨域整個web應用程序,包括多個頁面、請求和回話的一個全局作用域。
21、應用服務器有哪些?
答:BEA Weblogic Server、IBM WebSphere Application Server、Oracle9i Application Server、JBoss、Tomcat。
22、幾種回話跟蹤技術?
答:cookie、url重寫、hidden表單隱藏域、session
23、Servlet執行時一般實現哪幾個方法?
答:
public void init(ServletConfig config){} public ServletConfig getServeltConfig(){} public String ServletInfo(){} public void service(HttpServletRequest request,HttpServletResponse response){}
public void destroy(){}
24、簡述HttpSession的作用、使用方法,可用代碼說明。
答:HttpSession中可以跟蹤並存儲用戶信息,把值設置到屬性中,有兩個方法:setAttribute("變量/對象","變量/對象");getAttribute("變量/對象");例如:在一個方法中用session.setAttribute("username",username);在session中設置一個屬性名為username的變量或者對象,然后可以在同一個session范圍內使用session.getAttribute("username"); 來得到username屬性或者對象。
25、J2EE是什么?
答:J2EE現在叫做Java EE:是(Java platform,Enterprice Edition 企業版)的簡稱。企業版本開發和部署服務器應用程序。
J2EE是Sun公司提出的多層(multi-tiered)、分布式(distributed)、基於組件(component-base)的企業級應用模型(Enterprice Application Model)。
在這樣一個應用系統中,可按照功能划分不同的組件,這些組件又可在不同的計算機上,並且處理不同的層次(tier)中。所屬層次包括客戶層(client tier)、web層和組件、business層和組件、企業信息系統(EIS)層。
26、J2EE是技術、平台還是框架?
答:J2EE本身是一個標准,一個為企業分布式應用的開發提供的標准平台。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
27、cookie和session的作用、區別、應用范圍。
答:a、cookie數據保存在客戶端,session數據保存在服務端。
b、cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,相當重要的數據,應該使用session保存到服務端。
c、session會在一定時間內保持在服務器上,但是會占用內存資源,當訪問的用戶過多,會加重服務器的負載,考慮到減輕服務器的壓力,可以將不重要的數據放在cookie中持久的保存。
d、單個cookie保存的數據不能超過4k,很多瀏覽器都限制站點最多保存20個cookie。
28、JSTL是什么?優點有哪些?
答:JSTL(JSP Standard Tag Library,JSP標准標簽庫)是一個不斷完善的開放源代碼的JSP標簽庫,由四個定制標記庫(core、format、xml、sql)和一對通用標記庫驗證器(ScriptFreeTLV和PermittedTaglibsTLV)組成。優點有:
a、在應用程序服務器之間提供了一致的接口,最大程度的提高了web應用在各應用服務器之間的移植。
b、簡化了JSP和web應用程序的開發。
c、以一種統一的方式減少了JSP中scriptlet代碼數據,可以達到沒有任何scriptlet代碼的代碼。在我們公司的項目中是不允許任何scriptlet出現在JSP中。
d、允許JSP設計工具與web應用程序開發的進一步集成。相信不久就會有支持JSTL的IDE開發工具出現。
29、J2EE的優越性主要表現在那些方面?
答:a、J2EE基於Java技術,與平台無關。
b、J2EE提供了一個優秀的企業級應用程序框架,對快速高質量的開發系統打下了基礎。
c、J2EE提供相當專業的通用軟件服務。
d、J2EE擁有開放標准,許多大型公司實現了該規范支持的應用服務器。如:BEA、IBM、Oracle等。
30、JSP頁面是如何被執行的?JSP執行效率比Servlet低嗎?
答:當客戶端向一個JSP頁面發出請求時,Web Container將JSP轉換成Servlet的源代碼(只是第一次請求時),然后編譯轉化后的Servlet並加載到內存中執行,執行的結果Response到客戶端。
JSP只在第一次執行的時候會轉化為Servlet,以后的每次執行Web容器都是直接執行編譯后的Servlet,所有JSP和Servlet只有第一次執行的時候不一樣,JSP慢一點,以后的執行都是相同的。
31、JSP如何處理運行時異常(run-time)exception?
答:可是使用頁面的errorPaga屬性捕捉沒有處理的運行時異常,然后自動轉向到一個錯誤處理頁面,代碼如下:
<%@page errorPage="錯誤頁面URL"%>
如果在頁面請求時出現運行時異常時,以上代碼會將代碼轉向到錯誤頁面,在錯誤頁面里面,可以通過以下代碼定義這個頁面是錯誤處理頁面:
<%@page isErrorPage="true"%>
這樣描述錯誤信息的Throwable對象就可以在錯誤頁面里面訪問到。
32、如果JSP表單元素的值為空,如何避免null出現在頁面上?
答:可以寫一個簡單的函數對空值進行處理,判斷值是否為空,如果為空就返回空字符串。實例代碼如下:
<%! String blanknull(String e) { return (e==null)?"":s; } %> <% <input type="text" name="username" value="<%=blanknull(username)%>" %>
33、如何避免JSP頁面自動生成session對象?為什么要這么做?
答:在默認情況下,在對一個JSP頁面發出請求時,如果session還沒有建立,那么JSP頁面會自動為請求創建一個session對象,但是session是比較消耗資源的,如果沒有必要保持和使用session,就不應該創建session,例如一些只用來宣傳產品的網頁,往往沒必要使用session來保存信息,可以在JSP中使用page指令進行設置,避免JSP頁面為每個請求都自動創建session。實例代碼如下:
<%@page session="false"%>
34、在servlet和JSP之間能共享session對象嗎?
答:Yes
HttpSession session=request.getsession(false); session.getAttribute"變量名"); //獲取保存在session容器中的變量
35、使用JSP連接數據庫連接緩沖池的最好的方法是什么?
答:a、使用JDBC2.0中帶有此服務的Driver
b、使用提供此服務的application server
36、在JSP中如何寫文本文件?
答:使用PrintWriter對象:
<%@page improt="java.io.*"%> <% String str="HelloWorld!"; File file=new File("1.txt"); file.createNewFile(); try{ FileOutPutStream fops=new FileOutPutStream(file); PrintWriter pw=new PrintWriter(fops); pw.println(str); pw.flush(); pw.close(); } %>
37、JSP的缺點?
答:a、大多數的Servlet引擎不支持connection pooling。
b、Servlet引擎沒有標准。
c、JSP與其他腳本語言的交互。
d、不易對Java程序進行調試。
38、在JSP頁面中如何刪除一個cookie?
答:
<% Cookie cookie=new Cookie("cookie名","cookie值"); cookie.setMaxAge(0); cookie.setPath("/"); response.addCookie(cookie); %>
39、如何實現servlet的單線程模式?
答:在JSP中使用page指令進行設置,具體代碼如下:
<%@page isThreadSafe="false"%>
40、HttpServlet類中主要方法有哪些?
41、XML文檔定義有幾種形式?他們之間有何本質區別?解析XML文檔有哪幾種方式?
答:a、兩種形式:DTD、schema
b、本質區別:schema本身是xml的,可以被XML解析器解析(這也是從dtd上發展schema的根本目的。)
c、有DOM、SAX、STAX等。
DOM:處理大型文件時性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前就把整個文檔裝入內存,適合對XML的隨機訪問;
SAX:是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載這個XML文件。當遇到向文件開頭、文件結束或者標簽開頭、標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問。
STAX:Streaming API for XML
42、你在項目中用到了XML技術的哪些方面?如何實現的?
答:用到了數據存儲、信息配置兩方面。
在做數據交換平台時,將不能數據源的數據組裝成XML文件,然后將XML文件壓縮打包加密后通過網絡傳送給接受者,接收解密與解壓縮后再同XML文件中還原相關信息進行處理。
在做軟件配置時,利用XML可以和方便的進行,軟件的各種配置參數都存儲在XML文件中。
43、EL表達式的功能,為什么要用EL表達式?(Expression Language)
答:
功能:
a、從四個域對象中取出數據數據顯示。
b、取出請求參數數據顯示。
原因:
在頁面中用jsp腳本和jsp表達式來獲取數據顯示比較麻煩
a、需要判斷
b、可能需要強轉
44、JSTL的功能,為什么要用JSTL?(JavaServer Pages Standard Tag Library)
答:
功能:主要用於基本輸入輸出、流程控制、循環、XML文件剖析、數據庫查詢及國際化和文字格式標准化的應用等。
原因:在jsp頁面做條件判斷或者循環操作並輸出時,比較費力。
45、為什么要使用自定義標簽?MyTag如何實現?
答:
原因:
a、不想在jsp中編寫java代碼
b、JSTL標簽庫不能滿足實際項目的需求
實現的流程:
a、編寫標簽處理器類(SimpleTagSupport的實現類)
重寫doTag()
b、編寫標簽庫文件(WEB-INF/xxx.tld)
整個文件的定義:<short-name> uri
標簽的定義:<tag>
c、在jsp頁面中使用標簽:
導入標簽庫(xxx.tld)
使用標簽
46、說說自動登錄功能的編碼實現?
答:a、登錄功能是用session實現的,就是向session對象中保存當前用戶的對象。
b、自動功能是用cookie實現的,就是登錄時將用戶的信息保存為持久cookie。
c、下次訪問時,讀取請求中如果有用戶信息的cookie就可以自動登錄。
47、如何防止表單重復提交?
答:使用session技術:
a、在regist.jsp頁面中生成一個為一個隨機值,將其保存到session中,同時將其保存為表單的隱藏域的值。
b、在處理注冊的請求時,獲取session中的值,獲取請求參數的值,比較兩者是否相同,如果相同說明不是重復提交,請求通過同時刪除session中保存的的值,如果不相同則是重復提交,不能通過。
48、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):刪除請求中的一個屬性
49、Tomcat根目錄下有哪些文件?
答:
a、config:配置文件存放路徑
b、webapps:項目部署的目錄
c、bin Tomcat運行需要的腳本與jar的目錄
d、lib:運行項目時所需要的jar的目錄
e、word:部署項目的緩存目錄
f、temp:臨時文件的存放目錄
g、logs:記錄日志的目錄
50、什么是Tomcat,怎樣啟動停止,配置文件,日志文件的存儲?
答:Tomcat是一種web服務器,java編寫的web項目可以部署在上面,用戶在客戶端請求時,都是將請求發到Tomcat上,Tomcat在將請求發到對應的項目上。
啟動Tomcat:
在windows下:進入bin目錄,雙擊startup.bat
在Linux下:cd進入bin目錄,sh startup.sh
在開發工具Eclipse下:右鍵選擇debug server或者run server
停止Tomcat:
在windows下:進入bin目錄,雙擊shutdown.bat
在Linux下:cd進入bin目錄,sh shutdown.sh
在開發工具Eclipse下:右鍵選擇stop server
配置文件在Tomcat的config目錄下
日志文件在Tomcat的logs目錄下
51、實例化servlet有幾種方式?
答:有兩種方式
a、第一次請求時,實例化servlet對象
b、在web.xml文件中,在servlet標簽中添加loadon-startup標簽,tomcat啟動時就會實例化servlet對象。
52、JSP亂碼如何解決?
答:a、JSP頁面亂碼
<%@page contentType="text/html;charset=utf-8" %>
b、表單提交時出現亂碼
request.setCharacterEncoding("utf-8");
c、數據庫出現亂碼
jdbc:mysql://localhost:3306:/user?useSSL=false&useUnicode=true&characterEncoding=utf-8;
其實我一般的處理的方法就是配置一個過濾器對每個JSP頁面進行字符集處理。
53、session和application的區別?
答:a、兩者的作用范圍不同
session是用戶級別的,application是web應用程序級別的,是一個全局作用域。
一個用戶一個session,每個用戶的session不同,用戶所訪問的網站多個頁面共享同一個session。
一個web應用程序一個application對象,每個web應用程序的application對象不同,但是一個web應用程序的多個用戶之間共享一個application。
b、生命周期不同
session:用戶首次在網站中發出請求創建session,用戶注銷、離開網站或者關閉瀏覽器消亡。
application:啟動web服務器創建,關閉web服務器銷毀。
54、在Eclipse中調試時,怎樣查看一個變量的值?
答:在要查看的變量前先設置斷點,然后選中變量,右鍵選擇debug as →Java Application,打開debug視圖,這時在Variables窗口中可以看到變量當前的值。
如果是局部變量,也可以在局部變量窗口中查看。要知道一個方法被調用的方法調用鏈,可以在方法棧中查看。
55、你們公司使用的代碼配置管理工具是什么?
答:除了說以前使用的CVS,現在新項目使用SVN了,還簡要說一下使用的過程,如果有可能,還說說倉庫的概念和如何使用鎖之類的細節。
56、你們項目總金額多少,多少人開發,總共花了多少個月?
答:像巴巴運動網這種規模的項目,可以說是4、5個人開發了四五個月,費用則是四五十萬。按每人每月兩萬收入去計算就差不多了。
57、什么是重量級?什么是輕量級?
答:輕量級是指它的創建和銷毀不需要消耗太多的資源,意味着可以在程序中經常創建和銷毀session對象。
重量級意味着不能隨意的創建和銷毀它的實例,會占用太多的資源。
58、如何從form表單中獲取checkbox的值?
答:可以在頁面將checkbox的name屬性設置相同,value屬性取每個條目的id,在后台使用request.getParametervalues("name");獲取一組值。
59、過濾器有哪些作用?
答:a、可以驗證客戶是否來自可信的網絡
b、可以對客戶提交的數據進行重寫編碼
c、可以從系統里獲得配置的信息
d、可以過濾掉客戶某些不應該出現的詞匯
e、驗證客戶是否登錄
f、驗證客戶的瀏覽器是否支持當前的應用
g、可以記錄系統的日志
60、過濾器的用法?(對客戶端的請求統一編碼和對客戶端進行驗證)
答:實現Filter接口,同時重寫Filter接口的三個方法:
init(FilterConfig config) 用於獲取FilterConfig對象
doFilter(ServletRequest request,ServeltResponse response,FilterChain chain) 進行過濾處理一些業務
destroy() 銷毀Filter
61、C/S與B/S的區別?
答:有如下8個方面的不同:
a、硬件環境的不同
C/S:一般建立在專用的網絡上,小范圍里的網絡環境,局域網之間再通過專門服務器提供連接和數據交換服務。
B/S:建立在廣域網之上的,不必是專門的網絡硬件環境,有比C/S更強的適應范圍,一般只要有操作系統和瀏覽器就行。
b、對安全要求不同
C/S:一般面向相對固定的用戶群,對信息安全的控制能力很強。一般高度機密的信息系統采用C/S結構適宜。
B/S:建立在廣域網之上,對安全的控制能力相對弱,可能面向不可知的用戶。
c、對程序架構不同
C/S:程序可以更加注重流程,可以對權限多層次校驗,對系統運行速度可以較少考慮。
B/S:對安全以及訪問速度的多重的考慮,建立在需要更加優化的基礎之上。
d、軟件重用不同
C/S:程序可以不可避免的整體性考慮,構件的重用性不如在B/S要求下的構件的重用性好.
B/S:對的多重結構,要求構件相對獨立的功能。
e、系統維護不同
C/S:程序由於整體性,必須整體考察,處理出現的問題以及系統升級。
B/S:構件組成,方面構件個別的更換,實現系統的無縫升級。
f、處理問題不同
C/S:程序可以處理用戶面固定,並且在相同區域,安全要求高需求,與操作系統相關。
B/S:建立在廣域網上,面向不同的用戶群,分散地域,這是C/S無法作到的。
g、用戶接口不同
C/S:多是建立的Window平台上,表現方法有限,對程序員普遍要求較高。
B/S:建立在瀏覽器上,有更加豐富和生動的表現方式與用戶交流;並且大部分難度減低,減低開發成本。
h、信息流不同
C/S:程序一般是典型的中央集權的機械式處理,交互性相對低。
B/S:信息流向可變化,B-B B-C B-G等信息、流向的變化,更像交易中心。
62、什么是web容器?
答:給處於其中的應用程序組件(JSP、Servlet)提供一個環境,是JSP、Servlet直接跟容器中的變量交互,不必關注其他系統問題。
主要有web服務器來實現。例如:tomcat、weblogic、sphere、JBoss等。該容器提供的接口嚴格遵守J2EE規范中的web application標准。
我們把遵守以上標准的web服務器叫做J2EE的web容器。
63、什么是EJB容器?
答:Enterprice Java Bean容器。它提供給運行在其中的組件EJB各種管理功能。只要滿足J2EE規范的EJB放入該容器,馬上就會被容器
進行高效率的管理。並且可以通過現成的接口來獲得系統級別的服務。例如:郵件服務、事務管理……
64、開發中都用到了哪些設計模式?用在什么場合?
答:每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次的使用
哪些已有的解決方案,無需再重復相同的工作。主要用到了MVC設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。
65、說說你所熟悉的或聽說過的J2EE中的幾種常用模式?及對設計模式的一些看法。
答:
Session Facade Pattern:使用SessionBean訪問EntityBean。
Message Facade Pattern:實現異步調用
EJB Command Pattern:使用Command.JavaBeans取代SessionBean,顯示輕量級訪問。
Data Transfer Object Factory:通過DTO Factory簡化EntityBean數據提供特性
Generic Attribute Access:通過AttributeAccess接口簡化EntityBean數據提供特性
Business Interface:通過遠程(本地)接口和Bean類實現相同接口規范業務邏輯一致性
EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越復雜,項目隊伍余越龐大,則越能體現良好設計的重要性。
66、J2EE常用的設計模式?說明工廠模式。
答:Java中一共有23中設計模式:
Factory(工廠模式)、Builder(建造模式)、Factory Method(工廠方法模式)、ProtoType(原始模型模式)、Singleton(單例模式)、
Facade(門面模式)、Adapter(適配器模式)、Bridge(橋梁模式)、Composite(合成模式)、Decorator(裝飾模式)、
FlyWeight(享元模式)、Proxy(代理模式)、Command(命令模式)、Interpreter(解釋器模式)、Visitor(訪問者模式)、
Iterator(迭代子模式)、Mediator(調停者模式)、Memento(備忘錄模式)、Observer(觀察者模式)、State(狀態模式)、
Strategy(策略模式)、Template Method(模板方法模式)、Chain Of Responsibility(責任鏈模式)、
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某個類的實例,通常一組類中有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然后定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例后,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
67、EJB2.0有哪些內容?分別用在什么場合?EJB2.0和EJB2.1的區別?
答:規范內容包括Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這里面,EJB容器是EJB之所有能夠運行的核心。
EJB容器管理着EJB的創建,撤消,激活,去活,與數據庫的連接等等重要的核心工作。
68、EJB與JAVA BEAN的區別?
答:Java Bean 是可復用的組件,對Java Bean並沒有嚴格的規范,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,
由於Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現
Serializable接口用於實現Bean的持久性。Java Bean實際上相當於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。
Enterprise Java Bean 相當於DCOM,即分布式組件。它是基於Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪
(跨進程、跨計算機)。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,
而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。
69、EJB的基本架構
//Remote Interface接口的代碼 package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Add extends EJBObject { //some method declare } //Home Interface接口的代碼 package Beans; import java.rmi.RemoteException; import jaax.ejb.CreateException; import javax.ejb.EJBHome; public interface AddHome extends EJBHome { //some method declare } //EJB類的代碼 package Beans; import java.rmi.RemoteException; import javax.ejb.SessionBean; import javx.ejb.SessionContext; public class AddBean Implements SessionBean { //some method declare }
70、存儲過程和函數的區別
答:存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或者其他對象的任務,用戶可以調用存儲過程,而函數通常是數據庫
已定義的方法,它接受參數並返回某種類型的值並且不涉及特定用戶表。
71、什么是事務?
答:事務時作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為ACID(原子性、一致性、隔離性和持久性)屬性,
只有這樣才能成為一個事務:
原子性:事務必須是原子工作單元,對於其數據修改,要么全都執行,要么全都不執行。
一致性:事務在完成時,必須使所有的數據保持一致的狀態。在相關數據庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如B樹索引或雙向鏈表)都必須是正確的。
隔離性:由並發事務所做的修改必須與任何其他並發事務所做的修改隔離。事務查看數據時數據所處的狀態,要么是另一並發事務修改它之前
的狀態,要么是另一並發事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,並且重播
一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。
持久性:事務完成后,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
72、觸發器分為事前觸發和事后觸發,兩種觸發有什么區別?語句級觸發和行級觸發有什么區別?
答:事前觸發運行於觸發事件發生之前,而事后觸發運行於觸發事件發生之后。通常事前觸發器可以獲取事件之前和新的字段值。
語句級觸發可以在語句執行前或后執行,而行級觸發在觸發器所影響的每一行觸發一次。
73、EJB容器提供的服務
答:主要提供聲明周期管理、代碼產生、持續性管理、安全、事務管理、鎖和並發行管理等服務。
74、EJB的三個角色和三個對象
答:角色:EJB角色主要包括Bean開發者、應用組裝者、部署者、系統管理員、EJB容器提供者、EJB服務器提供者。
對象:Remote(Local)接口、Home(LocalHome)接口、Bean類
75、EJB的幾種類型?
答:會話(Session) Bean,實體(Entity)Bean、消息驅動的(Message Driven)Bean
會話Bean又可分為有狀態(Stateful)和無狀態(Stateless)
實體Bean可分為Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種
76、Bean實例的生命周期
答:對於Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩沖池管理,而對於Entity Bean和
Stateful Session Bean存在Cache管理,通常包含創建實例,設置上下文、創建EJB Object(create)、業務方法調用、
remove等過程,對於存在緩沖池管理的Bean,在create之后實例並不從內存清除,而是采用緩沖池機制不斷重用實例;
而對於存在Cache管理的Bean,則通過激活或去激活機制保持Bean的狀態並限制內存中實例數量。
77、激活機制
答:以Stateful Session Bean為例:其Cache大小決定了內存中可以同時存在的Bean實例的數量,根據MRU或NRU算法,
實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,如果對應的EJB Object發現自己
沒有捆綁對應的Bean實例,則從其去激活Bean存儲中(通過序列化機制存儲實例)回復(激活)此實例。狀態變遷前會
調用對應的EJB Active 和EJB Passivate方法。
78、remote接口和home接口的作用
答:remote接口中定義了業務方法,用於EJB用戶調用業務方法。
home是EJB工廠用於創建、移除和查找EJB實例
79、客服端調用EJB對象的幾個基本步驟
答:a、設置JNDI服務工廠以及JNDI服務地址系統屬性
b、查找home接口
c、從home接口調用create方法創建remote接口
d、通過remote接口調用其業務方法