SSH框架 CRUD及验证 ajax校验 完整实例一.docx
- 文档编号:11472647
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:21
- 大小:102.53KB
SSH框架 CRUD及验证 ajax校验 完整实例一.docx
《SSH框架 CRUD及验证 ajax校验 完整实例一.docx》由会员分享,可在线阅读,更多相关《SSH框架 CRUD及验证 ajax校验 完整实例一.docx(21页珍藏版)》请在冰豆网上搜索。
SSH框架CRUD及验证ajax校验完整实例一
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支持的时候冲突的架包已经删除.
●项目的目录结构
源文件的目录结构如左图,其中pass文件夹放的是一些历史文件,和本例无关.项目按照mvc框惯例,分为action,dao,model,service,web五层.
jsp文件如右图所示放在了WebRoot/per文件夹下,连同js库文件,其中register.jsp是测试验证码使用的.
●项目对应的数据库表
PL/SQL工具下代码如下,其中命名空间,大小等信息因人而异.
--Createtable
createtablePERSON
(
IDNUMBER(10)notnull,
NAMEVARCHAR2(30),
AGENUMBER(10),
SEXVARCHAR2(10),
ADDRESSVARCHAR2(50)
)
tablespaceUSERS
pctfree10
initrans1
maxtrans255
storage
(
initial64K
minextents1
maxextentsunlimited
);
--Create/Recreateprimary,uniqueandforeignkeyconstraints
altertablePERSON
addprimarykey(ID)
usingindex
tablespaceUSERS
pctfree10
initrans2
maxtrans255
storage
(
initial64K
minextents1
maxextentsunlimited
);
二开发步骤
首先新建web项目crm,依次为项目添加SSH支持,接着用工具或命令在数据库中建立数据表PERSON,4个列ID,NAME,AGE,ADDRESS,其中ID为主键.接着在Myeclipse中打开database试图,为数据库新建一个连接或者使用已有的连接.接下来可以选择直接在database试图中选中PERSON表使用Hibernate反向工程自动生成实体Dao和映射表,也可以自己编写这些文件,相关代码如下.
●model层,包名com.person.crm.model
Person.java数据表对应的实体类
packagecom.person.crm.model;
publicclassPersonimplementsjava.io.Serializable{
privatestaticfinallongserialVersionUID=-6013196370398044363L;
privateLongid;
privateStringname;
privateLongage;
privateStringsex;
privateStringaddress;
publicPerson(){
}
/**fullconstructor*/
publicPerson(Stringname,Longage,Stringsex,Stringaddress){
this.name=name;
this.age=age;
this.sex=sex;
this.address=address;
}
//各个属性的getter和setter方法
}
Person.hbm.xml映射表主键设置为列ID,生成方式assigned及由输入指定
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"
PageBeanmodel层用于分页的Bean
packagecom.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*(currentPage-1);
returnoffset;
}
/**
*计算当前页,若为0,或者请求的URL中没有"?
page=",则用1代替
*@parampage传入的参数(可能为空,即0,则返回1)
*@return当前页
*/
publicstaticintcountCurrentPage(intpage){
finalintcurrentPage=(page==0?
1:
page);
returncurrentPage;
}
}
●Dao层,包名com.person.crm.dao
PersonDao.javaDao接口,提供了本例要实现的基本功能CRUD,用户名校验
packagecom.person.crm.dao;
importjava.util.List;
importcom.person.crm.model.Person;
publicinterfacePersonDaoextendsPageUtilDao{
publicvoidadd(Personp);
publicPersongetPerson(Longid);
publicList
publicList
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接口的实现类
publicclassPersonDaoHibernateextendsHibernateDaoSupportimplements
PersonDao{
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
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
for(Personp:
list){
System.out.println("ID:
"+p.getId()+"--姓名:
"+p.getName()+"--年龄:
"+p.getAge()+"--性别:
"+p.getSex()+"--地址:
"+p.getAddress());
}
returnlist;
}
});
returnlist;
}
}
●业务层service包名com.person.crm.service
PersonManager.java业务层接口
publicinterfacePersonManager{
publicvoidaddPerson(Personp);
publicvoidgetPerson(Longid);
publicList
publicList
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
/*将分页信息保存到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一个用于生成验证码的类
AuthImg.java源码见附件
●action层负责处理用户请求包名com.person.crm.action
ValidateIDAction.java验证用户名是否存在时要调用的action
publicclassValidateIDActionextendsActionSupport{
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()+",这个ID可用!
");
setFlag(false);
}
returnSUCCESS;
}
}
PersonList.java分页显示信息
publicclassPersonListextendsActionSupport{
privatePersonManagerpersonManager;
//第几页
privateintpage;
privatePageBeanpageBean;
//各种getter和setter
publicStringexecute()throwsException{
//分页的pageBean,
this.pageBean=personManager.queryForPage(PageUtilDao.pagesize,page);
returnSUCCESS;
}
}
PersonAction.java处理crud的action
publicclassPersonActionextendsActionSupport{
privatestaticfinallongserialVers
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH框架 CRUD及验证 ajax校验 完整实例一 SSH 框架 CRUD 验证 ajax 校验 完整 实例