posts - 66,comments - 41,trackbacks - 0
           0、 需要標識符
          a) 不在函數內

          1、 非法表達式開始
          b) 可能:丟失括號 .

          2. no data found
          a) 可能:setInt(1,100)中,沒有100這個值

          3. 找不到符號
          a) 可能:沒導入包

          4. 指定了無效URL
          a) 可能:數據庫名或IP錯誤,即連接出錯

          5. 類路徑沒有找到
          a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriver
          b) 原因: 一般是指包名寫錯,或者沒有import包,或者沒有在類路徑中找到jar文件
          c) 解決: 沒有加載Oracle驅動jar,在.bash_profile中把ojdbc14.jar加進來

          6. 空指針異常
          a) 可能: 數據源錯誤 比如數據庫名或IP錯誤

          7. 不能執行查詢
          a) 可能: 數據庫中表的問題,比如列名不存在

          8. invalid identity
          a) 可能: 列名出錯

          9. 若在數據庫中創建了 兩個sequence ,運行時出現異常可能是先后執行了多次select語句,導致與原有的序列號產生沖突

          10. 表名或列名不存在
          a) 可能:表不存在或者沒有插入數據到表中

          11. 不支持的類,類的版本錯誤
          a) 可能:沒有導入jdk5.0,或者編譯器仍為1.4

          12. MappingNotFoundException
          a) Maybe: In the Eclipse Not refersh , or not exist in the dirctory

          13. HibernateException: /hibernate.cfg.xml not found
          a) Maybe1: hibernate.cfg.xml not in the root directory
          b) Maybe2: Could not parse configuration .
          c) resolve: database not connect or use another database

          14. ConstraintViolationException
          a) Maybe: used a not true database

          15. 驅動沒有找到 或者 JDBC Driver not found
          可能:連接數據庫的驅動jar包不存在或者版本不一致,比如將舊的版本換成新的會造成該類錯誤
          16. 空指針異常 , java.lang.NullPointerException
          a) 可能1:數據庫連接出錯,比如在hibernate.cfg.xml中的數據錯誤會導致異常。

          17. 數據插入異常 ,GenericJDBCException: could not insert
          a) 可能1:沒有建立表或者表中沒有任何數據
          b) 可能2:插入數據后沒有執行提交語句:commit

          18. LazyInitializationException 或者延遲加載異常
          a) 可能1:沒有在查詢語句中加fetch

          19. IdentifierGenerationException
          a) 可能1:高位表沒有初始化(比如hi_value中沒有記錄)

          20. could not initialize a collection: [hibernate.entity.Role.modules#32768] Syntax error: Encountered "-" at line 1, column 132.
          a) 錯誤原因:<set name="modules" table="module-role" lazy="false">紅色字部分中“-”為非法字符,替換為module_role

          21. could not insert collection rows: [hibernate.entity.Module.roles#1]
          在Module.hbm.xml文件的如下配置中加入inverse=”true”
          <set name="roles" table="module_role" inverse="true">

          22.在部署Struts時,出現如下錯誤信息:
          HTTP Status 404 - Servlet action is not available

          type Status report
          message Servlet action is not available
          description The requested resource (Servlet action is not available) is not available.
          問題原因:
          1.、web.xml文件中未配置ActionServlet。
          2、struts-config.xml文件未配置你要訪問的Action。
          3、你的jsp文件form標記中action屬性的路徑名稱錯誤。
          4、非以上三種情況。
          針對以上4種情況相應的解決方案如下:
          1、在web.xml文件中加上ActionServlet的配置信息
          ?????? /WEB-INF/struts-config.xml?
          ?2、在struts-config.xml文件檢查你要訪問的Action配置文件。
          3、檢查jsp文件form標記中action屬性的路徑名稱是否與struts-config.xml文件中action標記的path屬性的路徑名稱一致。
          4、非以上情況的解決辦法就是檢查web容器的log日志,如果時tomcat則檢查下logs目錄下的localhost_log文件,看里邊是否記錄有錯誤信息,然后根據錯誤信息提示將其糾正。

          23.java.lang.NoClassDefFoundError: org/apache/commons/beanutils/Converter
          缺少spring-framework-2.0.3\lib\jakarta-commons\commons-beanutils.jar

          24.
          ava 代碼Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
          缺少spring-framework-2.0.3\lib\asm\asm-2.2.2.jar包,版本不同,該包的名字有相應的區別

          java 代碼Caused by: java.lang.NoClassDefFoundError: org/dom4j/DocumentException
          缺少spring-framework-2.0.3\lib\dom4j\dom4j-1.6.1.jar包,版本不同,該包的名字有相應的區別
          把這個包進去就可以了:\Spring206\lib\dom4j、dom4j-1.6.1.jar

          java 代碼Caused by: java.lang.NoClassDefFoundError: org/apache/commons/collections/SequencedHashMap
          缺少spring-framework-2.0.3\lib\jakarta-commons\commons-collections.jar包,版本不同,該包的名字有相應的區別

          java 代碼Caused by: java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
          缺少spring-framework-2.0.3\lib\cglib\cglib-nodep-2.1_3.jar包,版本不同,該包的名字有相應的區別

          java 代碼Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
          缺少hibernate-3.2\lib\asm.jar包,版本不同,該包的名字有相應的區別

          java 代碼
          org.hibernate.exception.SQLGrammarException: could not load an entity: [www.proudsoul.xml.User#1]
          JAVA工程與WEB工程包的區別:一個是asm.jar,一個是jta.jar

          java 代碼Caused by: java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
          缺少spring-framework-2.0.3\lib\j2ee\jta.jar包,版本不同,該包的名字有相應的區別此種錯誤請檢查相應的***.hbm.xml配置文件的配置

          25,
          Exception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: could not get next sequence value; nested exception is org.hibernate.exception.SQLGrammarException: could not get next sequence value
          Caused by: org.hibernate.exception.SQLGrammarException: could not get next sequence value
          原因:沒有加Sequence或者數據庫的方言寫錯了

          26,
          我的配置文件
          <id name="id" column="id">
          <generator class="native" />
          </id>
          然后我運行保存一條數據進去
          The database returned no natively generated identity value
          就會報這個錯誤
          因為你native是根據看底層數據庫的能力選擇identity, sequence 或者hilo中的一個
          而我建表的時候id沒有指定
          alter table `student` change `id` `id` int auto_increment
          我們把我們的表的結構小小的改動一下就沒問題了

          27,
          UpdateManager無法啟動2007-08-09 15:21如果在應用程序安裝過程中,暴力中斷安裝程序,會出現如下狀況:1.apt-get remove 和dpkg --remove 無法刪除軟件 2.UpdateManager無法啟動3.新立得軟件包管理程序無法啟動
          以上可能是deb損壞之類造成的
          sudo dpkg -r sqldveloper
          正在讀取軟件包列表... 完成
          正在分析軟件包的依賴關系樹... 完成
          E: 軟件包 sqldeveloper 需要重新安裝,但是我無法找到相應的安裝文件。
          解決方法:1.從 /var/lib/dpkg/status 中把對應的段刪掉
          重要:修改之前請先備份
          在status中找到你對應的包刪除就OK了...

          28,
          Exception in thread "main" java.lang.NoClassDefFoundError: antlr/ANTLRException
          少了antlr-2.7.5H3.jar包,從D:\eclipse\eclipse\plugins\com.genuitec.org.hibernate.eclipse_4.1.1\myeclipse-data\3.0\lib

          29,
          Caused by:
          java.lang.NoClassDefFoundError: javax/transaction/Synchronization
          缺少Spring206\lib\j2ee\jta.jar

          30,
          Caused by:
          java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy3] to required type [business.impl.PriceBiz] for property 'priceBiz': no matching editors or conversion strategy found
          java類中設置priceBiz時應該設置的是接口PriceBizIf,而非實現類

          31, 數組越界
          可能1: 在命令行后面需要加入參數.
          可能2:加入的參數錯誤
          32, car is not mapped
          可能1: 在cfg.xml中沒有增加映射的hbm.xml文件在<mapping.../>中

          33, 屬性沒有找到
          可能1: hbm.xml文件中的 <property name =""> 有問題, 也許是name的值與對應類中的成員名不一致

          34,SQLException: 無當前連接 可能1:在比如創建帳戶時沒有對相應的方法添加到<list>中去,比如這個沒有加入:<value>newAccount</value>

          <bean id="transactionAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">   
             
          <property name="advice">   
              
          <ref bean="advice"/>   
             
          </property>   
             
          <property name="mappedNames">   
              
          <list>   
               
          <value>transfer</value>   
              
          </list>   
          </bean>  

          35,SQLException: Syntax error: Encountered "table" at line 1, column 8.
          可能1;執行SQL時出現沖突,可能是SQL語句中使用了關鍵字作為變量來用,比如
          update order set balance=1000000;
          其中order被用作表名來使用,這是錯誤的,因為order是個關鍵字,用在order by中

          36, Servlet /Spring-WebMvc threw load() exception
          org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
          jar包的沖突,spring-1.2.6.jar和spring.jar出現在一個war的目錄中:JBoss/server/all/deploy/Spring-WebMvc.war/WEB-INF/lib

          37, java.sql.SQLException: 當事務仍處于活動狀態時,無法關閉連接。


          38 ,
          validateJarFile(/home/soft01/Tomcat/webapps/sms-token-struts/WEB-INF/lib/servlet-api.jar)
          Servlet /sms-struts-tiles threw load() exception
          java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet
          原因:在WEB-INF/lib/ 目錄下有servlet-api.jar與/Tomcat/common/lib目錄下的servlet-api.jar沖突了,把WEB-INF/lib/下的servlet-api.jar刪除就可以了

          39,java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
          Marking servlet action as unavailable
          10:30:47,088 ERROR [/NetCT_OSS]:3953 - Servlet /NetCT_OSS threw load() exception
          javax.servlet.UnavailableException

          40,org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
          缺少MyEclipse/eclipse/plugins/com.genuitec.eclipse.springframework_5.5.0/data/2.0/dist/modules/spring-struts.jar

          41,Caused by: java.sql.BatchUpdateException: ORA-02291: integrity constraint (SD0702.FK82D343CF49A4B831) violated - parent key not found
          Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
          有可能是ID生成策略的問題,我將它XML映射文件改成<generator class="increment" />就好了

          42,
          2007-08-19 16:21:43,290 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/OSS].[action]] - Servlet.service() for servlet action threw exception
          org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [entity.Module#2]
          java.util.ConcurrentModificationException
          原因:已經有對象擁有了所選擇的module,用clear(),而不是remove();

          43,
          ERROR [org.apache.catalina.session.ManagerBase] - IOException while loading persisted sessions: java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429
          java.io.InvalidClassException: entity.Module; local class incompatible: stream classdesc serialVersionUID = -5988350031935445758, local class serialVersionUID = -297934247726484429
          在Module中加上一個關鍵字:transient

          44,
          Caused by: java.sql.BatchUpdateException: ORA-02292: integrity constraint (SD0702.SYS_C00132664) violated - child record found
          原因:有其他的表引用了該表的外建,所以報這個異常,如果沒有引用就不會出現

          45,
          出現數組越界的時候,看看是不是循環時沒有加=,比如:
          for(int i = 1; i<arr.length;i++)可以改成
          for(int i = 1; i<=arr.length;i++)


          46.如果使用Ant和Junit是被報找不到test,檢查一下是否誤用了private
          出錯信息:
          <failure message="No tests found in test.AllTest" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: No tests found in test.AllTest
          該錯誤有個很特別的特點,當你不通過ant來運行測試,而是通過AllTest類來運行的話,可以正常運行。小心哦

          47.如果遇到報:表名無效,且jvm報嚴重錯誤,看看是不是用了數據庫的保留關鍵字來做表名了,如User。

          48.使用ant時必須小心ant的classpath它用的不是IDE的classpath,小心!

          49.小心下邊的異常,
          exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of xp.bean.Users.?" type="net.sf.hibernate.PropertyAccessException">java.lang.ClassCastException at xp.bean.UsersMetaClass1.setPropertyValues(<generated>) at net.sf.hibernate.persister.AbstractEntityPersister.setPropertyValues
          上次出現該錯錯誤的原因是:
          源文件里我的class類型為一個類Contact contact
          而跑到mapping里卻成了Set,呵呵厲害。

          50.突然間冒出大量的NullPointException
          重新build一下。

          51.="Flush during cascade is dangerous - this might occur if an object was deleted and then re-saved by cascade"

          52.Tapestry的出錯信息:
          Class com.bookshop.Hello does not implement the IPage interface.
          location: context:/WEB-INF/Home.page, line 6
          原因:與顯示有關的哪個java類沒有從IPage家族繼承。

          53.使用ant時給出的路徑好象不允許出現空格。

          54.由于使用ant時用junit做測試的話,classpath中出現j2ee.jar的話,問題多多。例如xml格式的log文件生成不了,莫名其妙的NullPointException等。所以我設置了兩個包個包含j2ee.jar,為編譯用;一個沒有,為junit用

          55.進行單元測試時,在查詢返回后應馬上assertNotNull(),這樣可以更快速的定位NullPointException

          56.要使用ResourceBundle的話,要千萬小心。必須用日志記錄下它的狀態。還有該屬性文件應該放在classes下面。

          57.當要顯示任何頁面時,都被提示無效,那么應該檢查一下lib目錄了,還有一些很奇怪的異常,例如你明明可以找到一個類但是服務器卻提示ClassNotDefException,那么估計是缺少了該類所必須的包了。或者多了不兼容的包,如, xdoclet系列包不被struts的lib目錄所兼容

          58.編寫clone時從Java編程思想(2nd)上學到的(732):
          .引數傳遞過程中會自動產生別名(alias)。
          .沒有局域對象(local objects),只有局域性的(local)references。
          .reference受范圍(scope)的限制,對象則否。
          .對象的壽命從來不是Java的討論議題(因為有垃圾回收機制)

          59.try catch finally的域居然是分離的。

          60.jsp亂碼的其中一個原因:charset="gb2312" 等號"="的兩邊不允許有空格。

          61.我的基于Displaytag的簡單報表解決方案。
          http://displaytag.sourceforge.net/
          下載displaytag.jar和displaytag.tld
          displaytag.jar放在lib目錄,而displaytag.tld放在WEB-INF目錄,在web.xml中為displaytag.tld聲明一下。
          <taglib>
          <taglib-uri>http://displaytag.org</taglib-uri>
          <taglib-location>/WEB-INF/displaytag.tld</taglib-location>
          </taglib>
          在jsp里使用前,加上
          <%@ taglib uri="http://displaytag.org" prefix="display" %>

          注意該軟件有個bug,他要用的一個包common-lang.jar版本必須在2.0以上。
          如果碰到下面異常,則應堅持一下是否該包的版本問題。
          java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.capitalize(Ljava/lang/String;)Ljava/lang/String;
          然后就可放心使用了
          <display:column property = "xxx"/>其中xxx為對象中的帶有getter的變量>。
          定義表格的樣子,用css定義。如
          TABLE.its THEAD TR {
          BACKGROUND-COLOR: #69c
          }
          TABLE.its TR.even {
          BACKGROUND-COLOR: #def
          }
          在使用分頁時,可能會出現這種情況,點擊其他頁時,彈出下載窗口,讓你下載當前jsp頁面,這是因為你在當前頁面讀取了數據的緣故。解決辦法為在action里讀取數據而不是在jsp里。可以參考
          http://www.displaytag.org/example-paging.jsp?d-26189-p=2

          62.使用displaytag時,在一列中放入多個元素
          必須在display:table中定義一個id
          <display:table name = "allBooks" class = "its" pagesize = "5" id = "item">
          <display:column title = "操作">
          <a href = "/Bookshop/admin/bookManagement.do?action=view&id=<%=((Book)item).getId()%>" target = "_blank" >查看</a>
          <a href = "/Bookshop/admin/bookManagement.do?action=edit&id=<%=((Book)item).getId()%>">編輯</a>
          <a href = "/Bookshop/admin/bookManagement.do?action=delete&id=<%=((Book)item).getId()%>">刪除</a>
          </display:column>
          要在displaytag中使用鏈接,必須具備paramId,否則不顯示為鏈接
          <display:column property = "product.name" href = "viewDetailV2.0.jsp" title = "書名" paramId="item" paramProperty="product.id"/>
          可以這樣使用display
          <display:column property = "product.id" title = "ID"/>
          其中product為對象

          63.<bean:write name = "xxxx" property = "xxx"/> 可以直接取到session.getAttribute()取到的東西。

          64.實驗struts-upload例子時要注意的地方:
          1.If you would rather write this file to another file, please check here:
          這一行要打鉤
          2.If you checked the box to write to a file, please specify the file path here:
          在這里要重命名如:c:\b.jpg
          上傳成功的話,會出現提示 The file has been written to "c:\b.jpg"

          65.Hibernate的like可以這么用:
          Query query = session.createQuery("from src.persistent.Book as book where upper(book.name) like :name ");
          query.setString("name", "%");
          result = query.list();

          66.Hibernate出現 duplicate import : className
          異常也可能是因為忘了為持久類在configuration中addClass了

          67.<logic:iterate id = "author" name = "authors">
          name所引用的是session里的attribute。

          68.如果發現要出現詢問下載的情況,有可能是因為要跳轉的頁面出現了問題。試試在要跳轉到的頁刪掉
          <%@ page contentType="text/html; charset=gb2312"%>

          69.如果JSP頁面跳轉時出現下邊的錯誤信息:
          The request sent by the client was syntactically incorrect (Invalid path /web/shoppingCart was requested).
          原因是struts-config的action = "x" 寫成了 action = "x.do"

          70.在struts中,strut-config.xml中,forward時使用redirect = "true"可以將.do重定向為.jsp

          71.以后在判斷相等性之前先用logger把兩個值顯示出來。

          72.從session里getAttribute后,修改并不需要重新setAttribute一次。

          73.在hibernate中使用subclass是一棵繼承樹共用一個表,僅生成個mapping。
          每個類中必須有discrimator-value。在最上層的類中必須聲明:
          @hibernate.discriminator column = "class"。
          不可以將子類添加到configuration里去。(即不可addClass(子類))
          使用Xdoclet的建立subclass的例子(該類是父類)
          /**
          * @hibernate.class discriminator-value = "customer"
          * @hibernate.discriminator column = "class"
          */

          而使用joined-subclass則是一類一表,也不許將子類添加進configuration里去。
          /**
          * @hibernate.joined-subclass
          * @hibernate.joined-subclass-key
          * column="customer_id"
          */
          如果發現生成的mapping文件中joined-subclass的key column為空,那么可能是@hibernate.joined-subclass-key這句沒有寫對。
          用joined-subclass生成的表,仔細看。Member extends Customer
          create table Customer (
          id VARCHAR2(255) not null,
          name VARCHAR2(255),
          description VARCHAR2(255),
          primary key (id)
          )
          create table Member (
          customer_id VARCHAR2(255) not null,
          password VARCHAR2(255),
          primary key (customer_id)
          )

          74.在junit中盡量使用assertEquals代替assertTrue;

          75.Hibernate
          如果Child extends Parent
          那么from Parent as parent 也將會將Child選出來,而from Child as child 則不會選出Parent

          76.Hibernate
          使用hibernate的one-to-one時,應該兩方向都set,否則會報save NullPointException
          parent.setChild(child);
          child.setParent(parent);

          77.Hibernate
          遇到下邊的異常,估計是與因為外鍵出現了問題:

          java.lang.NullPointerException
          at net.sf.hibernate.persister.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:675)
          at net.sf.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:33)
          如:
          * @hibernate.id generator-class = "foreign"
          * @hibernate.generator-param name = "property" value = "customer"
          * @hibernate.one-to-one name = "custmoer" class = "src.persistent.Customer"
          value的值和one-to-one 中name的值不符,則會出現上邊的異常。如果不顯示指定name則默認取成員變量名

          Customer a
          則name = "a" 需要小心的是不是類名。所以,以后最好顯示指定名字為好。

          78.出現異常:
          Exceptionobject references an unsaved transient instance - save the transient instance before flushing: src.persistent.Product
          原因沒有為某對象進行set設置, 如上邊的這個就是某對象沒有調用setProduct

          79.
          "xxx action = "/a" 不用.do和根目錄名
          <a href = "b.do" 需要.do和根目錄名

          80.
          Caused by: java.sql.SQLException: ORA-02291: 違反完整約束條件 (BOOKSHOP.FK4AAEE
          47687CCA6B) - 未找到父項關鍵字
          如果你覺得該做的e是出現這個問題,那么檢查一下,是否將類的繼承關系在hibernate的mapping中反映了出來。joined-subclass或subclass
          例如a extends b
          如果持久類c 需要Set的是持久類a,那么你把b傳入,而b又沒有在mapping中將父子關系反映出來的話,就會出現該異常

          81.使用DynaActionForm需要注意的問題
          在struts-config聲明
          <form-bean name="memberloginForm" dynamic ="true" type="org.apache.struts.action.DynaActionForm">
          <form-property name = "name" type = "java.lang.String"/>
          <form-property name = "password" type = "java.lang.String"/>
          </form-bean>
          在Action里將form強制轉化成DynaActionForm,然后get("屬性名")就可以了

          82.struts的validate最簡單實現
          1.首先準備好錯誤提示信息。
          xxx.properties 里
          errors.required={0} is required.(默認已有)
          2.Form必須從ValidatorForm繼承
          3.不可以重載ValidatorForm的validate函數
          4.在validate.xml中為你想驗證的表單進行驗證設計。例如
          <form name="logonForm">
          <field property="userName" depends="required">
          <arg0 key="prompt.userName"/>
          (該參數將在顯示錯誤信息是從xxx.properties讀取prompt.userName,填入{}方括號里,取代0。如果是arg1將將填入{1}位置,以此類推。
          </field>
          </form>
          不需要在action里做任何處理。只管forward就行了。作為forward的目標頁,不需要任何有關用于處理出錯信息的處理。

          83.服務器報
          The requested resource (/xxxx/xxx.htm) is not available.的很奇怪的一個的可能原因
          在web.xml中定義的tld,沒有找到
          或者是lib目錄下的包太多出現了問題。

          <taglib>
          <taglib-uri>/spring</taglib-uri>
          <taglib-location>/WEB-INF/spring.tld</taglib-location>
          </taglib>
          如WEB-INF目錄下不存在spring.tld的話,就會報上邊的錯誤

          84.
          spring的xxx-servlet.xml的使用SimpleFormController系列的類問題:
          <bean id = "priceIncreaseForm" class="PriceIncreaseFormController">
          <property name="sessionForm"><value>true</value></property>
          <property name="beanName"><value>priceIncrease</value></property>
          <property name="commandClass"><value>PriceIncrease</value></property>
          <property name="formView"><value>priceIncrease</value></property>
          <property name="successView"><value>hello</value></property>
          <property name="productManager">
          <ref bean="prodMan"/>
          </property>
          </bean>
          這里要注意幾個問題:
          (1)上邊的PriceIncrease是了類名,必須在classes里存在該類,否則報:
          PropertyVetoExceptionsException: 1 errors:-- ErrorCodedPropertyVetoException: message=[Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property named 'commandClass'; nested exception is:
          java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease]; errorCode=[typeMismatch]
          java.lang.IllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease
          (2)<property name="formView"><value>priceIncrease</value></property>
          這一行必不可少,priceIncrease是頁面的名字,他將會是prefix + priceIncrease + suffix
          如果缺少該行,則報:
          javax.servlet.ServletException: Error in ModelAndView object or View resolution encountered by servlet with name 'pocketSpring': View to render cannot be null with ModelAndView [ModelAndView: materialized View is [null]; Model=[{priceIncrease=PriceIncrease@148e798, org.springframework.validation.BindException.priceIncrease=org.springframework.validation.BindException: BindException: 0 errors}]]

          使用Errors的rejectValue相關問題:
          rejectValue(java.lang.String field, java.lang.String errorCode, java.lang.Object[] errorArgs, java.lang.String defaultMessage)
          Reject the given field of the current object, using the given error description.
          當前對象指的是xxx-servlet.xml中與validator類有聯系的哪個對象。

          第一個是:當前對象的屬性名,必須存在
          第二個是:將要從屬性文件中讀取的消息
          第三個是:傳遞給所讀取的消息的參數,如:
          error.too-low=You have to specify a percentage higher than {0}!
          第四個是:當從屬性文件中讀取消息不成功時,所reject的值

          以后從request中讀取parameter可以借用spring的RequestUtils包里的
          getStringParameter
          public static java.lang.String getStringParameter(javax.servlet.http.HttpServletRequest request,
          &bsp; java.lang.String name,
          java.lang.String defaultVal)
          Get a string parameter, with a fallback value. Never throws an exception. Can pass a distinguished value to default to enable checks of whether it was supplied.
          不會拋異常
          Hibernate的問題:2.1rc的問題
          INFO: cache provider: net.sf.ehcache.hibernate.Provider
          net.sf.hibernate.HibernateException: could not instantiate CacheProvider:
          解決辦法,2.1rc比以前的版本多需要一個包
          ehcache.jar

          85.static的問題
          static函數只可以訪問static成員變量。
          而static變量可以被任何成員函數訪問。

          86.
          java.lang.NoClassDefFoundError: javax/transaction/Synchronization];
          需要添加JTA.jar
          posted @ 2008-01-18 13:25 kylixlu 閱讀(649) | 評論 (0)編輯 收藏
               摘要:         最近HR要求把公司的HRMS一些關鍵數據加密,加密的數據應該包括兩方面,一個是當然Spring讀取的屬性文件(e.g :System.properties),還有一個是數據庫的關鍵字段(不知道當初設計時為什么沒有實現加密,我真是搞不懂,現在扔給我,惡改ing)。     ...  閱讀全文
          posted @ 2008-01-13 13:18 kylixlu 閱讀(2295) | 評論 (2)編輯 收藏
          出錯狀況:
          我用的是Windows XP,在“服務”中啟動“OracleOraHome90TNSListener”失敗,說是
          在 本地計算機 無法啟動 OracleOraHome90TNSListener 服務。

          錯誤 3: 系統找不到指定的路徑。

          于是,我在CMD中輸入“LSNRCTL”

          LSNRCTL for 32-bit Windows: Version 9.0.1.1.1 - Production on 28-1月 -2005 10:56
          :54

          Copyright (c) 1991, 2001, Oracle Corporation.  All rights reserved.

          歡迎來到LSNRCTL,請鍵入"help"以獲得信息。

          LSNRCTL> start
          啟動tnslsnr:請稍候...

          Failed to start service, error 3.
          TNS-12560: TNS: 協議適配器錯誤
          TNS-00530: 協議適配器錯誤
            32-bit Windows Error: 3: No such process
           
           
          解決辦法:
          1.你修改了主機名,如果是的話,你可以把主機名改回來,然后重起計算機后,就可以找到監聽程序了.
          2.由于你的錯誤刪除了監聽程序的路徑,要恢復很簡單:點開始->運行輸入"regedit"然后在查找里輸入OracleOraHome90TNSListener去查找.如果找到后你就要增加一項ImagePath,定義成字符集,路徑為: "盤符:\oracle\ora90\bin\tnslsnr".添加完后繼續按F3來找!修改同上.至到搜索完畢為止!此方法成功幾率為90%以上
          posted @ 2008-01-13 12:38 kylixlu 閱讀(311) | 評論 (0)編輯 收藏
          主要就我所了解的J2EE開發的框架或開源項目做個介紹,可以根據需求選用適當的開源組件進行開發。主要還是以Spring為核心,也總結了一些以前web開發常用的開源工具和開源類庫

            1持久層:

            1)Hibernate

            這個不用介紹了,用的很頻繁,用的比較多的是映射,包括繼承映射和父子表映射

            對于DAO在這里介紹個在它基礎上開發的包bba96,目前最新版本是bba96 2.0它對Hibernate進行了封裝, 查詢功能包括執行hsql或者sql查詢/更新的方法,如果你要多層次邏輯的條件查詢可以自己組裝QueryObject.可以參考它做HibernateDAO.也可以直接利用它

            2) iBATIS

            另一個ORM工具,Apache的,沒有Hibernate那么集成,自由度比較大

            2:SpringMVC

            原理說明和快速入門:

            配置文件為:

            Spring的配置文件默認為WEB-INF/xxxx-servelet.xm其中xxx為web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name.

            Action分發:

            Spring將按照配置文件定義的URL,Mapping到具體Controller類,再根據URL里的action= xxx或其他參數,利用反射調用Controller里對應的Action方法。

            輸入數據綁定:

            Spring提供Binder 通過名字的一一對應反射綁定Pojo,也可以直接從request.getParameter()取數據。

            輸入數據驗證

            Sping 提供了Validator接口當然還可以使用開源的Commons-Validaor支持最好

            Interceptor(攔截器)

            Spring的攔截器提供接口需要自己編寫,在這點不如WebWork做的好。全面

            (這里提一下WebWork和Struts的區別最主要的區別在于WebWork在建立一個Action時是新New一個對象而Struts是SingleMoule所有的都繼承它的一個Action,所以根據項目需要合適的選擇。)

            3:View層

            1) 標簽庫:JSP2.0/JSTL

            由于Webwork或Spring的標簽確實很有限,一般view層用JSTL標簽,而且據說JSTL設計很好速度是所有標簽中最快的使用起來也很簡單

            2) 富客戶端:DOJO Widgets, YUI(YahooUI),FCKEditor, Coolest日歷控件

            Dojo主要提供Tree, Tab等富客戶端控件,可以用其進行輔助客戶端開發

            YahooUI和DOJO一樣它有自己的一套javascript調試控制臺,主要支持ajax開發也有很多Tree,Table,Menu等富客戶端控件

            FCKEditor 最流行的文本編輯器

            Coolest日歷控件 目前很多日歷控件可用,集成在項目中也比較簡單,這個只是其中的一個,界面不錯的說……

            3) JavaScript:Prototype.js

            Prototype.js作為javascript的成功的開源框架,封裝了很多好用的功能,通過它很容易編寫AJAX應用,現在AJAX技術逐漸成熟,框架資源比較豐富,比如YUI,DWR等等,也是因為JavaScript沒有合適的調試工具,所以沒有必要從零開始編寫AJAX應用,個人認為多用一些成熟的Ajax框架實現無刷新更新頁面是不錯的選擇。

            4)表格控件:Display Tag ,Extreme Table

            這兩個的功能差不多,都是View層表格的生成,界面也比較相向,可以導出Excel,Pdf,對Spring支持很容易。

            相比較而言比較推薦ExtremeTable,它的設計很好功能上比DisplayTag多一些,支持Ajax,封裝了一些攔截器,而且最方面的是在主頁wiki中有詳細的中文使用文檔。

            5):OSCache

            OSCache是OpenSymphony組織提供的一個J2EE架構中Web應用層的緩存技術實現組件,Cache是一種用于提高系統響應速度、改善系統運行性能的技術。尤其是在Web應用中,通過緩存頁面的輸出結果,可以很顯著的改善系統的穩定性和運行性能。

            它主要用在處理短時間或一定時間內一些數據或頁面不會發生變化,或將一些不變的統計報表,緩沖在內存,可以充分的減輕服務器的壓力,防治負載平衡,快速重啟服務器(通過硬盤緩存)。

            6)SiteMesh

            sitemesh應用Decorator模式主要用于提高頁面的可維護性和復用性,其原理是用Filter截取request和response,把頁面組件head,content,banner結合為一個完整的視圖。通常我們都是用include標簽在每個jsp頁面中來不斷的包含各種header, stylesheet, scripts and footer,現在,在sitemesh的幫助下,我們刪掉他們輕松達到復合視圖模式。

            Sitemesh也是 OpenSymphony的一個項目現在最近的版本是2.2,目前OpenSymphony自從04年就沒有更新的版本了……感覺它還是比較有創新的一種頁面組裝方式, OpenSymphony開源組織的代碼一般寫的比較漂亮,可以改其源代碼對自己的項目進行適配。

            測試發現Sitemesh還存在一些問題,比如中文問題,它的默認編碼是iso-8859-1在使用時候需要做一些改動。

            7)CSS,XHTML

            這個不用說了,遵循W3C標準的web頁面開發。

            8)分頁標簽: pager-taglib組件

            Pager-taglib 是一套分頁標簽庫,可以靈活地實現多種不同風格的分頁導航頁面,并且可以很好的與服務器分頁邏輯分離。使用起來也比較簡單。

            9)Form: Jodd Form taglib

            Jodd Form taglib使用比較簡單,只要把

            的頭尾以包住

            就會自動綁定mybean, 自動綁定mybean的所有同名屬性到普通html標記input, selectbox, checkbox,radiobox……在這些input框里不用再寫任何代碼…

            10)Ajax:DWR

            J2EE應用最常用的ajax框架

            11)報表 圖表

            Eclipse BIRT功能比較強大,也很龐大……好幾十M,一般沒有特別需求或別的圖表設計軟件可以解決的不用它

            JasperReports+ iReport是一個基于Java的開源報表工具,它可以在Java環境下像其它IDE報表工具一樣來制作報表。JasperReports支持PDF、HTML、XLS、CSV和XML文件輸出格式。JasperReports是當前Java開發者最常用的報表工具。

            JFreeChart主要是用來制作各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。

            琴棋報表,國產的……重點推薦,適合中國的情況,開放源代碼,使用完全免費。純JAVA開發,適用多種系統平臺。特別適合B/S結構的系統。官方網站有其優點介紹,看來用它還是不錯的選擇,最重要的是支持國產呵呵

            4:權限控制: Acegi

            Acegi是Spring Framework 下最成熟的安全系統,它提供了強大靈活的企業級安全服務,如完善的認證和授權機制,Http資源訪問控制,Method 調用訪問控制等等,支持CAS

            (耶魯大學的單點登陸技術,這個單點登陸方案比較出名。我也進行過配置使用,可以根據項目需要,如果用戶分布在不同的地方不同的系統通用一套登陸口令可以用它進行解決,一般注冊機登陸機就是這樣解決的)

            Acegi只是于Spring結合最好的安全框架,功能比較強大,當然還有一些其他的安全框架,這里列舉一些比較流行的是我從網上找到的,使用方法看其官方文檔把…

            JAAS, Seraph, jSai - Servlet Security, Gabriel, JOSSO, Kasai, jPAM, OpenSAML都是些安全控制的框架……真夠多的呵呵

            5:全文檢索

            1) Lucene

            Lucene是一套全文索引接口,可以通過它將數據進行倒排文件處理加入索引文件,它的索引速度和查詢速度是相當快的,查詢百萬級數據毫秒級出結果,現在最火的Apache開源項目,版本更新速度很快現在已經到了2.0,每個版本更新的都比較大,目前用的最多的版本應該是1.4.3,但它有個不太方面的地方單個索引文件有2G文件限制,現在2.0版本沒有這個限制,我研究的比較多,它的擴展性比較好,可以很方面的擴充其分詞接口和查詢接口。

            基于它的開發的系統很多,比如最常用的Eclipse的搜索功能,還有一些開源的軟件比如Compass,Nutch,Lius,還有我最近做的InSearch(企業級FTP文件網頁搜索)

            6:公共Util類

            主要是Jakarta-Commons類庫,其中最常用得是以下幾個類庫

            1) Jakarta-Commons-Language

            最常用得類是StringUtils類,提供了使用的字符串處理的常用方法效率比較高

            2) Jakarta-Commons-Beantuils

            主要用Beantuils能夠獲得反射函數封裝及對嵌套屬性,map,array型屬性的讀取。

            3) Jakarta-Commons-Collections

            里面有很多Utils方法

            7 日志管理

            Log4J

            任務是日志記錄,分為Info,Warn,error幾個層次可以更好的調試程序

            8 開源的J2EE框架

            1) Appfuse

            Appfuse是Matt Raible 開發的一個指導性的入門級J2EE框架, 它對如何集成流行的Spring、Hibernate、iBatis、Struts、Xdcolet、JUnit等基礎框架給出了示范。 在持久層,AppFuse采用了Hibernate O/R映射工具;在容器方面,它采用了Spring,用戶可以自由選擇Struts、Spring/MVC,Webwork,JSF這幾個Web框架。

            2) SpringSide

            。SpringSide較完整的演示了企業應用的各個方面,是一個電子商務網站的應用 SpringSide也大量參考了Appfuse中的優秀經驗。最重要的是它是國內的一個開源項目,可以了解到國內現在的一些實際技術動態和方向很有指導意義…

            9:模版 Template

            主要有Veloctiy和Freemarker

            模板用Servlet提供的數據動態地生成 HTML.編譯器速度快,輸出接近靜態HTML 頁面的速度。

            10:工作流

            我所知道比較出名的主要有JBpm Shark Osworkflow,由于對它沒有過多的研究所以還不是很清楚之間有什么區別。

            項目管理軟件

            dotProject:是一個基于LAMP的開源項目管理軟件。最出名的項目管理軟件

            JIRA: 項目計劃,任務安排,錯誤管理

            Bugzilla:提交和管理bug,和eclipse集成,可以通過安裝MyEclipse配置一下即可使用

            BugFree借鑒微軟公司軟件研發理念、免費開放源代碼、基于Web的精簡版Bug管理

            CVS:這個就不介紹了都在用。

            SVN: SubVersion已逐漸超越CVS,更適應于JavaEE的項目。Apache用了它很久后,Sourceforge剛剛推出SVN的支持。

            測試用例:主要JUnit單元測試,編寫TestCase,Spring也對Junit做了很好的支持

          posted @ 2007-12-28 13:54 kylixlu 閱讀(157) | 評論 (0)編輯 收藏

          一.JSP頁面部分

            1. 頁面文字處理

            1.1概述

            由于STRUTS提供了很好的國際化的支持,因此JSP頁面可以STRUTS的這一特性做到國際化。

            STRUTS允許將不同語言的文字寫在多個資源文件中,每個資源對應一種語言,而在JSP頁面上則通過STRUTS標簽< bean:message>來顯示文字,該標簽可以根據瀏覽器的當前語言設置確定從對應的語種資源文件中取出字符串,顯示在頁面上。

            1.2資源文件

            實現國際化,首先需要準備好資源文件,需要支持的語言各對應一個。資源文件一定要用支持多國語言文字的文本編輯器(如WORD,一定不能用NOTEPAD、UE等)編寫,其格式如下:

            # Project international

            index.title=XX信息系統

            index.copyright=XXX有限公司 版權所有

            其中以#開頭的行是注釋,其它的行都是KEY=VALUE的形式,定義了一個KEY對應當前語言下的文字。保存資源文件時,需要在文件類型選項中選擇純文本類型,編碼選擇其它>>UTF-8,注意資源文件的擴展名為.properties,文件名可以任意取。

            這樣保存的資源文件還不能直接被STRUTS使用,JDK提供了一個工具native2ascii對編寫的資源文件進行轉換,該工具位于%JDK%/bin/目錄下,一般在JDK正確安裝后可以直接在命令行使用。使用native2ascii工具轉換的資源的文件的命令行格式如下:

            native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties

            其中-encoding參數指明編寫的資源文件的編碼格式,這里必須與編輯時選擇保存的編碼格式一致,后面兩個參數分別是需要轉換的資源文件名和轉換后保存的資源文件名。

            轉換后的資源文件名都必須以一個特定的前輟開頭,該前輟寫在struts-config.xml配置中,后輟是對應語言的簡稱,如

            英文(美國) ApplicationResources _en_US.properties

            中文(簡體)ApplicationResources _zh_CN.properties

            中文(繁體)ApplicationResources _tw.properties

            泰語 ApplicationResources _th.properties

            資源文件的存放目錄可以是/WEB-INF/classes/下的任意目錄,為了便于管理 ,建議在/WEB-INF/ classes/下建立目錄resources,將所有的資源文件都放在該目錄下。STRUTS通過配置文件struts-config.xml配置資源文件的所在位置,如:

            < message-resources parameter="resources.ApplicationResources" />

          其中目錄以包的方式表示。

            1.3 JSP頁面顯示

            為了支持國際化,JSP頁面的編碼方式需要設成UTF-8,即在頁面的頭部加入以下幾行:

            < %@ page contentType="text/html; charset=UTF-8" %>

            < %@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

            ……(STRUTS及其它標簽庫引用)

            < html:html locale="true">

            JSP頁面的中文字要全部寫到資源文件中,注意每種語言資源文件都要寫到,否則在使用某種語言訪問系統時可能會報錯。JSP中使用STRUTS標簽< bean:message key="index.title"/>顯示資源文件中定義的字符串。這樣當改變瀏覽器的當前語言后,頁面會自動取得與瀏覽器當前語言對應的資源文件中的字符串顯示在頁面上。

            對于在ACTION的JAVA代碼中直接設置的變量,如需要在JSP頁面上進行顯示,那么在設置變量時也需要從資源文件中通過KEY取到當前語言的字符串,再使用request.setAttribute方法進行設置,這樣在JSP頁面上使用< bean:write>標簽展現設置的變量才會對應不同的語言會呈現不同的字符串。

            在JAVA代碼中取資源文件的信息的方法是,首先通過Globals.MESSAGES_KEY從request或session變量中取得資源對象(MessageResources),再調用MessageResources.getMessage方法即可取得相應的字符串,該方法需的兩個參數是當前語言區域設置(Locale)和字符串的KEY,其中當前語言區域設置(Locale)保存在SESSION變量中,其變量名為Globals.LOCALE_KEY,該變量在下一節手工設置語言時也有提到。

            1.4手工設置顯示語言

            用瀏覽器的語言設置來決定系統采用哪種語言展現可能會出現一個問題,就是用戶的瀏覽器語言與他想要使用系統的語言不一致的情況,如某客戶瀏覽器的語言設置為英文,但他還是在使用主站系統時看到的是中文界面。該問題可以通過手工選擇語言來解決,在程序中可以通過設置名為Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION變量,也能改變系統中當前語言的設置,代碼類似于:

             Locale newLocale = new Locale( language, country );
            session.setAttribute( Globals.LOCALE_KEY, newLocale );
            其中變量language, country 可以通過用戶的選擇設置相應的值,各種語言的對應值參考http://www.unicode.org/unicode/onlinedat/countries.html。

            2. 帶有文字的圖片處理

            2.1靜態圖片

            帶有文字的圖片應該也要根據語言的不同而顯示不同的圖片,但圖片本身不是文本信息,無法直接用< bean:message>標簽來完成國際化操作。但由于頁面上顯示圖片取決于< image>標簽的src屬性,因此可以為每個圖片對應各種語言的都準備一個版本,文件名或路徑有所差異,然后將每種語言對應的圖片的路徑及文件名放在資源文件中,而在JSP頁面上< image>標簽的src屬性由< bean:message>標簽指定,這樣即可以完成圖片的國際化。

            2.2 JAVA生成動態圖片

            由于生成動態圖片是在服務器端進行,因此同樣需要將生成圖形字符的靜態部分放在資源文件中,如圖形名稱等,從資源文件中取字符串的方法在JSP頁面顯示部分已有說明;從數據庫中取出的部分可以不用做任何處理,直接從數據庫取出與靜態部分拼裝成圖形字符串即可,數據庫相關設置在數據庫部分有詳細說明。

            3. 頁面提交參數處理

            頁面上向WEB服務器提交參數有兩種方式,一是在訪問URL后面附加上request變量,這樣的變量在服務器端可以通過request.getParameter方法得到,另一種方式是在JSP頁面上用FORM表單方式提交,這種方法提交的變量在服務器端可以通過form的getXXX方法取到變量的值。

           當WEB系統需要國際化時,JSP頁面的編碼方式被指定為UTF-8(前面已有說明),也就是說頁面上可以處理各國文字,在使用URL傳遞變量時需要將變量用JS方法encodeURI方法處理過,才能在服務器端得到正確的值,如

            location.href="int/do/common/queryUserInfo.do?sqlcode=QUERY0001&hh="+encodeURI(document.all.hh.value)+"&hm="+encodeURI(document.all.hm.value)+"&bmbh="+encodeURI(document.all.bmbh.value);

            由于這種方式需要對每個request變量調用encodeURI方法,處理起來比較麻煩,但用FORM表單提交的方式即不需要進行任何處理,因此在開發時應盡量使用FORM表單提交的方式進行數據傳遞。

            如果需要JAVA代碼中生成URL,則其中傳遞的參數也需要調用URLEncoder.encode方法進行處理,并指定編碼方式為"UTF-8"。

            在服務器端取得客戶端傳遞的參數時也需要對參數進行字符集的轉換后才可以下確使用,如

            strString = new String(strString.getBytes("ISO-8859-1"), "GBK");

            但如此對每個變量都需要這樣處理也是非常麻煩,實際上可以利用servlet的Filter機制進行統一處理。在調用servlet(包括struts)時,在到達實際的servlet類前,會首先調用指定的Filter進行處理,Filter處理完成后再決定是否交給實際請求的servlet類處理。

            利用這一點,我們可以新建一個類繼承自Filter基類,重載doFilter方法,并在該方法中加入

            request.setCharacterEncoding(“UTF-8”);

            指定客戶端的字符集為UTF-8(默認客戶端的字符集為ISO8859),這樣在ACTION類中取得的參數就不需要進行任何的轉換處理了。

            配置Filter的地方在web.xml,在web.xml文件中加入類似這樣的配置即可以使自定義的Filter生效:

             < filter>
            < filter-name>charsetfilter< /filter-name>
            < filter-class> international.CharsetFilter< /filter-class>
            < init-param>
            < param-name>encoding< /param-name>
            < param-value>UTF-8< /param-value>
            < /init-param>
            < /filter>
            < filter-mapping>
            < filter-name>charsetfilter< /filter-name>
            < url-pattern>/*< /url-pattern>
            < /filter-mapping>
            二.數據庫設置

            在數據庫建庫時需要將數據庫的字符集指定為unicode編碼類型,以支持多種語言。

            有一點需要特別說明的是UTF-8是用3個字節表示一個漢字,這點在進行表結構設計時需要注意,適當設置字段的長度。

          posted @ 2007-12-28 09:54 kylixlu 閱讀(200) | 評論 (0)編輯 收藏
          僅列出標題
          共14頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 
          主站蜘蛛池模板: 海原县| 绍兴市| 锦屏县| 碌曲县| 清丰县| 右玉县| 北京市| 遂昌县| 榆林市| 始兴县| 旺苍县| 乐昌市| 连南| 磴口县| 宁津县| 临安市| 武川县| 衢州市| 葵青区| 奇台县| 洛南县| 临朐县| 藁城市| 昭觉县| 桦川县| 朝阳县| 洛南县| 新民市| 筠连县| 高雄市| 鲁山县| 通渭县| 呼玛县| 新兴县| 商洛市| 白水县| 花莲县| 乌鲁木齐市| 阿尔山市| 巨野县| 焦作市|