平时成绩记分系统代码实现过程v10用户登录.docx
《平时成绩记分系统代码实现过程v10用户登录.docx》由会员分享,可在线阅读,更多相关《平时成绩记分系统代码实现过程v10用户登录.docx(29页珍藏版)》请在冰豆网上搜索。
平时成绩记分系统代码实现过程v10用户登录
平时成绩记分系统项目代码实现过程-用户登录
目录
1创建具有SSH能力的Web工程1
2用户登录功能1
2.1登录用户数据库设计1
2.2创建用户数据表1
2.3添加管理员数据2
2.4创建用户实体类dao.LoginUser及用户访问类dao.LoginUserDAO2
2.5创建用户服务类service.UserService8
2.6修改applicationContext.xml,手动添加UserServicebean。
9
2.7用户登录界面(/login.jsp)9
2.8登录跳转逻辑(web.UserAction.login)9
2.9配置struts.xml12
2.10添加两个简单的业务主页12
2.11新建错误提示页面12
2.12小结(文件目录结构)13
2.13测试14
2.13.1登录14
3小技巧14
3.1设置JSP的字符编码及字符集14
3.2JSP传递参数到Action成员15
3.3在创建数据表、数据库等对象时,注意不要使用关键字作为对象的名称。
15
图目录
图2.1创建用户数据表1
图2.2Hibernate创建用户类3
图2.3文件目录结构14
图2.4登录界面15
图2.5管理员登录成功后跳转的页面15
代码目录
代码2.1创建用户数据表1
代码2.2添加管理员数据的SQL代码2
代码2.3用户类接口4
代码2.4用户实体类4
代码2.5实体访问接口类5
代码2.6实体访问类5
代码2.7用户服务接口类8
代码2.8用户服务类8
代码2.9手动添加UserServicebean9
代码2.10用户登录界面(/login.jsp)9
代码2.11登录跳转逻辑(UserAction.login)10
代码2.12BaseAction.java11
代码2.13用户工厂11
代码2.14用户工厂接口11
代码2.15applicationContext.xml中的对UserAction类bean的配置代码11
代码2.16Struts.xml12
代码2.17空白的业务主页12
代码2.18错误提示页面error.jsp13
代码3.1JSP传递参数到Action成员示例115
代码3.2JSP传递参数到Action成员示例215
1创建具有SSH能力的Web工程
添加三个Java源代码包:
dao、service和web,以及在WebRoot下添加jsp文件夹(存放jsp文件,下设user、student、admin及teacher子文件夹)。
同时要记得:
1)手工配置web.xml,以便添加spring配置信息和监听;
2)手工在applicationContext.xml中配置事务特性;
3)添加数据库驱动。
步骤省略,详参另一份文档“Struts2.1、Spring3.0、Hibernate3.3框架整合-用户登录示例(更新).doc”。
2用户登录功能
登录用户数据库设计
系统主要有两类用户:
教师(也就是管理员)和学生。
由于教师登录名固定为admin,密码则可由外部设置,所以实际上需要管理的用户只有学生一种类型。
但为了保留系统的扩展能力,我们还是设置登录用户超级实体,作为将来管理员、教师和学生的泛化对象。
登录用户的主要属性有两个:
登录名(id)和登录密码(password)。
创建用户数据表
该表记录系统所有用户的登录信息。
其创建界面及代码(SQLSERVER)如下:
创建用户数据表
代码2.1创建用户数据表
/******对象:
Table[dbo].[loginUser]脚本日期:
11/11/201119:
47:
20******/
CREATETABLE[dbo].[loginUser](
[id][varchar](20)NOTNULL,
[password][varchar](50)NULL,
CONSTRAINT[PK_user]PRIMARYKEYCLUSTERED
(
[id]ASC
)WITH(PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
GO
SETANSI_PADDINGOFF
GO
EXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'登录名',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'user',@level2type=N'COLUMN',@level2name=N'id'
GO
EXECsys.sp_addextendedproperty@name=N'MS_Description',@value=N'密码',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE',@level1name=N'user',@level2type=N'COLUMN',@level2name=N'password'
添加管理员数据
因为user表可以记录各类用户,所以我们还是把管理员的登录信息放在该表中,而不是配置文件中。
这样就可以以统一的方式由管理员登录后修改自己的密码等信息了。
添加管理员数据的SQL代码如下:
代码2.2添加管理员数据的SQL代码
INSERTINTO[dbo].[loginUser]([id],[password])
VALUES('admin','123')//管理员初始登录名为admin,密码为123
创建用户实体类dao.LoginUser及用户访问类dao.LoginUserDAO
注意:
1)由于主键是字符型,所以IdGenerator生成方法要用“assigned”。
2)实体类及实体访问类不需要手动生成,Hibernate反向工程时自动生成。
3)接口类生成方法为:
右击欲提取的类,选择“refactorExtractInterface…”。
具体操作过程参以前的文档“Struts2.1、Spring3.0、Hibernate3.3框架整合-用户登录示例(更新).doc”。
4)需手工在dao.ILoginUser及dao.LoginUser中添加getUserRole方法及相关常量。
详见代码范本。
Hibernate创建用户类
代码2.3用户类接口
packagedao;
publicinterfaceILoginUser{
publicstaticfinalintROLE_UNKNOWN=0x0;
publicstaticfinalintROLE_ADMIN=0x1;
publicstaticfinalintROLE_TEACHER=0x2;
publicstaticfinalintROLE_STUDENT=0x4;
publicstaticfinalStringADMIN_LOGIN_NAME="admin";
publicabstractintgetUserRole();
publicabstractStringgetId();
publicabstractvoidsetId(Stringid);
publicabstractStringgetPassword();
publicabstractvoidsetPassword(Stringpassword);
}
代码2.4用户实体类
packagedao;
/**
*LoginUserentity.@authorMyEclipsePersistenceTools
*/
publicclassLoginUserimplementsjava.io.Serializable,ILoginUser{
//Fields
privateStringid;
privateStringpassword;
//Constructors
/**defaultconstructor*/
publicLoginUser(){
}
/**minimalconstructor*/
publicLoginUser(Stringid){
this.id=id;
}
/**fullconstructor*/
publicLoginUser(Stringid,Stringpassword){
this.id=id;
this.password=password;
}
//Propertyaccessors
/*
*(non-Javadoc)
*@seedao.ILoginUser#getId()
*/
publicStringgetId(){
returnthis.id;
}
/*
*(non-Javadoc)
*@seedao.ILoginUser#setId(java.lang.String)
*/
publicvoidsetId(Stringid){
this.id=id;
}
/*
*(non-Javadoc)
*@seedao.ILoginUser#getPassword()
*/
publicStringgetPassword(){
returnthis.password;
}
/*
*(non-Javadoc)
*@seedao.ILoginUser#setPassword(java.lang.String)
*/
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicintgetUserRole(){
//TODO目前只设置管理员和学生两类用户,并且管理员登录名固定。
if(id.equals(ILoginUser.ADMIN_LOGIN_NAME)){
returnILoginUser.ROLE_ADMIN;
}
returnILoginUser.ROLE_STUDENT;
}
}
代码2.5实体访问接口类
packagedao;
importjava.util.List;
publicinterfaceILoginUserDAO{
//propertyconstants
publicstaticfinalStringPASSWORD="password";
publicabstractvoidsave(ILoginUsertransientInstance);
publicabstractvoiddelete(ILoginUserpersistentInstance);
publicabstractILoginUserfindById(java.lang.Stringid);
publicabstractListfindByExample(ILoginUserinstance);
publicabstractListfindByProperty(StringpropertyName,Objectvalue);
publicabstractListfindByPassword(Objectpassword);
publicabstractListfindAll();
publicabstractILoginUsermerge(LoginUserdetachedInstance);
publicabstractvoidattachDirty(ILoginUserinstance);
publicabstractvoidattachClean(ILoginUserinstance);
}
代码2.6实体访问类
packagedao;
importjava.util.List;
importorg.hibernate.LockMode;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.context.ApplicationContext;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
*Adataaccessobject(DAO)providingpersistenceandsearchsupportfor
*LoginUserentities.Transactioncontrolofthesave(),update()anddelete()
*operationscandirectlysupportSpringcontainer-managedtransactionsorthey
*canbeaugmentedtohandleuser-managedSpringtransactions.Eachofthese
*methodsprovidesadditionalinformationforhowtoconfigureitforthe
*desiredtypeoftransactioncontrol.
*
*@seedao.LoginUser
*@authorMyEclipsePersistenceTools
*/
publicclassLoginUserDAOextendsHibernateDaoSupportimplementsILoginUserDAO{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(LoginUserDAO.class);
protectedvoidinitDao(){
//donothing
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#save(dao.ILoginUser)
*/
publicvoidsave(ILoginUsertransientInstance){
log.debug("savingLoginUserinstance");
try{
getHibernateTemplate().save(transientInstance);
log.debug("savesuccessful");
}catch(RuntimeExceptionre){
log.error("savefailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#delete(dao.ILoginUser)
*/
publicvoiddelete(ILoginUserpersistentInstance){
log.debug("deletingLoginUserinstance");
try{
getHibernateTemplate().delete(persistentInstance);
log.debug("deletesuccessful");
}catch(RuntimeExceptionre){
log.error("deletefailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#findById(java.lang.String)
*/
publicILoginUserfindById(java.lang.Stringid){
log.debug("gettingLoginUserinstancewithid:
"+id);
try{
ILoginUserinstance=
(ILoginUser)getHibernateTemplate().get("dao.LoginUser",id);
returninstance;
}catch(RuntimeExceptionre){
log.error("getfailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#findByExample(dao.ILoginUser)
*/
publicListfindByExample(ILoginUserinstance){
log.debug("findingLoginUserinstancebyexample");
try{
Listresults=getHibernateTemplate().findByExample(instance);
log.debug("findbyexamplesuccessful,resultsize:
"+results.size());
returnresults;
}catch(RuntimeExceptionre){
log.error("findbyexamplefailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#findByProperty(java.lang.String,java.lang.Object)
*/
publicListfindByProperty(StringpropertyName,Objectvalue){
log.debug("findingLoginUserinstancewithproperty:
"+propertyName
+",value:
"+value);
try{
StringqueryString=
"fromLoginUserasmodelwheremodel."+propertyName+"=?
";
returngetHibernateTemplate().find(queryString,value);
}catch(RuntimeExceptionre){
log.error("findbypropertynamefailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#findByPassword(java.lang.Object)
*/
publicListfindByPassword(Objectpassword){
returnfindByProperty(PASSWORD,password);
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#findAll()
*/
publicListfindAll(){
log.debug("findingallLoginUserinstances");
try{
StringqueryString="fromLoginUser";
returngetHibernateTemplate().find(queryString);
}catch(RuntimeExceptionre){
log.error("findallfailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#merge(dao.LoginUser)
*/
publicILoginUsermerge(LoginUserdetachedInstance){
log.debug("mergingLoginUserinstance");
try{
ILoginUserresult=
(ILoginUser)getHibernateTemplate().merge(detachedInstance);
log.debug("mergesuccessful");
returnresult;
}catch(RuntimeExceptionre){
log.error("mergefailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#attachDirty(dao.ILoginUser)
*/
publicvoidattachDirty(ILoginUserinstance){
log.debug("attachingdirtyLoginUserinstance");
try{
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attachsuccessful");
}catch(RuntimeExceptionre){
log.error("attachfailed",re);
throwre;
}
}
/*(non-Javadoc)
*@seedao.ILoginUserDAO#attachClean(dao.ILoginUser)
*/
publicvoidattachClean(