




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、開發(fā)一個(gè)web項(xiàng)目的過程目錄:基本的開發(fā)環(huán)境是用的數(shù)據(jù)庫是Oracle9第一步:創(chuàng)建數(shù)據(jù)庫第二步:新建原始項(xiàng)目第三步:新建四個(gè)源文件夾(名分別為config、sourcedemo、common、test)第四步:部署庫文件第五步:設(shè)置顯示層第六步:配置WebWork組件,Spring第七步:在config文件目錄下進(jìn)行具體的配置第八步:在common文件定義所有項(xiàng)目的公共文件第九步:在sourcedemo包中進(jìn)行本項(xiàng)目的具體操作啟動(dòng)、運(yùn)行項(xiàng)目基本的開發(fā)環(huán)境:J2sdk 是j2sdk1.5版本的,Tomcat 是Tomcat5.0版本的,Eclipse 是Eclipse3.1版本的,Myecli
2、pse 是Myeclipse版本的。用的數(shù)據(jù)庫是Oracle9第一步:創(chuàng)建數(shù)據(jù)庫建一個(gè)名為USERS的表,其中包含的屬性有 ID(是主鍵)、NAME(用戶的名稱)、GENDER(用戶的性別)、AGE(用戶的年齡)、MAILL(用戶的E-Mail)、DEPARTMENT(用戶所在的部門)、BIRTHDAY(用戶的生日)。數(shù)據(jù)庫中的角本如下:create table USERS(ID int not null key primary,NAME varchar2(50),GENDER varchar2,AGE integer,MAIL varchar2(100),DEPARTMENT varchar
3、2(50),BIRTHDAY date)第二步:新建原始項(xiàng)目在eclipse開發(fā)環(huán)境下,新建一個(gè)名為sourcedemo的Web Project:文件>新建 >其它 >J2EE彈出如下圖的對(duì)話選中Web Project,單擊下一步,如下圖:在Project Name中輸入項(xiàng)目名稱sourcedemo,其他都默,認(rèn)單擊完成則一個(gè)名為sourcedemo的web原始項(xiàng)目建成。第三步:新建四個(gè)源文件夾(名分別為config、sourcedemo、common、test)在項(xiàng)目sourcedemo的src目錄下(名分別為config、sourcedemo、common、test)。1
4、, 右鍵單擊src源文件>新建>文件夾,彈出如下圖的對(duì)話框: 在文件夾名(D)中輸入 config,單擊完成,新建了一個(gè)名為config的文件夾。2, 重復(fù)1的操作依次建名為sourcedemo、common、test的文件夾。3, 把這四個(gè)文件改成源文件,具體操作如下:右鍵單擊項(xiàng)目sourcedemo>properties>Java Build Path>source,選中sourcedemo把它Remove掉,再單擊Add Floder>src>選中common、config、sourcedemo、test>ok>ok即可。如下圖:得到
5、如下的結(jié)果圖: 說明:在Config文件中,根據(jù)實(shí)體類型對(duì)要用到的一些工具,如freemarker、webwork、log4j、數(shù)據(jù)庫連接等進(jìn)行具體的配置。Sourcedem文件中放項(xiàng)目文件聲明具體要用到的一些接口和類,并把它們實(shí)現(xiàn)。即可實(shí)現(xiàn)要實(shí)現(xiàn)的功能。Common文件中放公共用到的一些代碼。Test文件中放進(jìn)行測(cè)試的文件,此項(xiàng)目中沒有用到,可把此目錄刪除。 注意:1,任何的源代碼都要建com包,接下來的是公司的名稱(gameplus),再后面就是模塊名稱,最后是功能。形如:mon.action。3,類的名稱每個(gè)單詞的頭字母要大寫。4,定義接口時(shí)要在名稱前加字母I。5,方法的命名規(guī)則是:第一
6、個(gè)單詞小寫,從第二個(gè)單詞開始頭一個(gè)字母大寫。6,所有IDao的接口都要繼承common包中的IDao父接口,所有Hibernate的實(shí)例都要繼承common中hibernate父類,通過此類可與Hibernate的核心類接觸;所有的model都要繼承common中的model父類。第四步:部署庫文件在eclipseworkspacesourcedemoWebRootWEB-INFlib目錄下部署用到的庫。第五步:設(shè)置顯示層在WebRoot目錄下新建名為exceptions.ftl、index.ftl、user.ftl的文件,它們相當(dāng)于顯示層,由freemarker來解析;其中exception
7、s.ftl是出現(xiàn)異常時(shí)的顯示,index.ftl 用來顯示所有的用戶列表,user.ftl是新增、刪除用戶,;新建名為indem的htm文件,設(shè)置在瀏覽器中顯示頁面的默認(rèn)URL為index.action。(具體代碼參看項(xiàng)目)第六步:配置WebWork組件,Spring在WebRoot目錄下的子目錄WEB-INF目錄下有一個(gè)默認(rèn)的文件web.xml 它是Web應(yīng)用的描述文件, 包含所有必須的WebWork組件。在web.xml文件里配置一個(gè)派遣器ServletDispatcher,它初始化WebWrok的一些配置信息,解析XWork的Action配置信息,根據(jù)請(qǐng)求去組裝和調(diào)用執(zhí)行相應(yīng)的攔截器(I
8、nterceptor)、Action、Action Result(Action執(zhí)行結(jié)果的輸出)等。新建名為action-beams-user.xml、applicationContest-hibernate.xml、applicationContext-resources.xml的文件。action-beams-user.xml文件主要用來配置要用到的action,spring會(huì)把它們封裝成bean來管理;applicationContext-resources.xml主要是用來配置數(shù)據(jù)源;applicationContest-hibernate.xml主要是配置DAO的。具體代碼如下:act
9、ion-beams-user.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-/SPRING/DTD BEAN/EN" "/dtd/spring-beans.dtd"><beans><bean id="userDaoTarget" class="com.gameplus.sourcedemo.user.
10、dao.hibernate.UserDao" autowire="byName"/> <bean id="userDao" class="erceptor.TransactionProxyFactoryBean" > <property name="transactionManager"> <ref bean="transactionManager"/> </prope
11、rty> <property name="target"> <ref bean="userDaoTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean
12、 id="listUserAction" class="com.gameplus.sourcedemo.user.action.ListUserAction" singleton="false" ><property name="userDao"><ref bean="userDao"/></property></bean><bean id="createUserAction" class="com.gam
13、eplus.sourcedemo.user.action.CreateUserAction" singleton="false" ><property name="userDao"><ref bean="userDao"/></property></bean><bean id="deleteUserAction" class="com.gameplus.sourcedemo.user.action.DeleteUserAction&qu
14、ot; singleton="false" ><property name="userDao"><ref bean="userDao"/></property></bean><bean id="modifyUserAction" class="com.gameplus.sourcedemo.user.action.ModifyUserAction" singleton="false" ><property
15、 name="userDao"><ref bean="userDao"/></property></bean></beans>applicationContest-hibernate.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-/SPRING/DTD BEAN/EN" "http:/www.springframework.or
16、g/dtd/spring-beans.dtd"><beans> <!- Hibernate SessionFactory -> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property
17、> <property name="mappingResources"> <list><value></value> </list> </property><!- The property below is commented out b/c it doesn't work when run via Ant in Eclipse. It works fine for individual JUnit tests and in IDEA ? <property name=&quo
18、t;mappingJarLocations"> <list><value>file:dist/appfuse-dao.jar</value></list> </property> -> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">$hibernate.dialect1</prop> <prop key="
19、hibernate.transaction.factory_class"></prop> <prop key="hibernate.show_sql">$hibernate.show_sql1</prop> </props> </property> </bean><!- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -> <bean id="tran
20、sactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <bean id="daoTarget" class="mon.dao.hibernate.Dao&qu
21、ot; autowire="byName"/> <bean id="dao" class="erceptor.TransactionProxyFactoryBean" > <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name=&
22、quot;target"> <ref local="daoTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean></beans>applicationContext-resour
23、ces.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-/SPRING/DTD BEAN/EN" "/dtd/spring-beans.dtd"><beans> <!- For mail settings and future properties files -> <bean id="propertyConf
24、igurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:perties</value> </list> </property> </bean> <bean id="dataSource"
25、 class="mons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>$hibernate.connection.driver_class1</value> </property> <property name="url"> <value>$hibernate.connection.url1</value
26、> </property> <property name="username"> <value>$hibernate.connection.username1</value> </property> <property name="password"> <value>$hibernate.connection.password1</value> </property><property name="maxIdle"&
27、gt;<value>10</value></property><property name="maxWait"><value>60000</value></property><property name="maxActive"><value>50</value></property> </bean></beans>第七步:在config文件目錄下進(jìn)行具體的配置配置各種開發(fā)工具,在config文件目錄下
28、進(jìn)行具體的配置:1, 選中config,單擊右鍵>新建>文件,彈出如下圖的對(duì)話框: 在文件名中輸入perties,單擊完成,則在config文件夾下新建了一個(gè)名為perties文件。2, 重復(fù)1的操作依次建名為perties、perties、perties的文件。perties文件是hibernate的配置,hibernate主要工作在持久層,負(fù)責(zé)把數(shù)據(jù)寫到數(shù)據(jù)庫的工作,此項(xiàng)目中用到的數(shù)據(jù)庫是Oracle、端口是、driver_class1是、
29、username1是andy、password是andy,代碼如下: hibernate.show_sql1=truehibernate.connection.url1=jdbc:oracle:thin:3:1521:orc9hibernate.connection.username1=andyhibernate.connection.password1=andy perties文件是freemarker的配置文件,perties文件是webwork的配置文件,perties文件是配置日志文件。(代碼參看
30、項(xiàng)目)新建名為validators.xml、xwork.xml、xwork-user.xml的文件。xwork.xml是 WebWork最主要的配置文件, 其中包含結(jié)果/視圖類型, action 映射,攔截器等等。它通過include字段來解析xwork-user.xml文件。validators.xml文件定義驗(yàn)證。validators.xml文件代碼如下: <validators> <validator name="required" class="com.opensymphony.webwork.validators.JavaScriptR
31、equiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.webwork.validators.JavaScriptRequiredStringValidator"/> <validator name="int" class="com.opensymphony.webwork.validators.JavaScriptIntRangeFieldValidator"/> &
32、lt;validator name="date" class="com.opensymphony.webwork.validators.JavaScriptDateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/> <validator name="fieldexpression&qu
33、ot; class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.webwork.validators.JavaScriptEmailValidator"/> <validator name="url" class="com.opensymphony.webwork.validators.
34、JavaScriptURLValidator"/> <validator name="visitor" class="com.opensymphony.webwork.validators.JavaScriptVisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/&g
35、t; <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/></validators>xwork.xml文件的代碼如下: <!DOCTYPE xwork PUBLIC "-/OpenSymphony Group/XWork 1.0/EN" "<xwork><include file="webwork-d
36、efault.xml" /><package name="sourcedemo" extends="webwork-default" abstract="true"> <interceptors><interceptor name="exceptionIn" class="com.gameplus.sourcedemo.action.ExceptionInterceptor"/> <interceptor-stack name="
37、;demoStack"><interceptor-ref name="exceptionIn"/> <interceptor-ref name="defaultStack"/> </interceptor-stack></interceptors><global-results><result name="exceptions" type="freemarker">exceptions.ftl</result><
38、;/global-results></package><include file="D:eclipseworkspacesourcedemoconfigxwork-user.xml" /></xwork>xwork-user.xml文件的代碼如下: <?xml version="1.0"?><!DOCTYPE xwork PUBLIC "-/OpenSymphony Group/XWork 1.0/EN" "<xwork><package name
39、="" extends="sourcedemo"><action name="index" class="listUserAction"><interceptor-ref name="demoStack" /><result name="success" type="freemarker">index.ftl</result></action><action name="cr
40、eateUser" class="createUserAction"><interceptor-ref name="demoStack" /><result name="success" type="freemarker">user.ftl</result></action><action name="doCreateUser" class="createUserAction" method="c
41、reate"><interceptor-ref name="demoStack" /><result name="success" type="dispatcher">index.htm</result></action><action name="deleteUser" class="deleteUserAction"><interceptor-ref name="demoStack" /&g
42、t;<result name="success" type="dispatcher">index.htm</result></action><action name="modifyUser" class="modifyUserAction"><interceptor-ref name="demoStack" /><result name="success" type="freemarker"
43、>user.ftl</result></action><action name="doModifyUser" class="modifyUserAction" method="modify"><interceptor-ref name="demoStack" /><result name="success" type="dispatcher">index.htm</result></actio
44、n></package></xwork>說明:(具體的說明請(qǐng)參看webwork的相關(guān)文檔)1、include通過include節(jié)點(diǎn),我們可以將其他配置文件導(dǎo)入到默認(rèn)配置文件xwork.xml中。從而實(shí)現(xiàn)良好的配置劃分。在這里例子中我們導(dǎo)入了Webwork提供的默認(rèn)配置webwork-default.xml(位于webwork.jar的根路徑)。所有通過include引入的配置文件的格式和xwork.xml是一樣的。<include file="webwork-default.xml"/> 2、packageXWork中,可以通過pa
45、ckage對(duì)action, results, result types, interceptors 和 interceptor stacks進(jìn)行分組。這類似Java中package和class的關(guān)系,為可能出現(xiàn)的同名Action提供了命名空間上的隔離。3、 InterceptorsWebWork的攔截器允許開發(fā)人員定義在Action調(diào)用前或者后執(zhí)行的代碼(具體使用方式請(qǐng)參見對(duì)XWork攔截器體系的說明)。4、Actions是WebWork中定義的最小工作單元。在WebWork中一個(gè)Action通常是一個(gè)來至頁面的請(qǐng)求,此項(xiàng)目中主要是創(chuàng)建,更新,刪除一個(gè)user的操作。第八步:在common文件
46、定義所有項(xiàng)目的公共文件1、 首先新建一個(gè)名為mon.dao的包,定義一個(gè)接口IDao。 package mon.dao;import java.io.Serializable;import java.util.List;import net.sf.hibernate.type.Type;import mon.util.Pagination;public interface IDao public void removeObjects(String sql);public void removeObjects(String sql, Object obj, Type type);public v
47、oid removeObjects(String sql, Object objs, Type types);public List getObjects(Class clazz);public List getObjects(Class clazz, Pagination pagination);public Object getObject(Class clazz, Serializable id);public void saveObject(Object o);public void updateObject(Object o);public void removeObject(Cla
48、ss clazz, Serializable id);public void removeObject(Object o);2、 新建一個(gè)名為mon.dao.hibernate的包,實(shí)現(xiàn)接口IDao package mon.dao.hibernate;import java.io.Serializable;import java.util.ArrayList;import java.util.List;import net.sf.hibernate.HibernateException;import net.sf.hibernate.Query;import net.sf.hibernate.
49、Session;import net.sf.hibernate.type.Type;import mons.lang.StringUtils;import mons.logging.Log;import mons.logging.LogFactory;import org.springframework.orm.hibernate.support.HibernateDaoSupport;import mon.dao.IDao;import mon.util.Pagination;public class Dao extends HibernateDaoSupport implements ID
50、ao protected Log log = LogFactory.getLog(this.getClass();public void removeObjects(String sql) getHibernateTemplate().delete(sql);public void removeObjects(String sql, Object obj, Type type) getHibernateTemplate().delete(sql, obj, type);public void removeObjects(String sql, Object objs, Type types)
51、getHibernateTemplate().delete(sql, objs, types);public void removeObject(Object o) getHibernateTemplate().delete(o);public Object getObject(Class clazz, Serializable id) return getHibernateTemplate().get(clazz, id);public List getObjects(Class clazz) return getHibernateTemplate().loadAll(clazz);publ
52、ic void removeObject(Class clazz, Serializable id) getHibernateTemplate().delete(getObject(clazz, id);public void saveObject(Object o) getHibernateTemplate().save(o);public void updateObject(Object o) getHibernateTemplate().update(o);public List getObjects(Class clazz, Pagination pagination) if (pag
53、ination = null | pagination.isShowAll() return getObjects(clazz);return find("from " + clazz.getName(), pagination);protected List find(String sql, Object objs, Type types,Pagination pagination) if (pagination = null | pagination.isShowAll() return getHibernateTemplate().find(sql, objs, ty
54、pes);pagination.setTotalSize(loadTotalSize(sql, objs, types);Session session = this.getSession();Query sqlQuery = null;List ls = null;try sqlQuery = session.createQuery(sql);if (objs != null && objs.length > 0 && types != null&& types.length > 0 && objs.length =
55、 types.length) for (int i = 0; i < objs.length; i+) sqlQuery.setParameter(i, objsi, typesi);sqlQuery.setFirstResult(int) pagination.getStart() - 1).setMaxResults(int) pagination.getMaxSize();ls = sqlQuery.list();if (ls = null) ls = new ArrayList(0); catch (HibernateException e) log.error(e);retur
56、n ls;protected List find(String sql, Pagination pagination) if (pagination = null | pagination.isShowAll() return getHibernateTemplate().find(sql);return find(sql, new Object0, new Type0, pagination);protected List find(String sql, Object obj, Type type, Pagination pagination) if (pagination = null
57、| pagination.isShowAll() return getHibernateTemplate().find(sql, obj, type);return find(sql, new Object obj , new Type type , pagination);protected long loadTotalSize(String sql, Object objs, Type types) long count = 0;try String midSql = getCountSql(sql);midSql = "select count(*) " + midS
58、ql;List ls = this.getHibernateTemplate().find(midSql, objs, types);if (ls != null && ls.size() > 0) Object obj = ls.get(0);if (obj instanceof Integer) count = (Integer) obj).longValue(); else if (obj instanceof Long) count = (Long) obj).longValue(); catch (Exception he) log.error(he.getMe
59、ssage(), he);return count;protected String getCountSql(String sql) String midSql = sql;int count = StringUtils.indexOf(midSql.toLowerCase(), "from");midSql = StringUtils.substring(midSql, count);return midSql;3、 新建名為mon.exception的包,定義異常:GameplusException中聲明本項(xiàng)目中所有例外的父類;LogicException中聲明所有業(yè)務(wù)
60、邏輯例外的父類;ObjectHasExistsException中聲明對(duì)象已存在的例外;ObjectNotFoundException中聲明所需要處理的對(duì)象不存在的例外;SystemException中聲明系統(tǒng)例外,又稱不可恢復(fù)性例外, 本類是所有系統(tǒng)例外的父類。(具體代碼參看項(xiàng)目)4、 新建mon. model的包,定義model對(duì)象的基類,命名為BaseObject,所有的子對(duì)象都要繼承此類中的toString()、equals() 、 hashCode()三種方法 package mon.model;import java.io.Serializable;public abstract class BaseObject implements Serializabl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)學(xué)影像學(xué)題庫
- 餐飲租賃協(xié)議一定要注意4點(diǎn)
- 2025酒店工作總結(jié)(33篇)
- 2025河北張家口市懷來經(jīng)開創(chuàng)新實(shí)業(yè)有限公司招聘工作人員2人筆試參考題庫附帶答案詳解
- 2025新疆新星天元農(nóng)牧業(yè)發(fā)展集團(tuán)有限公司第一次招聘工作人員招聘7人筆試參考題庫附帶答案詳解
- 2025年安徽江淮汽車集團(tuán)股份有限公司招聘5人筆試參考題庫附帶答案詳解
- 2025山東濟(jì)南平陰縣魯中山河科技發(fā)展有限公司招聘4人筆試參考題庫附帶答案詳解
- 2025國網(wǎng)吉林省電力有限公司高校畢業(yè)生招聘約134人(第二批)筆試參考題庫附帶答案詳解
- 公共衛(wèi)生與防疫課件
- 《寶石鑒賞新視角》課件
- 中性粒細(xì)胞減少癥伴發(fā)熱的治療
- 2024年成都市中考道德與法治試卷真題
- 2024年4月20日蘇州工業(yè)園區(qū)人才引進(jìn)第一輪面試真題及答案解析
- 2023版《思想道德與法治》(緒論-第一章)緒論 擔(dān)當(dāng)復(fù)興大任 成就時(shí)代新人;第一章 領(lǐng)悟人生真諦 把握人生方向 第3講 創(chuàng)造有意義的人生
- 2024屆湖北省武漢市武昌區(qū)南湖二小六年級(jí)下學(xué)期小升初招生語文試卷含答案
- (正式版)JBT 3300-2024 平衡重式叉車 整機(jī)試驗(yàn)方法
- 汽車租賃合伙人協(xié)議
- Unit+6+Section+A+3a~3c 人教版英語八年級(jí)下冊(cè)
- 廣匯煤炭清潔煉化有限責(zé)任公司1000萬噸年煤炭分級(jí)提質(zhì)綜合利用項(xiàng)目變更環(huán)境影響報(bào)告書
- 《公共基礎(chǔ)知識(shí)》2024年事業(yè)單位考試氹仔島全真模擬試題含解析
- STEM教師培養(yǎng)的國際比較研究以中 美 英 德為例
評(píng)論
0/150
提交評(píng)論