安裝篇
一,下載安裝 j2sdk1.4(www.sun.com))或以上,設(shè)置 CLASSPATH,java_home。
二,下載服務(wù)器,免費(fèi)版本的有 tomcat,resin,當(dāng)然也還有 weblogic之類的巨無霸,不過得看你電腦的配置是否承受的了!
這里只以resin來說明,其他的配置都差不多,可以查看各個(gè)服務(wù)器自帶的說明文件。
resin 服務(wù)器可以在 caucho.com下載,選擇合適的版本,下載解壓縮就可以直接使用。
這里resin有一個(gè) resin-ee版本,這個(gè)主要是帶ejb功能支持的。 如果用不到ejb,一般的就足夠了。
三,然后就是數(shù)據(jù)庫,有很多數(shù)據(jù)庫產(chǎn)品可以選擇,DB2,Oracle,MSSQL,MySQL等等太多了。這里我選擇MySQL,不僅因?yàn)樗敲赓M(fèi)的,而且它的4.0版本在繼承以前版本的快速穩(wěn)定的基礎(chǔ)上,整合了InnoDB(http://www.innodb.com)先進(jìn)的事務(wù)處理機(jī)制。相信伴隨著Linux的壯大,它將在商業(yè)數(shù)據(jù)庫市場占的一席之地。不過就數(shù)據(jù)庫本身,它還缺少子查詢等強(qiáng)大功能的支持。
安裝就不多說了,配置好用戶名,密碼。 然后就可以下載 MySQL-Front 來可視化操作數(shù)據(jù)庫。
四,在Java編程上,一個(gè)IDE的功能顯然不可缺少,現(xiàn)在流行的IDE很多,有JBuilder,Eclipse,IntellJ IDEA,JCreator等等,其中 eclipse借著開源東風(fēng),依靠強(qiáng)大的插件功能被譽(yù)為最有前途的工具,JBuilder從來都最強(qiáng)大功能的java工具,不過大到我的電腦實(shí)在運(yùn)行不了,窮啊,可沒錢配新電腦。所以我還是喜歡JCreator,小巧而又功能不俗,應(yīng)付小規(guī)模的應(yīng)用綽綽有余。編譯開發(fā)時(shí)要想獲得提示支持,需要在 configure--option--JDK Profiles 導(dǎo)入jar文件。
五,一個(gè)站點(diǎn)前臺(tái)的界面開發(fā),當(dāng)然離不開大名鼎鼎的 Dreamweaver 了,它支持jsp,asp等很多語言的開發(fā)。特別是最近的Dreamweaver MX 2004 增強(qiáng)了站點(diǎn)的功能,可以方便的對一個(gè)站點(diǎn)進(jìn)行控制。面對struts的前臺(tái)自定義標(biāo)簽,有一個(gè)mxp插件可以用來支持顯示sturts的標(biāo)簽。使用前還要在編輯--標(biāo)簽庫 里面導(dǎo)入.tld文件,目前只支持html,和bean 兩個(gè)標(biāo)簽。
配置篇
一,resin虛擬站點(diǎn)配置
然后在定義的目錄下面建立站點(diǎn)。
二,Dreamweaver站點(diǎn)的配置就不多說了。
三,Struts的配置
這里我們使用的是struts1.1,下載并解壓縮到臨時(shí)文件夾,就假設(shè)是tem文件夾吧。
首先拷貝tem/lib/下面所有的.tld文件到站點(diǎn)的/WEB-INF/目錄下,再拷貝所有的.jar文件到/WEB-INF/lib/目錄下,最后web.xml文件中的配置差不多如下:
四,Hibernate配置
下載并拷貝/lib目錄下的
到應(yīng)用站點(diǎn)的/lib目錄下。接下來配置 hibernate.cfg.xml文件
以上配置了數(shù)據(jù)庫連接所用的地址和用戶名,密碼等。具體參數(shù)的含義請參考官方文檔。
映射文件的內(nèi)容可以手工來寫,也可通過一些工具來自動(dòng)生成。
整個(gè)需要兩種文件: .hbm.xml配置文件 和 .java持久化對象 , 兩者是相互關(guān)聯(lián)的,.hbm.xml 對數(shù)據(jù)庫的映射還需要 .java這個(gè)bean來操作。所以整個(gè)過程需要首先設(shè)計(jì)好數(shù)據(jù)庫,然后根據(jù)數(shù)據(jù)庫導(dǎo)出 .hbm.xml文件 ,然后再導(dǎo)出 .java 文件。 有很多工具可以實(shí)現(xiàn)這個(gè)工程,我們這里采用 Middlegen-Hibernate來實(shí)現(xiàn) 數(shù)據(jù)庫到.hbm.xml文件的轉(zhuǎn)化,用Hibernate-Extension工具包中的 hbm2java 來實(shí)現(xiàn) .hbm.xml 到 .java 文件的轉(zhuǎn)化!
查找關(guān)鍵字”!ENTITY”,得到:
b) Application name
c) 輸出目錄
查找關(guān)鍵字“name="build.gen-src.dir"”,得到:
d) 對應(yīng)代碼的Package name
配置完成后,在MiddleGen 根目錄下運(yùn)行ant,就將出現(xiàn)MiddleGen的界面:
選擇需要的表,單擊窗口頂部的Generate 按鈕,MiddleGen 即為我們生成這些數(shù)據(jù)庫表所對應(yīng)的Hibernate映射文件。
接下來的工作通過Hibernate Extension 來完成,Hibernate Extension 的tools\bin目錄下包含三個(gè)工具:
1. hbm2java.bat
根據(jù)映射文件生成對應(yīng)的POJO。通過MiddleGen 我們已經(jīng)得到了映射文件,下一步就是通過hbm2java.bat工具生成對應(yīng)的POJO。
2. class2hbm.bat
根據(jù)POJO class 生成映射文件,這個(gè)工具很少用到,這里也就不再詳細(xì)介紹。
3. ddl2hbm.bat
由數(shù)據(jù)庫導(dǎo)出庫表結(jié)構(gòu),并生成映射文件以及POJO。這個(gè)功能與MiddleGen的功能重疊,但由于目前還不夠成熟(實(shí)際上已經(jīng)被廢棄,不再維護(hù)),提供的功能也有限,所以我們還是采用MiddleGen生成映射文件,之后由hbm2java根據(jù)映射文件生成POJO 的方式。
這里我們使用第一個(gè)hbm2java.bat,利用剛才生成的.hbm.xml文件自動(dòng)生成 java 文件。
為了使用這個(gè)工具,首先我們需要配置一些參數(shù),打開tools\bin\setenv.bat 文件,修改其中的JDBC_DRIVER和HIBERNATE_HOME環(huán)境變量,使其指向我們的實(shí)際JDBC Driver文件和Hibernate所在目錄。同時(shí)檢查一下環(huán)境變量CP中的各個(gè)項(xiàng)目中是否實(shí)際存在,特別是%CORELIB%下的jar文件,某些版本的發(fā)行包中,默認(rèn)配置中的文件名與實(shí)際的文件名有所出入(如%CORELIB%\commons-logging.jar, 在Hibernate 發(fā)行包中,可能實(shí)際的文件名是commons-logging-1.0.3.jar,諸如此類)。
使用hbm2java,根據(jù)MiddleGen生成的映射文件生成Java 代碼:
打開Command Window,在tools\bin目錄下執(zhí)行:
hbm2java c:\sample\org\hibernate\sample\*.xml --output=c:\sample\
通過以上步驟我們就生成了所需要的所有基本配置文件。接下來就可以來初始化這些配置啦。
實(shí)戰(zhàn)篇
在這一節(jié)我們要配置一個(gè)完整的應(yīng)用配置。其實(shí)每一個(gè)單獨(dú)拿出來都能寫本書,不過我只是側(cè)重對自己總結(jié),在以后我會(huì)不斷地把學(xué)習(xí)的經(jīng)驗(yàn)教訓(xùn)寫下來。
一,Log4j 的初始化
配置log4j.properties
配置后如下來調(diào)用,首先需要初始化配置文件,這個(gè)過程只需要一次,所以我們可以在ServletContextListener中來進(jìn)行。
這里需要你的配置文件的路徑來初始化。
初始化完成后,我們在以后的action中就可以 象下面一樣來調(diào)用:
關(guān)于 log4j 的完全使用方法,偶會(huì)在以后做詳細(xì)的說明!
二,hibernate 的初始化
首先我們要把hibernate.cfg.xml 放到應(yīng)用的 classes 目錄中,然后可以使用hibernate參考文檔提供的例子來封裝對后臺(tái)的使用。
文中DBConnectionManager.getConnection()是一個(gè)DAO類,提供連接池的實(shí)現(xiàn)。
我們使用這個(gè)con連接來創(chuàng)建一個(gè) session ,sission是一個(gè)數(shù)據(jù)庫連接操作的會(huì)話周期,它提供了強(qiáng)大的管理數(shù)據(jù)的能力。
以后我們在action的 execute 方法中就可以使用 Hi.getSession()來獲得一個(gè)會(huì)話支持。典型的應(yīng)用如下:
其中的HQL 可以參考 hibernate 官方文檔來學(xué)習(xí)。
三,Struts
struts 的配置文件 struts-config.xml 放在 應(yīng)用的 /WEB-INF/目錄下面,大致的配置如下
這里的配置有一個(gè)可視化工具叫做 struts-console,目前版本4.8,網(wǎng)上可以免費(fèi)下載的到。
配置文件其實(shí)不用去記,需要時(shí)參考一下,拷貝一個(gè)過來修改一下即可。只是這里的主要是在于設(shè)計(jì) ,設(shè)計(jì)好有什么formbean,什么action,他們的關(guān)系,等等問題。一個(gè)好的設(shè)計(jì)絕對能為后期節(jié)省大量的返工可能性。struts有一本《struts on action》,絕對是學(xué)習(xí)struts的經(jīng)典書籍,我手上有翻譯的前8章,有需要的可以聯(lián)系我。
我們這里不詳細(xì)說明各個(gè)配置,只講struts 和hibernate 合作的過程。
一個(gè)action 有一個(gè) execute 方法,當(dāng)然也可以用 perform方法,不過 perform 方法 在struts1.1已經(jīng)不推薦使用了,而使用了更強(qiáng)大的execute()方法。 package net.seerlog.action;
以上就是 struts hibernate協(xié)同工作的全部內(nèi)容了,這篇文章只能讓你了解整個(gè)過程,這里的例子不能作為實(shí)現(xiàn)的學(xué)習(xí)例子。
一,下載安裝 j2sdk1.4(www.sun.com))或以上,設(shè)置 CLASSPATH,java_home。
二,下載服務(wù)器,免費(fèi)版本的有 tomcat,resin,當(dāng)然也還有 weblogic之類的巨無霸,不過得看你電腦的配置是否承受的了!
這里只以resin來說明,其他的配置都差不多,可以查看各個(gè)服務(wù)器自帶的說明文件。
resin 服務(wù)器可以在 caucho.com下載,選擇合適的版本,下載解壓縮就可以直接使用。
這里resin有一個(gè) resin-ee版本,這個(gè)主要是帶ejb功能支持的。 如果用不到ejb,一般的就足夠了。
三,然后就是數(shù)據(jù)庫,有很多數(shù)據(jù)庫產(chǎn)品可以選擇,DB2,Oracle,MSSQL,MySQL等等太多了。這里我選擇MySQL,不僅因?yàn)樗敲赓M(fèi)的,而且它的4.0版本在繼承以前版本的快速穩(wěn)定的基礎(chǔ)上,整合了InnoDB(http://www.innodb.com)先進(jìn)的事務(wù)處理機(jī)制。相信伴隨著Linux的壯大,它將在商業(yè)數(shù)據(jù)庫市場占的一席之地。不過就數(shù)據(jù)庫本身,它還缺少子查詢等強(qiáng)大功能的支持。
安裝就不多說了,配置好用戶名,密碼。 然后就可以下載 MySQL-Front 來可視化操作數(shù)據(jù)庫。
四,在Java編程上,一個(gè)IDE的功能顯然不可缺少,現(xiàn)在流行的IDE很多,有JBuilder,Eclipse,IntellJ IDEA,JCreator等等,其中 eclipse借著開源東風(fēng),依靠強(qiáng)大的插件功能被譽(yù)為最有前途的工具,JBuilder從來都最強(qiáng)大功能的java工具,不過大到我的電腦實(shí)在運(yùn)行不了,窮啊,可沒錢配新電腦。所以我還是喜歡JCreator,小巧而又功能不俗,應(yīng)付小規(guī)模的應(yīng)用綽綽有余。編譯開發(fā)時(shí)要想獲得提示支持,需要在 configure--option--JDK Profiles 導(dǎo)入jar文件。
五,一個(gè)站點(diǎn)前臺(tái)的界面開發(fā),當(dāng)然離不開大名鼎鼎的 Dreamweaver 了,它支持jsp,asp等很多語言的開發(fā)。特別是最近的Dreamweaver MX 2004 增強(qiáng)了站點(diǎn)的功能,可以方便的對一個(gè)站點(diǎn)進(jìn)行控制。面對struts的前臺(tái)自定義標(biāo)簽,有一個(gè)mxp插件可以用來支持顯示sturts的標(biāo)簽。使用前還要在編輯--標(biāo)簽庫 里面導(dǎo)入.tld文件,目前只支持html,和bean 兩個(gè)標(biāo)簽。
配置篇
一,resin虛擬站點(diǎn)配置
<host id='yourweb:8080' app-dir='e:\blog\' class-update-interval='2'>
<web-app id='/'> <directory-servlet id='false'/> </web-app> <error-log id='log/web-error.log'/> <host> |
然后在定義的目錄下面建立站點(diǎn)。
二,Dreamweaver站點(diǎn)的配置就不多說了。
三,Struts的配置
這里我們使用的是struts1.1,下載并解壓縮到臨時(shí)文件夾,就假設(shè)是tem文件夾吧。
首先拷貝tem/lib/下面所有的.tld文件到站點(diǎn)的/WEB-INF/目錄下,再拷貝所有的.jar文件到/WEB-INF/lib/目錄下,最后web.xml文件中的配置差不多如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- The Usual Welcome File List --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Struts Tag Library Descriptors --> <taglib> <taglib-uri>/tags/struts-bean</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-html</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-logic</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-nested</taglib-uri> <taglib-location>/WEB-INF/struts-nested.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/struts-tiles</taglib-uri> <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location> </taglib> </web-app> |
四,Hibernate配置
下載并拷貝/lib目錄下的
hibernate2.jar
commons-beanutils.jar commons-collections.jar commons-dbcp.jar commons-lang.jar commons-logging.jar commons-pool.jar dom4j.jar cglib-asm.jar connector.jar |
到應(yīng)用站點(diǎn)的/lib目錄下。接下來配置 hibernate.cfg.xml文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/yourdatabase </property> <property name="hibernate.connection.driver_class"> org.gjt.mm.mysql.Driver </property> <property name="hibernate.connection.username"> yourname </property> <property name="hibernate.connection.password"> youyrpassword </property> <!?- 是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試--> <property name="show_sql">false</property> <!--dialect ,每個(gè)數(shù)據(jù)庫都有其對應(yīng)的Dialet以匹配其平臺(tái)特性--> <propertyname="dialect">net.sf.hibernate.dialect.MySQLDialect</property> <!?- 事務(wù)管理類型,這里我們使用JDBC Transaction --> <property name="transaction.factory_class"> net.sf.hibernate.transaction.JDBCTransactionFactory</property> <property name="jdbc.batch_size">10</property> <property name="jdbc.use_scrollable_resultset">true</property> <!?映射文件配置,注意配置文件名必須包含其相對于根的全路徑--> <mapping resource="net/seerlog/hbm/Cat.hbm.xml"/> </session-factory> </hibernate-configuration> |
以上配置了數(shù)據(jù)庫連接所用的地址和用戶名,密碼等。具體參數(shù)的含義請參考官方文檔。
映射文件的內(nèi)容可以手工來寫,也可通過一些工具來自動(dòng)生成。
整個(gè)需要兩種文件: .hbm.xml配置文件 和 .java持久化對象 , 兩者是相互關(guān)聯(lián)的,.hbm.xml 對數(shù)據(jù)庫的映射還需要 .java這個(gè)bean來操作。所以整個(gè)過程需要首先設(shè)計(jì)好數(shù)據(jù)庫,然后根據(jù)數(shù)據(jù)庫導(dǎo)出 .hbm.xml文件 ,然后再導(dǎo)出 .java 文件。 有很多工具可以實(shí)現(xiàn)這個(gè)工程,我們這里采用 Middlegen-Hibernate來實(shí)現(xiàn) 數(shù)據(jù)庫到.hbm.xml文件的轉(zhuǎn)化,用Hibernate-Extension工具包中的 hbm2java 來實(shí)現(xiàn) .hbm.xml 到 .java 文件的轉(zhuǎn)化!
查找關(guān)鍵字”!ENTITY”,得到:
<!DOCTYPE project [
<!ENTITY database SYSTEM "file:./config/database/hsqldb.xml"> ]> |
b) Application name
<property name="name" value="airline"/> |
c) 輸出目錄
查找關(guān)鍵字“name="build.gen-src.dir"”,得到:
<property name="build.gen-src.dir" value="${build.dir}/gen-src"/> |
d) 對應(yīng)代碼的Package name
<hibernate
destination="${build.gen-src.dir}" package="${name}.hibernate" genXDocletTags="false" genIntergratedCompositeKeys="false" javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper" /> |
配置完成后,在MiddleGen 根目錄下運(yùn)行ant,就將出現(xiàn)MiddleGen的界面:
選擇需要的表,單擊窗口頂部的Generate 按鈕,MiddleGen 即為我們生成這些數(shù)據(jù)庫表所對應(yīng)的Hibernate映射文件。
接下來的工作通過Hibernate Extension 來完成,Hibernate Extension 的tools\bin目錄下包含三個(gè)工具:
1. hbm2java.bat
根據(jù)映射文件生成對應(yīng)的POJO。通過MiddleGen 我們已經(jīng)得到了映射文件,下一步就是通過hbm2java.bat工具生成對應(yīng)的POJO。
2. class2hbm.bat
根據(jù)POJO class 生成映射文件,這個(gè)工具很少用到,這里也就不再詳細(xì)介紹。
3. ddl2hbm.bat
由數(shù)據(jù)庫導(dǎo)出庫表結(jié)構(gòu),并生成映射文件以及POJO。這個(gè)功能與MiddleGen的功能重疊,但由于目前還不夠成熟(實(shí)際上已經(jīng)被廢棄,不再維護(hù)),提供的功能也有限,所以我們還是采用MiddleGen生成映射文件,之后由hbm2java根據(jù)映射文件生成POJO 的方式。
這里我們使用第一個(gè)hbm2java.bat,利用剛才生成的.hbm.xml文件自動(dòng)生成 java 文件。
為了使用這個(gè)工具,首先我們需要配置一些參數(shù),打開tools\bin\setenv.bat 文件,修改其中的JDBC_DRIVER和HIBERNATE_HOME環(huán)境變量,使其指向我們的實(shí)際JDBC Driver文件和Hibernate所在目錄。同時(shí)檢查一下環(huán)境變量CP中的各個(gè)項(xiàng)目中是否實(shí)際存在,特別是%CORELIB%下的jar文件,某些版本的發(fā)行包中,默認(rèn)配置中的文件名與實(shí)際的文件名有所出入(如%CORELIB%\commons-logging.jar, 在Hibernate 發(fā)行包中,可能實(shí)際的文件名是commons-logging-1.0.3.jar,諸如此類)。
使用hbm2java,根據(jù)MiddleGen生成的映射文件生成Java 代碼:
打開Command Window,在tools\bin目錄下執(zhí)行:
hbm2java c:\sample\org\hibernate\sample\*.xml --output=c:\sample\
通過以上步驟我們就生成了所需要的所有基本配置文件。接下來就可以來初始化這些配置啦。
實(shí)戰(zhàn)篇
在這一節(jié)我們要配置一個(gè)完整的應(yīng)用配置。其實(shí)每一個(gè)單獨(dú)拿出來都能寫本書,不過我只是側(cè)重對自己總結(jié),在以后我會(huì)不斷地把學(xué)習(xí)的經(jīng)驗(yàn)教訓(xùn)寫下來。
一,Log4j 的初始化
配置log4j.properties
### direct log messages to stdout ###
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.out #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout %c{1}:%L - %m%n #log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n log4j.logger.seerlog=DEBUG,A2 log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender log4j.appender.A2.file=d:\\log\\applog.txt log4j.appender.A2.DatePattern='.'yyyy-MM-dd log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n #log4j.logger.ALL=DEBUG,A1 log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.file=d:\\log\\all.log log4j.appender.A1.DatePattern='.'yyyy-MM-dd log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n ### direct messages to file hibernate.log ### #log4j.appender.file=org.apache.log4j.FileAppender #log4j.appender.file.File=hibernate.log #log4j.appender.file.layout=org.apache.log4j.PatternLayout #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### ###log4j.rootLogger=warn, stdout log4j.rootLogger=info, A1 #以下是hibernate API需要的配置 log4j.logger.net.sf.hibernate=info ### log just the SQL #log4j.logger.net.sf.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.net.sf.hibernate.type=info ### log schema export/update ### log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug ### log cache activity ### #log4j.logger.net.sf.hibernate.cache=debug ### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ### #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac |
配置后如下來調(diào)用,首先需要初始化配置文件,這個(gè)過程只需要一次,所以我們可以在ServletContextListener中來進(jìn)行。
String prefix = context.getRealPath("/");
PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties"); |
這里需要你的配置文件的路徑來初始化。
初始化完成后,我們在以后的action中就可以 象下面一樣來調(diào)用:
static Logger log=Logger.getLogger("seerlog");
log.warn("it's log4j warn"); log.info("it's log4j info"); |
關(guān)于 log4j 的完全使用方法,偶會(huì)在以后做詳細(xì)的說明!
二,hibernate 的初始化
首先我們要把hibernate.cfg.xml 放到應(yīng)用的 classes 目錄中,然后可以使用hibernate參考文檔提供的例子來封裝對后臺(tái)的使用。
public class Hi{
private static final SessionFactory sessionFactory; private static Connection conn; static { try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (HibernateException ex) { throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex); } } public static final ThreadLocal session = new ThreadLocal(); public static Session getSession() throws HibernateException { Session s = (Session) session.get(); // 假如沒有一個(gè)可用的線程,開啟一個(gè)新 Session, if (s == null) { conn=DBConnectionManager.getConnection(); s = sessionFactory.openSession(conn); session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = (Session) session.get(); session.set(null); if (s != null) s.close(); if(conn!=null) DBConnectionManager.returnConnection(conn); } } |
文中DBConnectionManager.getConnection()是一個(gè)DAO類,提供連接池的實(shí)現(xiàn)。
我們使用這個(gè)con連接來創(chuàng)建一個(gè) session ,sission是一個(gè)數(shù)據(jù)庫連接操作的會(huì)話周期,它提供了強(qiáng)大的管理數(shù)據(jù)的能力。
以后我們在action的 execute 方法中就可以使用 Hi.getSession()來獲得一個(gè)會(huì)話支持。典型的應(yīng)用如下:
try{
//開啟一個(gè)會(huì)話,并啟動(dòng)事務(wù)回滾能力 Session session = Hi.getSession(); Transaction tx= session.beginTransaction(); //查詢數(shù)據(jù)庫,使用HQL Query q = session.createQuery("from Topic as topic order by topic.id desc"); q.setFirstResult(0); q.setMaxResults(5); //得到一個(gè)List類型的數(shù)據(jù) List newTopicList = q.list(); // 業(yè)務(wù)處理 NewTopicList ntlBean=new NewTopicList(); ntlBean.setList(newTopicList); req.setAttribute("newtopiclist",ntlBean); //事務(wù)提交,記得關(guān)閉會(huì)話! tx.commit(); Hi.closeSession(); }//因?yàn)檎麄€(gè)會(huì)話會(huì)拋出異常,所以需要用try--catch來包裹 catch(HibernateException e){ //日志記錄 Log.error(e.toString()); } |
其中的HQL 可以參考 hibernate 官方文檔來學(xué)習(xí)。
三,Struts
struts 的配置文件 struts-config.xml 放在 應(yīng)用的 /WEB-INF/目錄下面,大致的配置如下
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="net.seerlog.vo.LoginForm"/> <form-bean name="replyForm" type="net.seerlog.vo.ReplyForm"/> </form-beans> <global-forwards> <forward name="index" path="/first.jsp"/> </global-forwards> <action-mappings> <action path="/login" type="net.seerlog.action.LoginAction" scope="request" name="loginForm" input="/login.jsp"> <forward name="success" path="/success.jsp"/> </action> <action path="/blog" type="net.seerlog.action.BlogAction" scope="request"> <forward name="success" path="/sublog.jsp"/> </action> <action path="/topic" type="net.seerlog.action.TopicAction" scope="request"> <forward name="success" path="/sutopic.jsp"/> </action> <action path="/posttopic" type="net.seerlog.action.PostTopicAction" scope="request" > </action> <action path="/postreply" type="net.seerlog.action.PostReplyAction" scope="request" name="replyForm" input="/sublog.jsp"> </action> <action path="/index" type="net.seerlog.action.IndexAction" scope="request"> </action> </action-mappings> <message-resources parameter="resouse.application"> </message-resources> </struts-config> |
這里的配置有一個(gè)可視化工具叫做 struts-console,目前版本4.8,網(wǎng)上可以免費(fèi)下載的到。
配置文件其實(shí)不用去記,需要時(shí)參考一下,拷貝一個(gè)過來修改一下即可。只是這里的主要是在于設(shè)計(jì) ,設(shè)計(jì)好有什么formbean,什么action,他們的關(guān)系,等等問題。一個(gè)好的設(shè)計(jì)絕對能為后期節(jié)省大量的返工可能性。struts有一本《struts on action》,絕對是學(xué)習(xí)struts的經(jīng)典書籍,我手上有翻譯的前8章,有需要的可以聯(lián)系我。
我們這里不詳細(xì)說明各個(gè)配置,只講struts 和hibernate 合作的過程。
一個(gè)action 有一個(gè) execute 方法,當(dāng)然也可以用 perform方法,不過 perform 方法 在struts1.1已經(jīng)不推薦使用了,而使用了更強(qiáng)大的execute()方法。 package net.seerlog.action;
//導(dǎo)入所有用的到的包
import java.util.List; import net.seerlog.po.*; import net.seerlog.vo.*; import net.seerlog.util.*; import net.sf.hibernate.*; import org.apache.struts.action.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; import javax.servlet.ServletException; public class IndexAction extends Action{ //action的主體方法 execute ,注意要拋出異常 public ActionForward execute (ActionMapping mapping,ActionForm form,HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ try{ //開啟會(huì)話 Session session = Hi.getSession(); Transaction tx= session.beginTransaction(); //查詢 Query q = session.createQuery("from Topic as topic order by topic.id desc"); q.setFirstResult(0); q.setMaxResults(5); List newTopicList = q.list(); NewTopicList ntlBean=new NewTopicList(); ntlBean.setList(newTopicList); req.setAttribute("newtopiclist",ntlBean); //事務(wù)提交,關(guān)閉session tx.commit(); Hi.closeSession(); //捕獲異常 }catch(HibernateException e){ Log.error(e.toString()); //日志記錄 } //返回一個(gè) actionForward 對象 return mapping.findForward("index"); } } |
以上就是 struts hibernate協(xié)同工作的全部內(nèi)容了,這篇文章只能讓你了解整個(gè)過程,這里的例子不能作為實(shí)現(xiàn)的學(xué)習(xí)例子。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
