<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 3, 文章 - 152, 評(píng)論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    Java的基礎(chǔ)問(wèn)題(二)

    目錄:

    一、準(zhǔn)備篇
    Q1.1  什么是J2EE?它和普通的Java有什么不同?
    Q1.2  J2EE好學(xué)嗎?
    Q1.3 J2EE有什么用?
    Q1.4 學(xué)J2EE有前途嗎?
    Q1.5 據(jù)說(shuō)J2EE的性能不如.NET好,是真的嗎?
    Q1.6 聽(tīng)你說(shuō)了這么多,我想學(xué)著玩玩。
    Q1.7 學(xué)習(xí)J2EE該怎么開始?
    Q1.8 我下了一個(gè)J2EE服務(wù)器但是不會(huì)配置。
    Q1.9 我發(fā)現(xiàn)你沒(méi)有提到Tomcat。

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

    一、準(zhǔn)備篇

    Q1.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í)編程》)

    Q1.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ù)后再開始
    編程。
    大體上J2EE可以分成3個(gè)主要應(yīng)用方式:Servlet/JSP,EJB,Web Service 和一些支撐技術(shù)
    例如JDBC和JNDI。
    你可以一個(gè)一個(gè)的學(xué)。

    Q1.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)站。但是你肯定聽(tīng)過(guò)“殺雞焉用牛刀”的古訓(xùn)。

    Q1.4 學(xué)J2EE有前途嗎?
    答:在這一市場(chǎng)目前只有一種技術(shù)可以和J2EE競(jìng)爭(zhēng),那就是Microsoft的.NET。
    相對(duì)來(lái)說(shuō).NET要“新”一些而J2EE要“老”一些。這也意味著.NET更易用一點(diǎn)而J2EE更成
    熟一點(diǎn)。
    但是.NET只能用于Windows平臺(tái)(Microsoft聲稱要開發(fā)C#在Linux上的虛擬機(jī)但是尚未兌現(xiàn)
    該諾言)。
    在過(guò)去幾年,.NET的市場(chǎng)份額并不理想。不過(guò)Microsoft還有Longhorn這一殺手锏,鹿死誰(shuí)
    手還很難說(shuō)。

    Q1.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ì)。

    Q1.6 聽(tīng)你說(shuō)了這么多,我想學(xué)著玩玩。
    答:除非你想靠它當(dāng)飯吃或者作為技術(shù)儲(chǔ)備,否則請(qǐng)不要浪費(fèi)你的時(shí)間。
    Flash要好玩得多。計(jì)算機(jī)游戲就更加好玩了。

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


    Q1.8 我下了一個(gè)J2EE服務(wù)器但是不會(huì)配置。
    答:請(qǐng)認(rèn)真閱讀隨機(jī)指導(dǎo)文檔,不同的服務(wù)器的配置都不一樣,作者愛(ài)莫能助。

    Q1.9 我發(fā)現(xiàn)你沒(méi)有提到Tomcat。
    答:Tomcat只是一個(gè)Web服務(wù)器,更準(zhǔn)確地說(shuō)主要只是一個(gè)Web Container。
    如果你想要學(xué)習(xí)EJB的話,Tomcat無(wú)法滿足你的需要。

    二、 Servlet/JSP篇

    Q2.1 什么是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)求。


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

    Q2.3 我怎么返回結(jié)果?
    答:你可以利用相關(guān)API打開一個(gè)輸出流,并向流中直接寫入一個(gè)HTML頁(yè)面。
    但是作者完全不贊成這樣做。一方面這樣做會(huì)很羅嗦。
    另一方面從Model-View-Controller模式(在《J2EE核心模式》中被歸為Front Controlle
    r模式)的觀點(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)。

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

    Q2.5 我寫了一個(gè)Servlet程序,怎么運(yùn)行它?
    答:開發(fā)J2EE程序有一個(gè)部署(deploy)的概念,實(shí)際上是開發(fā)——部署——運(yùn)行的三部
    曲。
    大多數(shù)服務(wù)器支持Hot deploy。你只需要在相應(yīng)的Application目錄(具體路徑依賴于服務(wù)
    器)下面
    建立一個(gè)符合WAR或EAR格式(參見(jiàn)Q2.7,Q2.8)的目錄,啟動(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格式。

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

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

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

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

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

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

    通過(guò)WEB-CONTAINER來(lái)訪問(wèn)。

    作者意見(jiàn):
    我更喜歡用filter來(lái)做安全性檢查。
    在MVC模式中,JSP只是一個(gè)視圖而已,一般無(wú)需特別擔(dān)憂安全性。和普通的html放在一起
    也利于維護(hù)。

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

    Q2.11 我能訪問(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)看參考書。

    Q2.12  什么是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à)


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

    如果你已經(jīng)聲明了page我想你知道該怎么修改。

    Q2.14  為什么使用gb18030而不是gb2312?
    答:gb18030是繼gb2312之后的下一代漢字編碼標(biāo)準(zhǔn),最終將過(guò)渡到Unicode。

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

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

    Q2.17  怎么調(diào)用cookie?
    答:作者建議使用session,你總是會(huì)遇到某些禁用cookie的用戶。這時(shí)session會(huì)自動(dòng)使
    用URL重寫來(lái)實(shí)現(xiàn)。

    Q2.18  怎么在JSP里面實(shí)現(xiàn)文件下載?
    答:實(shí)際上這是一個(gè)HTML的問(wèn)題。答案是一個(gè)超鏈接<a>。

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

    Q2.20  我想讓頁(yè)面自動(dòng)刷新,比如聊天室。
    答:這是一個(gè)HTML問(wèn)題,在<head>部分中加一條<meta http-equiv="refresh" content="
    5" url="...">。
    這是所謂的Client-pull,客戶端刷新技術(shù)。
    相對(duì)的還有Server-push,服務(wù)器端刷新技術(shù),但是這一技術(shù)由于要占用服務(wù)器端資源而會(huì)
    在大量訪問(wèn)時(shí)出現(xiàn)瓶頸現(xiàn)象,參見(jiàn)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  我想讓用戶登錄以后才能訪問(wèn)頁(yè)面。
    答:使用聲明式安全措施。
    你只需要在web.xml中定義安全角色(Role),并定義受保護(hù)的URL集合只能由特定Role訪
    問(wèn)。
    大多數(shù)服務(wù)器支持基于數(shù)據(jù)庫(kù)的用戶映射,你只要在相應(yīng)數(shù)據(jù)庫(kù)中建立兩張表并配置服務(wù)
    器就可以了。
    注意J2EE SDK不支持基于數(shù)據(jù)庫(kù)的用戶映射。
    細(xì)節(jié)請(qǐng)看參考書和服務(wù)器文檔。
    不過(guò)在商業(yè)環(huán)境中,J2EE所提供的聲明式安全措施仍然偏弱。一般商業(yè)程序會(huì)使用數(shù)據(jù)庫(kù)
    存儲(chǔ)user-role-privilege模型來(lái)達(dá)到安全性要求,細(xì)節(jié)請(qǐng)?jiān)儐?wèn)你的構(gòu)架設(shè)計(jì)師。

    Q2.22  我想要能注冊(cè)用戶。
    答:參看Q2.21。在接受注冊(cè)請(qǐng)求的Servlet中執(zhí)行寫入數(shù)據(jù)庫(kù)操作即可。

    Q2.23  怎么在JSP中訪問(wèn)數(shù)據(jù)庫(kù)?
    答:標(biāo)準(zhǔn)做法是使用DAO模式,定義一個(gè)Java bean來(lái)訪問(wèn)數(shù)據(jù)庫(kù)并在JSP中使用。
    然而,當(dāng)你的數(shù)據(jù)庫(kù)模式很簡(jiǎn)單時(shí),你可以使用JSTL中的<sql:query>標(biāo)簽來(lái)快速訪問(wèn)。

    在一般的J2EE項(xiàng)目中,JSP處于表示層(展現(xiàn)層),需要先后通過(guò)業(yè)務(wù)層和集成層才會(huì)訪問(wèn)
    到數(shù)據(jù)庫(kù),所以這個(gè)問(wèn)題確實(shí)只會(huì)在很小的程序中才會(huì)遇到。

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

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

    主站蜘蛛池模板: 国产妇乱子伦视频免费| 日韩精品内射视频免费观看| 久久久久一级精品亚洲国产成人综合AV区| 午夜免费福利在线| 亚洲乱亚洲乱妇无码| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲成aⅴ人片在线影院八| 免费无遮挡无码视频网站| 永久免费观看黄网站| 亚洲成在人线中文字幕| 女人与禽交视频免费看| 久久久WWW成人免费精品| 亚洲日韩国产精品无码av| 亚洲AV无码乱码在线观看| 6080午夜一级毛片免费看 | 亚洲熟妇av一区二区三区 | 亚洲一区免费观看| 亚洲av综合av一区二区三区| 亚洲日产无码中文字幕| 最近高清国语中文在线观看免费| 亚洲精品日韩中文字幕久久久| a色毛片免费视频| 亚洲色欲啪啪久久WWW综合网| 免费黄色网址网站| 一区二区三区免费视频网站| 亚洲黄色片免费看| 久久影视综合亚洲| 成人免费777777| 99热在线观看免费| 2022国内精品免费福利视频| 亚洲永久网址在线观看| 久久亚洲sm情趣捆绑调教| 国产美女亚洲精品久久久综合| AAAAA级少妇高潮大片免费看| 亚洲狠狠婷婷综合久久久久| 国产成人在线观看免费网站 | 无码人妻一区二区三区免费手机| 精品国产日韩久久亚洲| 亚洲国产女人aaa毛片在线| 免费看一级做a爰片久久| 好吊妞视频免费视频|