隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
          數據加載中……

          Java的基礎問題(二)

          目錄:

          一、準備篇
          Q1.1  什么是J2EE?它和普通的Java有什么不同?
          Q1.2  J2EE好學嗎?
          Q1.3 J2EE有什么用?
          Q1.4 學J2EE有前途嗎?
          Q1.5 據說J2EE的性能不如.NET好,是真的嗎?
          Q1.6 聽你說了這么多,我想學著玩玩。
          Q1.7 學習J2EE該怎么開始?
          Q1.8 我下了一個J2EE服務器但是不會配置。
          Q1.9 我發現你沒有提到Tomcat。

          二、 Servlet/JSP篇
          Q2.1 什么是Servlet?
          Q2.2 我怎么獲得Http請求里的參數?
          Q2.3 我怎么返回結果?
          Q2.4 sendRedirect()和forward()有什么不同?
          Q2.5 我寫了一個Servlet程序,怎么運行它?
          Q2.6 EAR和WAR有什么不同?
          Q2.7 EAR格式是怎樣的?
          Q2.8 WAR格式是怎樣的?
          Q2.9 我的普通HTML文件/JSP文件應當放在哪里?
          Q2.10 我訪問不到servlet,甚至連HTML文件都訪問不到!
          Q2.11 我能訪問HTML但是訪問不到servlet。
          Q2.12  什么是JSP?它和Servlet有什么區別?
          Q2.13  我的JSP顯示的漢字是亂碼。
          Q2.14  為什么使用gb18030而不是gb2312?
          Q2.15  在JSP里面怎么引用Java Bean。
          Q2.16  我想在servlet間傳遞數據。
          Q2.17  怎么調用cookie?
          Q2.18  怎么在JSP里面實現文件下載?
          Q2.19  怎么實現文件上傳?
          Q2.20  我想讓頁面自動刷新,比如聊天室。
          Q2.21  我想讓用戶登錄以后才能訪問頁面。
          Q2.22  我想要能注冊用戶。
          Q2.23  怎么在JSP中訪問數據庫?
          Q2.24  什么是JSTL?

          一、準備篇

          Q1.1  什么是J2EE?它和普通的Java有什么不同?
          答:J2EE全稱為Java2 Platform, Enterprise Edition。
          “J2EE平臺本質上是一個分布式的服務器應用程序設計環境——一個Java環境,它提供了

          ·宿主應用的一個運行基礎框架環境。
          ·一套用來創建應用的Java擴展API。”(引自《J2EE服務器端高級編程》)

          Q1.2  J2EE好學嗎?
          答:J2EE是很多技術的集合體,并且還在成長中。
          你會遇到很多專有名詞:比如(X)HTML,Servlet/JSP,JDBC,JMS,JNDI,EJB,XML,Web
          Service……。
          尤其是XML和Web Service正在快速成長。幸運的是,你不需要等到學會所有技術后再開始
          編程。
          大體上J2EE可以分成3個主要應用方式:Servlet/JSP,EJB,Web Service 和一些支撐技術
          例如JDBC和JNDI。
          你可以一個一個的學。

          Q1.3 J2EE有什么用?
          答:用來建設大型的分布式企業級應用程序。或者用更時髦的名詞說就是“電子商務”應
          用程序。
          這些企業可能大到擁有中心數據庫服務器,Web服務器集群和遍布全國的辦公終端,也可能
          小到只不過想做一個網站。但是你肯定聽過“殺雞焉用牛刀”的古訓。

          Q1.4 學J2EE有前途嗎?
          答:在這一市場目前只有一種技術可以和J2EE競爭,那就是Microsoft的.NET。
          相對來說.NET要“新”一些而J2EE要“老”一些。這也意味著.NET更易用一點而J2EE更成
          熟一點。
          但是.NET只能用于Windows平臺(Microsoft聲稱要開發C#在Linux上的虛擬機但是尚未兌現
          該諾言)。
          在過去幾年,.NET的市場份額并不理想。不過Microsoft還有Longhorn這一殺手锏,鹿死誰
          手還很難說。

          Q1.5 據說J2EE的性能不如.NET好,是真的嗎?
          答:在Sun公司提供的樣例程序Pet Store上,Microsoft聲稱不如相同的.NET程序好。
          而Sun公司反駁說這一程序不能真正體現J2EE的性能,并且指責Microsoft在數據庫上做了
          優化。
          作者沒有學習過.NET因而不能妄下斷言。
          無論如何,大型分布式程序中的性能瓶頸通常首先來自于錯誤的設計。

          Q1.6 聽你說了這么多,我想學著玩玩。
          答:除非你想靠它當飯吃或者作為技術儲備,否則請不要浪費你的時間。
          Flash要好玩得多。計算機游戲就更加好玩了。

          Q1.7 學習J2EE該怎么開始?
          答:首先,下載一個免費的J2EE服務器。其次,去java.sun.com下載J2EE的API。第三,找
          一本好的參考書。最后,找一個順手的IDE。
          J2EE服務器。你可以用Sun的J2EE SDK(免費),或者Weblogic(性能最好,但是太大,而
          且作者不推薦盜版行為),
          或者JBoss(免費,就是文檔太少),或者JRun(開發版免費,作者用這個)。
          參考書作者感覺Wrox的《J2EE服務器端高級編程》不錯,但是太老(作者手頭的是2001年
          中文版)。
          (似乎很多人不喜歡這本書......所以你得自己判斷它是否適合你。)
          你還需要去下載一些最新的技術資料(當然肯定是英文的)。
          IDE如果你的機器配置夠好(內存至少512M以上,256M或以下請勿考慮),可以用IBM的WS
          AD,不然就繼續用Eclipse或者其他。
          你也可以經常去水木清華的Java版逛逛,但是在發貼前先看看精華區里有沒有你要的答案


          Q1.8 我下了一個J2EE服務器但是不會配置。
          答:請認真閱讀隨機指導文檔,不同的服務器的配置都不一樣,作者愛莫能助。

          Q1.9 我發現你沒有提到Tomcat。
          答:Tomcat只是一個Web服務器,更準確地說主要只是一個Web Container。
          如果你想要學習EJB的話,Tomcat無法滿足你的需要。

          二、 Servlet/JSP篇

          Q2.1 什么是Servlet?
          答:一個Servlet是一個Java類。它處理Http(s)請求并作出響應,包括返回一個HTML頁面
          或轉交給其他URL處理。
          Servlet必須運行在一個Web Container例如Tomcat中。
          Servlet必須是javax.servlet.http.HttpServlet的子類,
          你可以繼承doGet()或者doPost()方法,兩者分別對應于Http(s)中的Get請求和Post請求。


          Q2.2 我怎么獲得Http請求里的參數?
          答:HttpRequest的getParameter()方法。例如:String paramValue = request.getPara
          meter("paramName");

          Q2.3 我怎么返回結果?
          答:你可以利用相關API打開一個輸出流,并向流中直接寫入一個HTML頁面。
          但是作者完全不贊成這樣做。一方面這樣做會很羅嗦。
          另一方面從Model-View-Controller模式(在《J2EE核心模式》中被歸為Front Controlle
          r模式)的觀點來看,
          你應當提供一些HTML或者JSP作為視圖(view),而Servlet則根據請求參數決定轉到哪一
          個視圖。
          你可以利用response.sendRedirect(...)方法或request.getDispatcher(...).forward()
          方法來實現。

          Q2.4 sendRedirect()和forward()有什么不同?
          答:sendRedirect()是向瀏覽器發送一個redirect通知,瀏覽器向新的URL發送一個新的請
          求。
          而forward是在服務器端直接將請求轉到新的URL,對于瀏覽器是透明的。
          換而言之,sendRedirect()應當將共享數據放在session中,forward應當將共享數據放在
          request中(當然你也可以放在session中,但放在request中可以有效減小session中的數
          據量,從而改善性能)。
          前者瀏覽器的地址欄顯示的是新的URL,后者瀏覽器的地址欄顯示的是Servlet的URL。
          因而當刷新目標URL時,兩者會造成一些差別。

          Q2.5 我寫了一個Servlet程序,怎么運行它?
          答:開發J2EE程序有一個部署(deploy)的概念,實際上是開發——部署——運行的三部
          曲。
          大多數服務器支持Hot deploy。你只需要在相應的Application目錄(具體路徑依賴于服務
          器)下面
          建立一個符合WAR或EAR格式(參見Q2.7,Q2.8)的目錄,啟動服務器,就可以通過瀏覽器
          訪問了。
          特別的,你的Servlet的class文件應當放在/WEB-INF/classes目錄中。
          注意J2EE SDK不支持Hot deploy,你需要通過它的deploy tool來部署。
          Tomcat只支持WAR格式。

          Q2.6 EAR和WAR有什么不同?
          答:EAR是一個完整的J2EE應用程序,包括Web部分和EJB部分。
          WAR只是其中的Web部分。

          Q2.7 EAR格式是怎樣的?
          答:一個EAR可以包含任意多個WAR或EJB JAR,并且包含一個META-INF的目錄。
          在/META-INF中包含了一個application.xml,其中描述了這個EAR包含哪些模塊,以及安全
          性配置。
          細節請看參考書。

          Q2.8 WAR格式是怎樣的?
          答:一個WAR包含一個WEB-INF的目錄,這個目錄下包含classes目錄,lib目錄和web.xml。

          /WEB-INF/classes存放按package組織的class文件,/WEB-INF/lib目錄存放jar文件,
          web.xml描述了很多東西,請讀參考書。

          Q2.9 我的普通HTML文件/JSP文件應當放在哪里?
          答:放在除了/WEB-INF以外的其他地方。

          感謝antegg網友對于安全性的提醒:
          如果你想直接用http://url/***.jsp的方式來訪問,就要像上面說得那樣放。
          但是這樣的做法是不安全的,安全的做法是把所有的JSP頁面放在/WEB-INF目錄下面,并且

          通過WEB-CONTAINER來訪問。

          作者意見:
          我更喜歡用filter來做安全性檢查。
          在MVC模式中,JSP只是一個視圖而已,一般無需特別擔憂安全性。和普通的html放在一起
          也利于維護。

          Q2.10 我訪問不到servlet,甚至連HTML文件都訪問不到!
          答:
          第一你沒啟動服務器。
          第二你敲錯了端口。
          第三你沒有正確配置context-path。
          第四你的服務器不支持auto reload或者你關閉了這一選項,你得重啟服務器或重新部署W
          AR。
          第五確認你沒有把HTML放在/WEB-INF目錄下,那是訪問不到的。

          Q2.11 我能訪問HTML但是訪問不到servlet。
          答:請檢查你的web.xml文件。確保你正確定義了<servlet>和<servlet-mapping>元素。

          前者標識了一個servlet,后者將一個相對于context-path的URL映射到一個servlet。
          在Tomcat中你可以通過/context-path/servlet/package/servletname的形式訪問servlet

          但是這只是Tomcat的便捷訪問方式,并不是正式規范。
          細節請看參考書。

          Q2.12  什么是JSP?它和Servlet有什么區別?
          答:你可以將JSP當做一個可擴充的HTML來對待。
          雖然在本質上JSP文件會被服務器自動翻譯為相應的Servlet來執行。
          可以說Servlet是面向Java程序員而JSP是面向HTML程序員的,除此之外兩者功能完全等價


          Q2.13  我的JSP顯示的漢字是亂碼。
          答:在你的JSP開頭加上一行 <%@ page contentType="text/html; charset=gb18030"%>

          如果你已經聲明了page我想你知道該怎么修改。

          Q2.14  為什么使用gb18030而不是gb2312?
          答:gb18030是繼gb2312之后的下一代漢字編碼標準,最終將過渡到Unicode。

          Q2.15  在JSP里面怎么引用Java Bean。
          答:首先,確認你要引用的類在/WEB-INF/classes下或在/WEB-INF/lib的某個jar內。
          其次,在JSP里加一行 <jsp:useBean id="..." scope="..." class="..."/>
          具體解釋請看參考書。

          Q2.16  我想在servlet間傳遞數據。
          答:利用session。在Servlet/JSP中,你可以在4個地方保存數據。
          1) page,本頁面。
          2) session,用來存放客戶相關的信息,比如購物車,對應接口為javax.servlet.http.H
          ttpSession。
          session機制實際上是cookie和URL Rewriting的抽象,服務器會自動使用cookie或URL Re
          writing來實現。
          3) request,可以在forward()時傳遞信息,對應接口為javax.servlet.http.HttpReques
          t。
          4) application,或稱context,存放全局信息,對應接口為javax.servlet.ServletCont
          ext。

          Q2.17  怎么調用cookie?
          答:作者建議使用session,你總是會遇到某些禁用cookie的用戶。這時session會自動使
          用URL重寫來實現。

          Q2.18  怎么在JSP里面實現文件下載?
          答:實際上這是一個HTML的問題。答案是一個超鏈接<a>。

          Q2.19  怎么實現文件上傳?
          答:客戶端是HTML問題,在form中設置method為post,enctype為multi-part/form-data,
          加一個<input type="file">。
          而在接收的servlet中只是一個I/O問題,你可以使用jakarta的file-upload庫。

          Q2.20  我想讓頁面自動刷新,比如聊天室。
          答:這是一個HTML問題,在<head>部分中加一條<meta http-equiv="refresh" content="
          5" url="...">。
          這是所謂的Client-pull,客戶端刷新技術。
          相對的還有Server-push,服務器端刷新技術,但是這一技術由于要占用服務器端資源而會
          在大量訪問時出現瓶頸現象,參見http://216.239.33.104/search?q=cache:autUfoakirY
          J:www.kfunigraz.ac.at/edvndwww/books/books/javaenterprise/servlet/ch06_03.htm+
          server-push+servlet&hl=zh-CN&ie=UTF-8

          Q2.21  我想讓用戶登錄以后才能訪問頁面。
          答:使用聲明式安全措施。
          你只需要在web.xml中定義安全角色(Role),并定義受保護的URL集合只能由特定Role訪
          問。
          大多數服務器支持基于數據庫的用戶映射,你只要在相應數據庫中建立兩張表并配置服務
          器就可以了。
          注意J2EE SDK不支持基于數據庫的用戶映射。
          細節請看參考書和服務器文檔。
          不過在商業環境中,J2EE所提供的聲明式安全措施仍然偏弱。一般商業程序會使用數據庫
          存儲user-role-privilege模型來達到安全性要求,細節請詢問你的構架設計師。

          Q2.22  我想要能注冊用戶。
          答:參看Q2.21。在接受注冊請求的Servlet中執行寫入數據庫操作即可。

          Q2.23  怎么在JSP中訪問數據庫?
          答:標準做法是使用DAO模式,定義一個Java bean來訪問數據庫并在JSP中使用。
          然而,當你的數據庫模式很簡單時,你可以使用JSTL中的<sql:query>標簽來快速訪問。

          在一般的J2EE項目中,JSP處于表示層(展現層),需要先后通過業務層和集成層才會訪問
          到數據庫,所以這個問題確實只會在很小的程序中才會遇到。

          Q2.24  什么是JSTL?
          答:JSTL是Jsp Standard Tag Library的縮寫。這是一組通用標簽并將成為JSP 2.0的一部
          分。
          其中包含賦值<c:set>,分支<c:if>,循環<c:forEach>,查詢數據庫<sql:query>,更新數
          據庫<sql:update>
          等。目前你需要像添加自定義標簽庫一樣來添加JSTL,但是可以預計JSP 2.0會將JSTL作為
          組成部分。
          標簽庫可以在http://jakarta.apache.org下載。注意JSTL需要在支持JSP 1.2或更高版本
          的容器下運行。
          幫助文件可以閱讀sun的JSTL正式規范。

          posted on 2005-03-05 18:04 閱讀(228) 評論(0)  編輯  收藏 所屬分類: J2se

          主站蜘蛛池模板: 新巴尔虎左旗| 江安县| 寿光市| 那坡县| 确山县| 韶山市| 鸡泽县| 新郑市| 揭东县| 昌平区| 克什克腾旗| 安康市| 睢宁县| 忻州市| 馆陶县| 肃宁县| 正镶白旗| 兴化市| 浦东新区| 东辽县| 天祝| 阿勒泰市| 无锡市| 鄯善县| 宜君县| 林州市| 页游| 博罗县| 陵川县| 峨眉山市| 通化市| 凭祥市| 忻州市| 马山县| 衡水市| 霞浦县| 四川省| 冕宁县| 铁岭市| 贵定县| 离岛区|