一、xml有哪些解析技術?區別是什么?
答:有DOM,SAX,STAX等
DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現于DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming API for XML (StAX)
二、 struts 的5個主要類
ActionServlet是系統維護的,你不能操作,它主要是根據傳入的action路徑在ActionMapping中查找相應的類,并調用它。
Action是控制器,主要是從ActionForm中接收頁面傳進來的數據,然后進行邏輯處理。
ActionForm是用來接收頁面上表單中的數據。
ActionMapping是用來配置每個Action所對應的路徑
ActionForward是用來實現跳轉,在Action中最后一行語句通常是return mapping.forward()這里傳入的值就在ActionForward中設置
三、ArrayList和Vector的區別,HashMap和Hashtable的區別
就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
四、JDK1.5新特性
1,泛型(Generic) 2, for-Each循環 3,自動
裝包拆包 4,枚舉類型(Enums) 5,靜態導入(Static imports)
五、JDK1.6新特性
1,desktop類和systemtray類
2,使用JAXB2來實現對象與xml之間映射
3,理解STAX
4,使用compiler API
5,輕量級的HTTPServer API
6,插入式注解處理
7,用console開發控制臺程序
8,對腳本語言的支持:ruby、groovy、javascript
9,common Annotations
Struts、spring、hibernate 工作機制,為什么用!
六、hiberante工作機制
1. 讀取并解析配置文件
2. 讀取并解析映射信息,創建SessionFactory
3. 打開Sesssion
4. 創建事務Transation
5. 持久化操作
6. 提交事務
7. 關閉Session
8. 關閉SesstionFactory
為什么使用
1. 對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
2. Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。
4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。
5. 可擴展,卡發者可以根據需求定義查詢
struts1.2工作原理以及為什么使用
Struts的工作原理:
在web應用啟動時就會加載初始化ActionServlet,ActionServlet從
struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象
當ActionServlet接收到一個客戶請求時,將執行如下流程.
-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;
-(2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm 對象中;
-(3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功;
-(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的 Action實例不存在,就先創建這個實例,然后調用Action的execute()方法;
-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉發給 ActionForward對象指向的JSP組件;
-(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;
為什么要用:
1、整合jsp、servlet、javaBean 是Web開發更加正規化。
2、由一個ActionServlet 做全局控制器,對action做統一的控制.
3、ActionForm使取得form的值更加方便.
spring工作機制及為什么要用?
1.spring mvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理后,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。
為什么用:
AOP 讓開發人員可以創建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用 AOP 后,公共服務 (比如日志、持久性、事務等)就可以分解成方面并應用到域對象上,同時不會增加域對象的對象模型的復雜性。
IOC 允許創建一個可以構造對象的應用環境,然后向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用 其協作對象構造的。因此是由容器管理協作對象(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協作對象)。然后可以很容易地在需要時替換具有類似接口的協作對象.
七、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組件。
關于java public private protected friendly(缺省)作用域
public:類本身和任何包的任何類都訪問
private 只有類本身可以訪問,其他類想訪問可以通過該類的成員方法訪問如getter/setter
protected:保護的,這個和缺省的比較容易混淆,記住最主要區別是:protected可以在不同包的子類被訪問,而friendly不可以。
protected可以在類本身、同包的子類,不同包的子類,同包的非子類 被訪問
默認不寫的時候是public
八、關于PreparedStatement和Statement具體區別
1:
我們先從這兩個單詞進行初步的講解,Prepared(準備好的, 精制的),從這里可以知道PreparedStatement是預先編譯的語句,而Statement則不是預先編譯的,在DBMS中處理管理中Statement是要進行語法、語義的,而PreparedStatement則不要。
2:
PrepareStatement中執行的SQL語句中是可以帶參數的,而Statement則不可以。
比如:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00);
pstmt.setInt(2, 110592);
pstmt. executeUpdate();
3:
當處理批量SQL語句時,這個時候就可以體現PrepareStatement的優勢,由于采用Cache機制,則預先編譯的語句,就會放在Cache中,下次執行相同SQL語句時,則可以直接從Cache中取出來。
九、JSP的內置對象與作用
JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):
request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的回應
pageContext 網頁的屬性是在這里管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
十、jsp有哪些動作作用分別是什么
JSP共有以下6種基本動作 jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記
十一、JSP中動態INCLUDE與靜態INCLUDE的區別?
答:動態INCLUDE用jsp:include動作實現 它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數
靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面
十二、jsp的兩種跳轉方式分別是什么,有什么區別?
1、帶request參數的跳轉
request.setAttribute("param", "value");
request.getRequestDispatcher("test.jsp").forward(request, response);
在目的頁面可以獲取參數
String Value = request.getAttribute("param")==null?:(String)request.getAttribute("param");
2、不帶request參數的跳轉
response.sendredirect("test.jsp");
十三、forward和redirect的區別
forward是服務器內部重定向,程序收到請求后重新定向到另一個程序,客戶機并不知道;redirect則是服務器收到請求后發送一個狀態頭給客戶,客戶將再請求一次,這里多了兩次網絡通信的來往。當然forward也有缺點,就是forward的頁面的路徑如果是相對路徑就會有些問題了。 forward 會將 request state , bean 等等信息帶往下一個 jsp
redirect 是送到 client 端后再一次 request , 所以資料不被保留.
使用 forward 你就可以用 getAttribute() 來取的前一個 jsp 所放入的 bean 等等資料
1.從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容
再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪里來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所
以redirect等于客戶端向服務器端發出兩次request,同時也接受兩次response。
2.從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request里面的數據.
redirect:不能共享數據.
redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,
甚至是使用絕對URL重定向到其他站點的資源.
forward,方法只能在同一個Web應用程序內的資源之間轉發請求.
forward 是服務器內部的一種操作.
redirect 是服務器通知客戶端,讓客戶端重新發起請求.
所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬于forward還是redirect "
3.從運用地方來說
forward:一般用于用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等.
4.從效率來說
forward:高.
redirect:低.
十五、描述JSP和Servlet的區別、共同點、各自應用的范圍
JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.Servlet完全是JAVA程序代碼構成擅長于流程控制和事務處理而通過Servlet
來生成動態網頁;JSP由HTML代碼和JSP標簽構成,可以方便地編寫動態網頁
因此在實際應用中采用Servlet來控制業務流程,而采用JSP來生成動態網頁.在struts框架中,JSP位于MVC設計模式的視圖層,而Servlet位于控制層.
答案2:
JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側重于視圖,Servlet主要用于控制邏輯。
十六、列出Jsp中包含外部文件的2種方式,兩者有何區別。
1:<jsp:include page="b.jsp" />)
2: <%@ include file="b.jsp">
區別:
1:<jsp:include page="b.jsp" />(先執行,后包含)
此標簽表示法:能動態區別加進來的是動態頁面還是靜態頁面對于靜態頁面則直接將資源包含(僅取其文本)。
<%@ include file="b.jsp">此指令表示:靜態地包含頁面,不管其內容如何,
不過是靜態頁面還是動態頁面都首先將頁面的內容先加進來。
區別2:<jsp:include page="b.jsp" />可以分開寫成:<jsp:include page="b.jsp" >
<jsp:param name="參數名" value="參數值"/></jsp:include>這樣就可以傳遞參數。
十七、struts1和struts2區別:
特性
Struts 1
Struts 2
Action類
Struts 1要求Action類要擴展自一個抽象基類。Struts 1的一個共有的問題是面向抽象類編程而不是面向接口編程。
Struts 2的Action類實現了一個Action接口,連同其他接口一起實現可選擇和自定義的服務。Struts 2提供一個名叫ActionSupport的基類實現一般使用的接口。雖然,Action接口不是必須的。任何使用execute方法的POJO對象可以被當作Struts 2的Action對象使用。
程模型
Struts 1 Action類是單例類,因只有一個示例控制所有的請求。單例類策略造成了一定的限制且給開發帶來了額外的煩惱。Action資源必須是程安全或者同步的。
Struts 2 Action對象每一個請求都實例化對象,所以沒有程安全的問題。(實踐中,servlet容器生許多丟的對象對于每一個請求,多于一個的對象并不影響垃圾收集)
Servlet 依賴
Struts 1的Action類依賴于servlet API以HttpServletRequest和HttpServletResponse作參數傳給execute方法當Action被調用時。
Struts 2的Action不和容器有關。Servlet上下文被表現簡單的Maps,允許Action被獨立的測試。Struts 2的Action可以訪問最初的請求和相應,如果需要的話。然而,其他的架構元素少或者排除直接訪問HttpServletRequest或者HttpServletResponse的需要。
易測性
測試Struts 1的主要障礙是execute方法暴露了Servlet API。第三方的擴展,Struts測試用例,提供Struts 1的集合對象。
Struts 2的Action可以通過實例化Action測試,設置屬性,然后調用方法。依賴注入的支持也是測試變得更簡單。
接受輸入
Struts 1使用ActionForm對象捕獲輸入。象Action一樣,所有的ActionForm必須擴展基類。因其他的JavaBean不能作ActionForm使用,開發者經常創建多余的類捕獲輸入。DynaBeans可以被用來作替代ActionForm的類創建。但是開發者可以重新描述已經存在的JavaBean。
Struts 2 Action屬性作輸入屬性,排除第二個輸入對象的需要。輸入屬性可能有豐富的對象類型這些類型有他們自己的屬性。Action的屬性可以通過標簽庫訪問。Struts 2也支持ActionForm形式。豐富的對象類型,包含業務或者域對象,可以被當作輸入或者輸出對象使用。饃型驅動特性簡化標簽對POJO輸入對象的引用。
表達式語言
Struts 1整和JSTL,所以它使用JSTL的表達式語言。表達式語言有基本的圖形對象移動,但是相對很弱的集合和被索引的屬性支持。
Struts 2使用JSTL,但是框架也支持更大和更靈活的表達式,叫做“對象圖形符號語言”(OGNL)。
將值綁定要視圖上
Struts 1使用標準JSP機制來綁定對象到頁面上下文。
Struts 2使用“ValueStack”技術了標簽庫可以不用鏈接你的視圖到對象的表現類型訪問值。ValueStack策略允許重用視圖。
類型轉換
Struts 1的ActionForm屬性經常都是String的。Struts 1使用Commons-Beanutils類型轉換。轉換每一個類,不是每一個實例配置。
Struts 2使用OGNL類型轉換。框架包含轉換器基本的和共同的對象類型和原始類型。
驗證
Struts 1支持手動驗證憑借ActionForm的validate方法,或者通過擴展的公用驗證器。類可以有不同的驗證上下文未相同的類,但是不能不能包括驗證子對象。
Struts 2支持手動驗證憑借validate方法和XWork驗證框架。Xwork驗證框架支持一連串的驗證子屬性使用的驗證了屬性類的類型和嚴正上下文而定義。
Action執行的控制
Struts 1支持獨立的請求處理器對于每一個模型,但是所有在模型中的Action必須共享同一個生命周期。
Struts 2支持在每一個Action基礎上憑借攔截棧創建不同的生命周期。自定義棧可以被創建且使用不同的所需 的Action。
Jsp和Servlet中的請求轉發分別如何實現。
servlet的轉發方式有兩種:response.sendRedirect(response.encodeURL(相對路徑或絕對路徑));
request.getRequestDispatcher(相對路徑).forward();
jsp是servlet的擴展,除可用上面兩種之外,還可以用標簽:<jsp:forward page="相對路徑" />
、如何現實servlet的單線程模式?
<%@ page isThreadSafe="false"%>
應用服務器與WEB SERVER的區別?
1。應用服務器處理業務邏輯,web服務器則主要是讓客戶可以通過瀏覽器進行訪問。
2。應用服務器處理業務邏輯,web服務器是用于處理HTML文件的。web服務器通常比應用服務器簡單,如apache就是web服務器,Jboss就是EJB應用服務器。
應用服務器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、 Apache
應用服務器處理業務邏輯,web服務器則主要是讓客戶可以通過瀏覽器進行訪問。
應用服務器處理業務邏輯,web服務器是用于處理HTML文件的。web服務器通常比應用服務器簡單,如apache就是web服務器,Jboss就是EJB應用服務器
在B/S體系結構中,Web server是Application Server的前提和基礎。Web Server接受來自Browse(http)的request。為了擴展Web的應用(如與后臺DataBase打交道)早期如一些DLL可以來完成,后來各家公司有了Application server豐富了這方面的性能。使用戶跟后臺的數據庫有了更好的接口。如:WebSphere Weblogic等等
web服務器只提供web服務功能,比喻說解釋jsp,servlet等,而應用服務器提供整個企業級解決方案,比如說:應用服務器提供EJB包容器,可以提供用戶控制,事務等居多功能,web服務器是應用服務器的一個子集
Web服務器與(Java)應用服務器是平行的概念,二者不存在相互包容關系。好像J2EE體系結構就是這么畫的:客戶端《——》Web服務器《——》應用服務器《——》數據庫服務器
如果你訪問的網頁只有象HTML這種頁面的,用WEB服務器就夠了,但是如果是JSP,也就是含JAVA代碼的HTML,則就需要JAVA應用服務器了,因為只有JAVA應用服務器才能解析JSP里的JAVA代碼,并將解析結果以HTML的格式返回給你。