空間站

          北極心空

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          1). Eclipse不能熱編譯:當(dāng)不通過Eclipse顯示的部署(deploy),而通過在Tomcat 5.0\conf\Catalina\localhost下面編寫部署文件時(shí),如 wmls.xml :??reloadable="false">
          如果替換了web應(yīng)用程序的某個(gè)java文件,而此時(shí)Eclipse不會(huì)對(duì)此文件編譯,所以在啟動(dòng)tomcat的時(shí)候會(huì)提示 ClassNotFoundException。

          解決方法:1. 顯示的更改對(duì)應(yīng)的java文件,保存后Eclipse就會(huì)編譯。
          2.項(xiàng)目-重建工程

          2).使用Spring.jar工具包編寫一個(gè)簡單的Spring相關(guān)Demo
          1.編寫兩個(gè)(JavaBean)類UpperAction和LowerAction,它們都實(shí)現(xiàn)了一個(gè)接口Action。
          2.編寫bean.xml文件,它負(fù)責(zé)選擇JavaBean和配置javabean的屬性。
          3.編寫測(cè)試類Test.java,它根據(jù)bean.xml創(chuàng)建一個(gè)ApplicationContext實(shí)現(xiàn),從ApplicationContext中獲得Action接口的實(shí)現(xiàn)。執(zhí)行Action接口中定義的方法。
          ?Test.java中業(yè)務(wù)邏輯方法(Action接口中定義的方法)是在運(yùn)行期間才確定的,是在bean.xml中進(jìn)行配置的,不需要在Test.java的代碼中顯示的確定。這樣變降低了組件Test和Action實(shí)現(xiàn)類的耦合。

          ?存在的疑問:
          由于session是線程,所以每個(gè)Action的session不能相同。
          但是為什么session不能關(guān)閉呢??

          3)Jsp中parameter和attribute區(qū)別

          Attributes are objects associated with a request. Attributes may be set by the
          container to express information that otherwise could not be expressed via the API,or may be set by a servlet to communicate information to another servlet (via the RequestDispatcher).

          Request parameters for the servlet are the strings sent by the client to a servlet container as part of its request. the container populates the parameters from the URI query string and POST-ed data.The parameters are stored as a set of name-value pairs. Multiple parametervalues can exist for any given parameter name

          Attributes只能用在容器中,或者在容器之間傳遞,而 parameters是客戶端傳到服務(wù)器端的參數(shù),可以在post和URL參數(shù)中。

          4).更新時(shí)應(yīng)該根據(jù)對(duì)象的ID得到緩存在Session中引用。
          Session session = SessionFactory.currentSession();
          ?Demo info? =(Demo)session3.load(Demo.class,new Integer(addForm.getId()));
          info.setName(addForm.getName());
          session.update(info);
          不能直接 info.setID(addForm.getID()); 否則提示 重復(fù)ID錯(cuò)誤。

          5).由于Tomcat沒將SQLServer Driver 下面的lib中的三個(gè)jar包不添加到工程中,所以提示 空指針 錯(cuò)誤。
          ?java.lang.NullPointerException 。將JDBC 的三個(gè)jar包拷貝到\WEB-INF\lib 下面就可以了。?

          6).分析JSP頁面中URL的書寫問題:
          1:?? / 和 /? :都是相對(duì)當(dāng)前目錄。
          2:?? 。。/??? :是回到當(dāng)前目錄的上一層目錄
          3:?? 什么都不寫是相對(duì)tomcat的目錄:既是相對(duì) http://localhost:8080/
          ?無論URL怎么寫,經(jīng)過tomcat解釋后一定要是可以訪問到資源。?

          7).session.flush() 和transaction.commit()正常? session.Flush()并不是必須的,它的作用是將持久類的對(duì)象更改立刻提交到數(shù)據(jù)庫中 即使不顯式調(diào)用session.flush(),在transaction.Commit()之前,hibernate會(huì)自動(dòng)調(diào)用flush()操作.但是如果在沒有使用Transaction的情況下執(zhí)行持久化操作,沒有調(diào)用Flush就關(guān)閉session,當(dāng)前session中的持久對(duì)象將不會(huì)持久化!(即:所做操作將不能反映到數(shù)據(jù)源的更改)
          ?? 執(zhí)行持久化操作時(shí),很多情況下,操作是被記錄下來,并不是立即提交到數(shù)據(jù)庫,直到session調(diào)用Flush時(shí)才真正提交。在SessionImpl.cs中,定義了三個(gè)ArrayList,分別是insertions、 deletions、updates,用于保存對(duì)應(yīng)的持久化操作.例如在update()操作之后執(zhí)行flush(),hibernate會(huì)檢查緩存中的持久類,如果發(fā)現(xiàn)有更新則會(huì)提交到數(shù)據(jù)庫,否則將不會(huì)提交.原因應(yīng)該是為了避免頻繁的數(shù)據(jù)庫連接吧,畢竟數(shù)據(jù)庫連接是非常消耗資源的。
          ?對(duì)hibernate的事務(wù)處理有待進(jìn)一步了解和掌握。?

          8). 關(guān)于PO,VO,DTO的思考??

          ?struts的ActionForm 類可以和 hibernate的POJO 重疊使用,只要在相應(yīng)的struts-config.xml的 form-bean屬性 和..hmb.xml 的class屬性都設(shè)置為同一個(gè)POJO類就可以了。? POJO可以重用。

          對(duì)于上個(gè)Demo中 ActionForm 和 hibernate的 POJO重用問題,在非常簡單的應(yīng)用中可以這么做,并可以節(jié)省一些內(nèi)存。但是在業(yè)務(wù)邏輯變復(fù)雜時(shí)存在以下幾個(gè)缺點(diǎn):
          1. ActionForm 的屬性 和 POJO 的屬性不一樣時(shí),就重用不了。
          比如一個(gè) Customer 包含 一個(gè)Adreess類的兩個(gè)對(duì)象 (家庭住址和公司 homeAdress 和 comAdress),此時(shí)ActionForm中的屬性比POJO的屬性多,所以不能重用。
          2.這樣加大了程序的耦合性,不論是上層組件修改,還是下層組件修改,都會(huì)影響到整個(gè)應(yīng)用程序,從而增加修改的復(fù)雜性。
          3.位于Model層的PO(hibernate中的POJO,Entiry EJB),如果被傳遞到其他層面。由于PO的更新最終將被映射到實(shí)際數(shù)據(jù)庫中,而且具有生命周期,如果PO在其他層面(如View層)發(fā)生了變動(dòng),那么可能會(huì)對(duì)Model層造成意想不到的破壞。
          4.程序設(shè)計(jì)的一般原則是上層組件依賴下層,而下層不能依賴上層組件,既上層組件不要在下層組件中使用。因此View層的ActionForm也不能在持久層作為POJO使用。另一方面,表現(xiàn)層(ActionForm)VO直接反映的是表單數(shù)據(jù),例如一個(gè)String格式的日期或者,前者需要轉(zhuǎn)化為Date類型而后者則在Business層用不到。

          結(jié)論:
          在處理一個(gè)case的時(shí)候就出現(xiàn)了3個(gè)ValueObject:
          : 一個(gè)是表現(xiàn)層的用于反映頁面數(shù)據(jù)。
          : 一個(gè)是Business層的,用于作為表現(xiàn)層和Business之間的DTO。
          :? 另一個(gè)是DAO持久層的,用于持久化的ValueObject。?
          ?DTO: Data Transfer Object
          VO : ValueObject
          PO : Persitence? Object

          9). ..hbm.xml文件: 既OR映射文件,書寫要遵循DTD規(guī)范,否則會(huì)提示錯(cuò)誤,如 connect time out 等。

          10) tomcat啟動(dòng)時(shí)提示:找不到 StandardContext.start() 行。 問題是 自己在程序中或者tomcat自己設(shè)置了一些斷點(diǎn)。 解決辦法: 調(diào)整Eclipse到Debug視圖,將斷點(diǎn)去掉即可。? tomcat啟動(dòng)問題

          11).hibernate中的事務(wù)提交問題?? hibernate一般操作語句如下:
          Configuration conf= new Configuration().configure();
          SessionFactory sessions=conf.buildSessionFactory()
          Session session = sessions.openSession();??????
          Transaction t =? session.beginTransaction();
          session.save(info); //生成SQL語句
          t.commit();???????? //提交SQL語句

          ?session默認(rèn)不提交事務(wù)。

          12).hibernate的配置文件hibernate.cfg.xml中關(guān)于??jdbc:microsoft:sqlserver://localhost:1433
          熟悉后面應(yīng)該加上 DatabaseName= value? value代表數(shù)據(jù)庫名。? hibernate的配置文件??
          ?13).使用AarryList保存數(shù)據(jù)查詢出來的多條記錄。
          再將AarryList保存到session中,在JSP中邊可以使用session中的AayyList中保存的多條結(jié)果。在JSP中使用迭代器Iterator控制輸出多條記錄。? 使用AarryList 的add方法出現(xiàn)異常。 原因是add方法只增加對(duì)象的引用。所以造成多條相同的記錄。

          14).Web重定向: Redirect,HTTP協(xié)議中的重定向機(jī)制是客戶端讀取需要跳轉(zhuǎn)到的頁面的URL并重新加載新的頁面。forward()方法和sendRedirect()方法的區(qū)別是:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用Request Dispatcher.forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。

          15).1.Java與數(shù)據(jù)庫交互的具體過程
          ??? 1.裝入數(shù)據(jù)庫驅(qū)動(dòng)程序 (JDBC 驅(qū)動(dòng)程序或 JDBC-ODBC 橋) 。?
          ???? 2.創(chuàng)建數(shù)據(jù)庫的 Connection。?
          ???? 3.創(chuàng)建一個(gè) Statement 對(duì)象。Statement 對(duì)象用于將 SQL 語句發(fā)送到數(shù)據(jù)庫中。.
          ???? 4.創(chuàng)建一個(gè) ResultSet,然后用執(zhí)行查詢的結(jié)果填充
          ???? 5.從 ResultSet 檢索或更新數(shù)據(jù)。
          2.連接到數(shù)據(jù)庫的兩種方法,比較有缺點(diǎn)
          3.PreparedStatement代替Statement 的優(yōu)點(diǎn)
          ? 一.代碼的可讀性和可維護(hù)性.
          ? 二.PreparedStatement盡最大可能提高性能.
          ? 三.最重要的一點(diǎn)是極大地提高了安全性.
          4.Statement 接口三種執(zhí)行 SQL 語句的方法
          5.ResultSet的使用
          15).tomcat有兩種啟動(dòng)方式,一個(gè)用startup.bat,一個(gè)用tomcat5w.exe。
          當(dāng)用這兩種不同的啟動(dòng)方式,運(yùn)行一個(gè)JSP文件(用到了tool.jar包)時(shí),tomcat5w.exe啟動(dòng)方式提示
          Unable to find a javac compiler;
          com.sun.tools.javac.Main is not on the classpath.
          Perhaps JAVA_HOME does not point to the JDK。

          ?原因:
          tomcat有兩種啟動(dòng)方式,一個(gè)用startup.bat,一個(gè)用tomcat5w.exe。
          其中startup.bat使用的是按照系統(tǒng)里設(shè)置classpath,
          而tomcat5w.exe里面有一個(gè)專門設(shè)置classpath的地方,在設(shè)置的java選項(xiàng)中。

          所以解決方法有兩種:
          1.將用到的工具類包(如tools.jar)直接拷貝到tomcat的common/lib中。
          2.classpath中加入相應(yīng)的工具類包(如tools.jar)。

          注:
          1.第一次提交JSP請(qǐng)求時(shí),tomcat會(huì)編譯jsp文件,找到并裝入到相應(yīng)的工具類(如tools.jar)。
          2.classpath設(shè)置只能用文件名,而不能用目錄。?

          16).用了package的時(shí)候顯示"NoClassDefFoundError",把package去掉的時(shí)候能正常運(yùn)行。
           解決過程:將java文件按包名存放。
           工作目錄是/source,類是hello.HelloWorld,將它放為/source/hello/HelloWorld.java。如果沒有聲明包,直接放在/source下。
            在/source下執(zhí)行javac hello/HelloWorld.java,再執(zhí)行java hello.HelloWorld.java,一切正常。 注:感覺SUN的軟件缺乏用戶意識(shí),在源文件中試用了package,在使用javac時(shí)卻不能自動(dòng)生成一個(gè)包,要用戶自己建立文件夾,很是不方便。

          17)DispatchAction實(shí)現(xiàn)。
          DispatchAction通過配置文件(Struts-config.xml)中的parameter參數(shù)的值,調(diào)用參數(shù)值對(duì)應(yīng)的方法,這樣便省去了載Action類中編寫大量的判斷代碼。涉及的技術(shù)有代理,反射。

          ?

          ?



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=810046

          posted on 2006-12-20 14:38 蘆葦 閱讀(421) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 沛县| 牟定县| 海南省| 平陆县| 永清县| 永福县| 崇文区| 九台市| 萝北县| 岳池县| 昔阳县| 曲阳县| 阿拉善左旗| 电白县| 加查县| 灵川县| 桂东县| 乌兰县| 花莲市| 渝北区| 永川市| 潍坊市| 武邑县| 三穗县| 凤台县| 平遥县| 津市市| 张家口市| 紫阳县| 上犹县| 扎囊县| 天台县| 渝北区| 库车县| 大城县| 芜湖市| 双峰县| 高要市| 万山特区| 易门县| 赤水市|