SSH框架 CRUD及验证 ajax校验 完整实例_第1页
SSH框架 CRUD及验证 ajax校验 完整实例_第2页
SSH框架 CRUD及验证 ajax校验 完整实例_第3页
SSH框架 CRUD及验证 ajax校验 完整实例_第4页
SSH框架 CRUD及验证 ajax校验 完整实例_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

SSH框架下CRUD及验证完整实例(一)一准备工作•目标和工具在学习Java两个月之后,尝试使用学过的东西写一个最简单的页面实现对一张数据库进行基本的CRUD操作和分页,顺便增加服务端验证和Ajax动态验证以及简单的验证码.使用的工具和环境如下:SSH框架(Struts2.1.6,Spring2.5,Hibernate3.2),Myeclipse8.0,Oracle10g数据库,JS类库prototype.js,json2.js.数据库连接池使用的是proxool,应用到的jar包如下图,其中dojo和dwr两个插件是后期添加功能时要用,本实例没有用到,在添加项目Hibernate和Spring支持的时候冲突的架包已经删除.±"BAJayaEE5Libraries#兰』Hil-ernitt:3.2AilTlOt=±tiotlE&Entil+SHiLeiTLate:土止CoreLibr:±fies-宁Re±ei_hilc如1Libr==Lt_ies;EE.E;EE.E・亩:田…国•£]•:田亩,E:田:田…田E:田banlriiort~util~ctmcjurrent.Jat—Ec■:-ns-fl1enplad~1.2.1.j-Ec^mmcrLS-logging-apL-1_1.j:±f-E:freem:=Lrkh!i■一2.3.13.j:=a_-E:Java'sogTLl~2.5-LI.jar-E:'iJavaiDriverspring-2.5.6.j:-cr一E:\J:±vaMlrivsetrs2"cc>nventic-n-plugin-2.1.6.sLrnitE^-spriTLg-plugin-!d.1.6.j:i±_Kroi_lr~2.1.2.j:=lt一E:'i.J:=l^:=l'i.Drivet-pi-0Knol_LI.9.ORCS.jar一E:\javaliletrut in-2.1.6.jar一EtrntsS-dojo-plugin-2.1.6.jarstrn-ts2-core-2.1.6.jar-E'Vjaveioio.joni)]_ngin-0.34.jar-E:'iJa^a'iTlr3■;甲-!■3■;甲-!■|±i■;由,Spring2.5ALlFLibrM奕Spring2.5FarsiEtencaCoreLibr=±riSpriitg2.5PerEiEteTLceJTlBCLibr=±riSpritl^2.5Wt=bLiljr:=Lries•项目的目录结构源文件的目录结构如左图,其中pass文件夹放的是一些历史文件,和本例无关.项目按照mvc框惯例,分为action,dao,model,service,web五层.jsp文件如右图所示放在了WebRoot/per文件夹下,连同js库文件,其中register.jsp是测试验证码使用的.

日•疆泸I中裨i日•疆泸I中裨ij由;Ep:由com.pereon.ermactionFersciriList.javaJitelDActicm.javs.Ftjrec-tlActiur-:kdil~v:dlid:±+iorL.PerEC-riAetion-upilate~v:=ili«lation.xmlI身蜀!白d:=L0I身蜀!白d:=L0.hilieiTLiteE)1.0^FgfeunllaoHlbyrnitq.javaFa岂巨Ut j:iV4JjPersonll=10.jawa+modelEl._JjFageBe:xtl.java十FerEorL.jara.■jFy2_£i:irL.hbm.Mml日••申E5rri-:5白••毋impl由…国rersurJi!:diL:ELgerlmp1.java由IjjFersLirJihmiEer.java白,寸力'A'eb+JT]jIuttilmg.jivaP:=LSSapplicatic-nCcirLtext.xmlprQStgl■pr叮gti套51ruts.jrupertiesstruts.艾itiL--巨洲’巨bEgtjETA-INF:日…臼?perjadd.jspjinput,jsp*P'Jje>:»r£.jeJliHtjjsp■list,jspprototype-!.6.03.je-registerjsp了uplate,jip曲-心WEB-I1TF•呈indeii?.jsp项目对应的数据库表PL/SQL工具下代码如下,其中命名空间,大小等信息因人而异.--CreatetablecreatetablePERSONIDNUMBER(10)notnull,NAMEVARCHAR2(30),AGE NUMBER(10),SEX VARCHAR2(10),ADDRESSVARCHAR2(50)tablespaceUSERSpctfree10initrans1maxtrans255storageinitial64Kminextentsl--Create/Recreateprimary,uniqueandforeignkeyconstraintsaltertablePERSONaddprimarykey(ID)usingindextablespaceUSERSpctfree10initrans2maxtrans255initial64Kminextents1—ed二开发步骤首先新建web项目crm,依次为项目添加SSH支持,接着用工具或命令在数据库中建立数据表PERSON,4个列ID,NAME,AGE,ADDRESS,其中ID为主键.接着在Myeclipse中打开database试图,为数据库新建一个连接或者使用已有的连接.接下来可以选择直接在database试图中选中PERSON表使用Hibernate反向工程自动生成实体Dao和映射表,也可以自己编写这些文件,相关代码如下.model层,包名com.person.crm.modelPerson.java数据表对应的实体类packagecom.person.crm.model;publicclassPersonimplementsjava.io.Serializable(privatestaticfinallongserialVersionUID=-6013196370398044363L;privateLongid;privateStringname;privateLongage;privateStringsex;privateStringaddress;publicPerson()(}/**fullconstructor火/publicPerson(Stringname,Longage,Stringsex,Stringaddress)(=name;this.age=age;this.sex=sex;this.address=address;}/各个属性的getter和setter方法}Person.hbm.xml映射表主键设置为列1。,生成方式assigned及由输入指定<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.person.crm.model.Person"schema="SCOTT"table="PERSON"><idname="id"type="java.lang.Long"><columnlength="10"name="ID"/><generatorclass="assigned"/></id><propertygenerated="never"lazy="false"name="name"type="java.lang.String"><columnlength="30"name="NAME"/></property><propertygenerated="never"lazy="false"name="age"type="java.lang.Long"><columnlength="10"name="AGE"/></property><propertygenerated="never"lazy="false"name="sex"type="java.lang.String"><columnlength="10"name="SEX"/></property><propertygenerated="never"lazy="false"name="address"type="java.lang.String"><columnlength="50"name="ADDRESS"/></property></class></hibernate-mapping>PageBeanmodel层用于分页的Beanpackagecom.person.crm.model;importjava.util.List;/***分页BEAN*/publicclassPageBean(//要返回的某一页的记录列表@SuppressWarnings("unchecked")privateListlist;//总记录数privateintallRow;//总页数privateinttotalPage;//当前页privateintcurrentPage;//每页记录数privateintpageSize;//是否为第一页privatebooleanisFirstPage;//是否为最后一页privatebooleanisLastPage;//是否有前一页privatebooleanhasPreviousPage;//是否有下一页privatebooleanhasNextPage;/各种getter和setter方法/***初始化分页信息*/publicvoidinit()(this.isFirstPage=isFirstPage();this.isLastPage=isLastPage();this.hasPreviousPage=isHasNextPage();this.hasNextPage=isHasNextPage();}/***计算总页数,静态方法,供外部直接通过类名调用@parampageSize每页记录数@paramallRow总记录数@return总页数*/publicstaticintcountTotalPage(finalintpageSize,finalintallRow)(inttotalPage=allRow%pageSize==0?allRow/pageSize:allRow/pageSize+1;returntotalPage;}/***计算当前页开始记录@parampageSize每页记录数@paramcurrentPage当前第几页@return当前页开始记录号*/publicstaticintcountOffset(finalintpageSize,finalintcurrentPage)(finalintoffset=pageSize*(current1);returnoffset;}/***计算当前页,若为0,或者请求的URL中没有"?page=",则用1代替@parampage传入的参数(可能为空,即0,则返回1)@return当前页*/publicstaticintcountCurrentPage(intpage)(finalintcurrentPage=(page==0?1:page);returncurrentPage;}}Dao层,包名com.person.crm.daoPersonDao.java Dao接口,提供了本例要实现的基本功能CRUD,用户名校验packagecom.person.crm.dao;importjava.util.List;importcom.person.crm.model.Person;publicinterfacePersonDaoextendsPageUtilDao{publicvoidadd(Personp);publicPersongetPerson(Longid);publicList<Person>getPersons();publicList<Person>getPersonsByName();publicvoidupdate(Personp);publicvoiddelete(Longid);publicbooleanidExists(Longid);}PageUtilDao.java用于分页的接口,主要是定义finalintpagesize每页显示的信息条数packagecom.person.crm.dao;importjava.util.List;publicinterfacePageUtilDao(publicstaticfinalintpagesize=5;/***分页查询*@paramhql查询条件@paramoffset开始记录@paramlength一次查询几条记录@return*/@SuppressWarnings("unchecked")publicListqueryForPage(finalStringhql,finalintoffset,finalintlength);/***查询所有结果数量@hql查询条件语句@return总记录数*/publicintgetAllRowCount(Stringhql);}PersonDaoHibernate.java接口的实现类publicclassPersonDaoHibernateextendsHibernateDaoSupportimplementsPersonDao(publicvoidadd(Personp)(getHibernateTemplate().save(p);}publicvoiddelete(Longid)(Personp=(Person)getHibernateTemplate().get(Person.class,id);getHibernateTemplate().delete(p);}publicPersongetPerson(Longid)(return(Person)getHibernateTemplate().get(Person.class,id);}publicListgetPersons()(Listpersons=getHibernateTemplate().find("fromPersonorderbyidASC");returnpersons;}publicListgetPersonsByName()(Listpersons=getHibernateTemplate().find("fromPersonorderbyname");returnpersons;}publicvoidupdate(Personp)(getHibernateTemplate().update(p);}@SuppressWarnings("unchecked")publicbooleanidExists(Longid)(Stringhql="fromPersonaspwherep.id='"+id+"'";List<Person>list=this.getHibernateTemplate().find(hql);if(list!=null&&list.size()>0){〃此id已经存在returntrue;}returnfalse;//此id不存在}/***查询所有记录数@return总记录数*/publicintgetAllRowCount(Stringhql)(returnthis.getHibernateTemplate().find(hql).size();}/***分页查询*@return分页查询所得到的记录数*/@SuppressWarnings("unchecked")publicListqueryForPage(finalStringhql,finalintoffset,finalintlength)(Listlist=this.getHibernateTemplate().executeFind(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{Queryquery=session.createQuery(hql);// if(offset>=0&&length>0){query.setFirstResult(offset);query.setMaxResults(length);// }List<Person>list=query.list();for(Personp:list){System.out.println("ID:"+p.getId()+"--姓名:"+p.getName()+"--年龄:"+p.getAge()+"--性另U:"+p.getSex()+"--地址:"+p.getAddress());}returnlist;}});returnlist;}}业务层service包名com.person.crm.servicePersonManager.java业务层接口publicinterfacePersonManager(publicvoidaddPerson(Personp);publicvoidgetPerson(Longid);publicList<Person>listPerson();publicList<Person>listPersonByName();publicvoidupdatePerson(Personp);publicvoiddeletePerson(Longid);publicPersonget(Longid);publicbooleanidExists(Longid);/***分页查询@paramcurrentPage当前第几页@parampageSize每页大小@return封闭了分页信息(包括记录集list)的Bean*/publicPageBeanqueryForPage(intpageSize,intcurrentPage);}PersonManagerImpl.java业务层实现类//在这个方法里处理事务publicclassPersonManagerImplimplementsPersonManager(privatePersonDaopersonDao;publicvoidsetPersonDao(PersonDaopersonDao)(this.personDao=personDao;}publicPersonDaogetPersonDao()(returnpersonDao;}/省略其他方法/***分页查询*/@SuppressWarnings("unchecked")publicPageBeanqueryForPage(intpageSize,intpage)(finalStringhql="fromPersonORDERBYidASC";intallRow=personDao.getAllRowCount(hql);//总记录数inttotalPage=PageBean.countTotalPage(pageSize,allRow);//总页数intpageStartR=PageBean.countoffset(pageSize,page);//当前页开始记录if(pageStartR<0)(pageStartR=0;}finalintoffset=pageStartR;//当前页开始记录finalintlength=pageSize;//每页记录数finalintcurrentPage=PageBean.countCurrentPage(page);List<Person>list=(List<Person>)personDao.queryForPage(hql,offset,length);//某一页的记录/*将分页信息保存到BEAN中"PageBeanpageBean=newPageBean();pageBean.setPageSize(pageSize);pageBean.setCurrentPage(currentPage);pageBean.setAllRow(allRow);pageBean.setTotalPage(totalPage);pageBean.setList(list);pageBean.init();returnpageBean;}}•web层包名com.person.crm.web一个用于生成验证码的类Authlmg.java源码见附件•action层负责处理用户请求包名com.person.crm.actionValidatelDAction.java验证用户名是否存在时要调用的actionpublicclassValidateIDActionextendsActionSupport(privateStringtip;privatePersonManagerpersonManager;privateLongid;privatePersonperson;privateBooleanflag;//各种getter和setter省略publicStringvalidateID()(System.out.println(this.person.getId());if(personManager.idExists(this.person.getId()))(setTip("系统中已有"+person.getId()+"这个ID,请重新选择一■个!");setFlag(true);}else(setTip("您好!"+person.getId()+",这个工。可用!");setFlag(false);}returnSUCCESS;}}PersonList.java分页显示信息publicclassPersonListextendsActionSupport(privatePersonManagerpersonManager;//第几页privateintpage;privatePageBeanpageBean;//各种getter和setterpublicStringexecute()throwsException(//分页的pageBean,this.pageBean=personManager.queryForPage(PageUtilDao.pagesize,page);returnSUCCESS;}}PersonAction.java处理crud的actionpublicclassPersonActionextendsActionSupport(privatestaticfinallongserialVersionUID=1267970357012240082L;privatePersonManagerpersonManager;privatePersonperson;privateList<Person>persons;privateLongid;privateStringresponseText;privatebooleanflag;privateStringvercode;publicvoidsetPersonManager(PersonManagerpersonManager)(this.personManager=personManager;}//使用JSON格式传递数据时,注入的service需要使用下列命令设置不对该getter序列化//@JSON(serialize=false)//publicPersonManagergetPersonManager()(//returnpersonManager;//}publicStringadd()(System.out.println(getPerson().getId());System.out.println(getPerson().getName().length());Mapsession=ActionContext.getContext().getSession();Stringver2=(String)session.get("rand");session.put("rand",null);if(vercode.equals(ver2))(System.out.println(getPerson().getAge());personManager.addPerson(getPerson());returnSUCCESS;}else(addActionError("验证码不匹配,请重新输入");returnERROR;}}//列出所有数据publicStringlist()(persons=personManager.listPerson();returnSUCCESS;}//按照姓名排列列表publicStringlistByName()(persons=personManager.listPersonByName();returnSUCCESS;}//根据id得到要修改的personpublicStringupdatePerson()(person=personManager.get(getId());returnSUCCESS;}//修改personpublicStringupdate()(personManager.updatePerson(person);returnSUCCESS;}//根据id删除publicStringdelete()(personManager.deletePerson(getId());returnSUCCESS;}//验证id是否存在publicStringidExists()(System.out.println(id);if(personManager.idExists(this.person.getId())){flag=false;responseText="该ID已经存在";}else{flag=true;responseText="该ID可以添加";}returnSUCCESS;}}ValidatelDAction.java异步校验用户名是否存在的actionpublicclassValidateIDActionextendsActionSupport{privateStringtip;privatePersonManagerpersonManager;privateLongid;privatePersonperson;privateBooleanflag;//省略各种setter和getterpublicStringvalidateID(){System.out.println(this.person.getId());if(personManager.idExists(this.person.getId())){setTip("系统中已有"+person.getId()+"这个ID,请重新选择一■个!");setFlag(true);}else{setTip("您好!"+person.getId()+",这个ID可用!");setFlag(false);}returnSUCCESS;}}PersonAperties处理PersonAction中类型转换错误信息invalid.fieldvalue.person.id=ID\u5E94\u8BE5\u4E3A\u6574\u6570invalid.fieldvalue.person.age=\u5E74\u9F84\u5E94\u8BE5\u662F\u6574\u6570PersonAction-add-validation.xml和PersonAction-update-validation.xml<?xmlversion="1.0"encoding="UTF8"?><!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkVal

温馨提示

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

评论

0/150

提交评论