1 什么是J2EE?它和普通的Java有什么不同?
答:J2EE全稱為Java2 Platform, Enterprise Edition。
“J2EE平臺(tái)本質(zhì)上是一個(gè)分布式的服務(wù)器應(yīng)用程序設(shè)計(jì)環(huán)境——一個(gè)Java環(huán)境,它提供了:
·宿主應(yīng)用的一個(gè)運(yùn)行基礎(chǔ)框架環(huán)境。
·一套用來(lái)創(chuàng)建應(yīng)用的Java擴(kuò)展API。”(引自《J2EE服務(wù)器端高級(jí)編程》)
2 J2EE好學(xué)嗎?
答:J2EE是很多技術(shù)的集合體,并且還在成長(zhǎng)中。
你會(huì)遇到很多專有名詞:比如(X)HTML,Servlet/JSP,JDBC,JMS,JNDI,EJB,XML,Web Service……。
尤其是XML和Web Service正在快速成長(zhǎng)。幸運(yùn)的是,你不需要等到學(xué)會(huì)所有技術(shù)后再開(kāi)始編程。
大體上J2EE可以分成3個(gè)主要應(yīng)用:Servlet/JSP,EJB,XML/Web Service 和一些支撐技術(shù)例如JDBC和JNDI。
你可以一個(gè)一個(gè)的學(xué)。
3 J2EE有什么用?
答:用來(lái)建設(shè)大型的分布式企業(yè)級(jí)應(yīng)用程序。或者用更時(shí)髦的名詞說(shuō)就是“電子商務(wù)”應(yīng)用程序。
這些企業(yè)可能大到擁有中心數(shù)據(jù)庫(kù)服務(wù)器,Web服務(wù)器集群和遍布全國(guó)的辦公終端,也可能小到只不過(guò)想做一個(gè)網(wǎng)站。
4 學(xué)J2EE有前途嗎?
答:在這一市場(chǎng)目前只有一種技術(shù)可以和J2EE競(jìng)爭(zhēng),那就是Microsoft的.NET。
相對(duì)來(lái)說(shuō).NET要“新”一些而J2EE要“老”一些。
但是.NET只能用于Windows平臺(tái)(Microsoft聲稱要開(kāi)發(fā)C#在Linux上的虛擬機(jī)但是尚未兌現(xiàn)該諾言),
考慮到Linux的發(fā)展勢(shì)頭,你可以相信.NET不會(huì)一統(tǒng)天下。
5 據(jù)說(shuō)J2EE的性能不如.NET好,是真的嗎?
答:在Sun公司提供的樣例程序Pet Store上,Microsoft聲稱不如相同的.NET程序好。
而Sun公司反駁說(shuō)這一程序不能真正體現(xiàn)J2EE的性能,并且指責(zé)Microsoft在數(shù)據(jù)庫(kù)上做了優(yōu)化。
作者沒(méi)有學(xué)習(xí)過(guò).NET因而不能妄下斷言。
無(wú)論如何,大型分布式程序中的性能瓶頸通常首先來(lái)自于錯(cuò)誤的設(shè)計(jì)。
6 聽(tīng)你說(shuō)了這么多,我想學(xué)著玩玩。
答:除非你想靠它當(dāng)飯吃或者作為技術(shù)儲(chǔ)備,否則請(qǐng)不要浪費(fèi)你的時(shí)間。
Flash要好玩得多。計(jì)算機(jī)游戲就更加好玩了。
7 學(xué)習(xí)J2EE該怎么開(kāi)始?
答:首先,下載一個(gè)J2EE服務(wù)器。其次,去java.sun.com下載J2EE的API。第三,找一本好的參考書(shū)。最后,找一個(gè)順手的IDE。
J2EE服務(wù)器。你可以用Sun的J2EE SDK(免費(fèi)),或者Weblogic(性能最好,但是太大,而且作者不推薦盜版行為),或者JBoss(免費(fèi),就是文檔太少),或者JRun(開(kāi)發(fā)版免費(fèi),作者用這個(gè))。參考書(shū)作者感覺(jué)Wrox的《J2EE服務(wù)器端高級(jí)編程》不錯(cuò),但是太老(作者手頭的是2001年中文版)。你還需要去下載一些最新的技術(shù)資料(當(dāng)然肯定是英文的)。
IDE如果你的機(jī)器配置夠好(內(nèi)存至少512M以上,256M或以下請(qǐng)勿考慮),可以用IBM的WSAD,不然就繼續(xù)用Eclipse或者其他。
你也可以經(jīng)常去水木清華的Java版逛逛,但是在發(fā)貼前先看看精華區(qū)里有沒(méi)有你要的答案。
8 我下了一個(gè)J2EE服務(wù)器但是不會(huì)配置。
答:請(qǐng)認(rèn)真閱讀隨機(jī)指導(dǎo)文檔,不同的服務(wù)器的配置都不一樣,作者愛(ài)莫能助。
9 我發(fā)現(xiàn)你沒(méi)有提到Tomcat。
答:Tomcat只是一個(gè)Web服務(wù)器,更準(zhǔn)確地說(shuō)主要只是一個(gè)Web Container。
如果你想要學(xué)習(xí)EJB的話,Tomcat無(wú)法滿足你的需要。
10 什么是Servlet?
答:一個(gè)Servlet是一個(gè)Java類。它處理Http(s)請(qǐng)求并作出響應(yīng),包括返回一個(gè)HTML頁(yè)面或轉(zhuǎn)交給其他URL處理。
Servlet必須運(yùn)行在一個(gè)Web Container例如Tomcat中。
Servlet必須是javax.servlet.http.HttpServlet的子類,
你可以繼承doGet()或者doPost()方法,兩者分別對(duì)應(yīng)于Http(s)中的Get請(qǐng)求和Post請(qǐng)求。
11 我怎么獲得Http請(qǐng)求里的參數(shù)?
答:HttpRequest的getParameter()方法。例如:String paramValue = request.getParameter("paramName");
12 我怎么返回結(jié)果?
答:你可以利用相關(guān)API打開(kāi)一個(gè)輸出流,并向流中直接寫入一個(gè)HTML頁(yè)面。
但是作者完全不贊成這樣做。一方面這樣做會(huì)很羅嗦。
另一方面從Model-View-Controller模式(在《J2EE核心模式》中被歸為Front Controller模式)的觀點(diǎn)來(lái)看,
你應(yīng)當(dāng)提供一些HTML或者JSP作為視圖(view),而Servlet則根據(jù)請(qǐng)求參數(shù)決定轉(zhuǎn)到哪一個(gè)視圖。
你可以利用response.sendRedirect(...)方法或request.getDispatcher(...).forward()方法來(lái)實(shí)現(xiàn)。
13 sendRedirect()和forward()有什么不同?
答:sendRedirect()是向?yàn)g覽器發(fā)送一個(gè)redirect通知,瀏覽器重定向到新的URL。
而forward是在服務(wù)器端直接轉(zhuǎn)到新的URL,對(duì)于瀏覽器是透明的。
前者瀏覽器的地址欄顯示的是新的URL,后者瀏覽器的地址欄顯示的是Servlet的URL。
因而當(dāng)目標(biāo)URL會(huì)自動(dòng)刷新時(shí),兩者會(huì)造成一些差別。
14 我寫了一個(gè)Servlet程序,怎么運(yùn)行它?
答:開(kāi)發(fā)J2EE程序有一個(gè)部署(deploy)的概念,實(shí)際上是開(kāi)發(fā)——部署——運(yùn)行的三部曲。
大多數(shù)服務(wù)器支持Hot deploy。你只需要在相應(yīng)的Application目錄(具體路徑依賴于服務(wù)器)下面
建立一個(gè)符合WAR或EAR格式(參見(jiàn)16,17)的目錄,啟動(dòng)服務(wù)器,就可以通過(guò)瀏覽器訪問(wèn)了。
特別的,你的Servlet的class文件應(yīng)當(dāng)放在/WEB-INF/classes目錄中。
注意J2EE SDK不支持Hot deploy,你需要通過(guò)它的deploy tool來(lái)部署。
Tomcat只支持WAR格式。
15 EAR和WAR有什么不同?
答:EAR是一個(gè)完整的J2EE應(yīng)用程序,包括Web部分和EJB部分。
WAR只是其中的Web部分。
16 EAR格式是怎樣的?
答:一個(gè)EAR可以包含任意多個(gè)WAR或EJB JAR,并且包含一個(gè)META-INF的目錄。
在/META-INF中包含了一個(gè)application.xml,其中描述了這個(gè)EAR包含哪些模塊,以及安全性配置。
細(xì)節(jié)請(qǐng)看參考書(shū)。
17 WAR格式是怎樣的?
答:一個(gè)WAR包含一個(gè)WEB-INF的目錄,這個(gè)目錄下包含classes目錄,lib目錄和web.xml。
/WEB-INF/classes存放按package組織的class文件,/WEB-INF/lib目錄存放jar文件,
web.xml描述了很多東西,請(qǐng)讀參考書(shū)。
18 我的普通HTML文件應(yīng)當(dāng)放在哪里?
答:放在除了/WEB-INF以外的其他地方。
19 我訪問(wèn)不到servlet,甚至連HTML文件都訪問(wèn)不到!
答:第一你沒(méi)啟動(dòng)服務(wù)器。第二你敲錯(cuò)了端口。第三你沒(méi)有正確配置context-path。
第四你的服務(wù)器不支持auto reload或者你關(guān)閉了這一選項(xiàng),你得重啟服務(wù)器。
第五確認(rèn)你沒(méi)有把HTML放在/WEB-INF目錄下,那是訪問(wèn)不到的。
20 我能訪問(wèn)HTML但是訪問(wèn)不到servlet。
答:請(qǐng)檢查你的web.xml文件。確保你正確定義了<servlet>和<servlet-mapping>元素。
前者標(biāo)識(shí)了一個(gè)servlet,后者將一個(gè)相對(duì)于context-path的URL映射到一個(gè)servlet。
在Tomcat中你可以通過(guò)/context-path/servlet/package/servletname的形式訪問(wèn)servlet,
但是這只是Tomcat的便捷訪問(wèn)方式,并不是正式規(guī)范。
細(xì)節(jié)請(qǐng)看參考書(shū)。
21 什么是JSP?它和Servlet有什么區(qū)別?
答:你可以將JSP當(dāng)做一個(gè)可擴(kuò)充的HTML來(lái)對(duì)待。
雖然在本質(zhì)上JSP文件會(huì)被服務(wù)器自動(dòng)翻譯為相應(yīng)的Servlet來(lái)執(zhí)行。
可以說(shuō)Servlet是面向Java程序員而JSP是面向HTML程序員的,除此之外兩者功能完全等價(jià)。