开发一个web项目的过程_第1页
开发一个web项目的过程_第2页
开发一个web项目的过程_第3页
开发一个web项目的过程_第4页
开发一个web项目的过程_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、开发一个web项目的过程目录:基本的开发环境是用的数据库是Oracle9第一步:创建数据库第二步:新建原始项目第三步:新建四个源文件夹(名分别为config、sourcedemo、common、test)第四步:部署库文件第五步:设置显示层第六步:配置WebWork组件,Spring第七步:在config文件目录下进行具体的配置第八步:在common文件定义所有项目的公共文件第九步:在sourcedemo包中进行本项目的具体操作启动、运行项目基本的开发环境:J2sdk 是j2sdk1.5版本的,Tomcat 是Tomcat5.0版本的,Eclipse 是Eclipse3.1版本的,Myecli

2、pse 是Myeclipse版本的。用的数据库是Oracle9第一步:创建数据库建一个名为USERS的表,其中包含的属性有 ID(是主键)、NAME(用户的名称)、GENDER(用户的性别)、AGE(用户的年龄)、MAILL(用户的E-Mail)、DEPARTMENT(用户所在的部门)、BIRTHDAY(用户的生日)。数据库中的角本如下: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)第二步:新建原始项目在eclipse开发环境下,新建一个名为sourcedemo的Web Project:文件>新建 >其它 >J2EE弹出如下图的对话选中Web Project,单击下一步,如下图:在Project Name中输入项目名称sourcedemo,其他都默,认单击完成则一个名为sourcedemo的web原始项目建成。第三步:新建四个源文件夹(名分别为config、sourcedemo、common、test)在项目sourcedemo的src目录下(名分别为config、sourcedemo、common、test)。1

4、, 右键单击src源文件>新建>文件夹,弹出如下图的对话框: 在文件夹名(D)中输入 config,单击完成,新建了一个名为config的文件夹。2, 重复1的操作依次建名为sourcedemo、common、test的文件夹。3, 把这四个文件改成源文件,具体操作如下:右键单击项目sourcedemo>properties>Java Build Path>source,选中sourcedemo把它Remove掉,再单击Add Floder>src>选中common、config、sourcedemo、test>ok>ok即可。如下图:得到

5、如下的结果图: 说明:在Config文件中,根据实体类型对要用到的一些工具,如freemarker、webwork、log4j、数据库连接等进行具体的配置。Sourcedem文件中放项目文件声明具体要用到的一些接口和类,并把它们实现。即可实现要实现的功能。Common文件中放公共用到的一些代码。Test文件中放进行测试的文件,此项目中没有用到,可把此目录删除。 注意:1,任何的源代码都要建com包,接下来的是公司的名称(gameplus),再后面就是模块名称,最后是功能。形如:mon.action。3,类的名称每个单词的头字母要大写。4,定义接口时要在名称前加字母I。5,方法的命名规则是:第一

6、个单词小写,从第二个单词开始头一个字母大写。6,所有IDao的接口都要继承common包中的IDao父接口,所有Hibernate的实例都要继承common中hibernate父类,通过此类可与Hibernate的核心类接触;所有的model都要继承common中的model父类。第四步:部署库文件在eclipseworkspacesourcedemoWebRootWEB-INFlib目录下部署用到的库。第五步:设置显示层在WebRoot目录下新建名为exceptions.ftl、index.ftl、user.ftl的文件,它们相当于显示层,由freemarker来解析;其中exception

7、s.ftl是出现异常时的显示,index.ftl 用来显示所有的用户列表,user.ftl是新增、删除用户,;新建名为indem的htm文件,设置在浏览器中显示页面的默认URL为index.action。(具体代码参看项目)第六步:配置WebWork组件,Spring在WebRoot目录下的子目录WEB-INF目录下有一个默认的文件web.xml 它是Web应用的描述文件, 包含所有必须的WebWork组件。在web.xml文件里配置一个派遣器ServletDispatcher,它初始化WebWrok的一些配置信息,解析XWork的Action配置信息,根据请求去组装和调用执行相应的拦截器(I

8、nterceptor)、Action、Action Result(Action执行结果的输出)等。新建名为action-beams-user.xml、applicationContest-hibernate.xml、applicationContext-resources.xml的文件。action-beams-user.xml文件主要用来配置要用到的action,spring会把它们封装成bean来管理;applicationContext-resources.xml主要是用来配置数据源;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文件目录下进行具体的配置配置各种开发工具,在config文件目录下

28、进行具体的配置:1, 选中config,单击右键>新建>文件,弹出如下图的对话框: 在文件名中输入perties,单击完成,则在config文件夹下新建了一个名为perties文件。2, 重复1的操作依次建名为perties、perties、perties的文件。perties文件是hibernate的配置,hibernate主要工作在持久层,负责把数据写到数据库的工作,此项目中用到的数据库是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、项目)新建名为validators.xml、xwork.xml、xwork-user.xml的文件。xwork.xml是 WebWork最主要的配置文件, 其中包含结果/视图类型, action 映射,拦截器等等。它通过include字段来解析xwork-user.xml文件。validators.xml文件定义验证。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>说明:(具体的说明请参看webwork的相关文档)1、include通过include节点,我们可以将其他配置文件导入到默认配置文件xwork.xml中。从而实现良好的配置划分。在这里例子中我们导入了Webwork提供的默认配置webwork-default.xml(位于webwork.jar的根路径)。所有通过include引入的配置文件的格式和xwork.xml是一样的。<include file="webwork-default.xml"/> 2、packageXWork中,可以通过pa

45、ckage对action, results, result types, interceptors 和 interceptor stacks进行分组。这类似Java中package和class的关系,为可能出现的同名Action提供了命名空间上的隔离。3、 InterceptorsWebWork的拦截器允许开发人员定义在Action调用前或者后执行的代码(具体使用方式请参见对XWork拦截器体系的说明)。4、Actions是WebWork中定义的最小工作单元。在WebWork中一个Action通常是一个来至页面的请求,此项目中主要是创建,更新,删除一个user的操作。第八步:在common文件

46、定义所有项目的公共文件1、 首先新建一个名为mon.dao的包,定义一个接口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、 新建一个名为mon.dao.hibernate的包,实现接口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中声明本项目中所有例外的父类;LogicException中声明所有业务

60、逻辑例外的父类;ObjectHasExistsException中声明对象已存在的例外;ObjectNotFoundException中声明所需要处理的对象不存在的例外;SystemException中声明系统例外,又称不可恢复性例外, 本类是所有系统例外的父类。(具体代码参看项目)4、 新建mon. model的包,定义model对象的基类,命名为BaseObject,所有的子对象都要继承此类中的toString()、equals() 、 hashCode()三种方法 package mon.model;import java.io.Serializable;public abstract class BaseObject implements Serializabl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论