本文实例为大家分享了struts2和hibernate实现登录和注册功能,供大家参考,具体内容如下
1、该项目使用MySQL数据库,数据库名为test,表名info,如图所示:
2、配置web.xml(Struts2使用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<? xml version = "1.0" encoding = "UTF-8" ?> < web-app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> < filter > < filter-name >struts2</ filter-name > < filter-class >org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</ filter-class > </ filter > < filter-mapping > < filter-name >struts2</ filter-name > < url-pattern >/*</ url-pattern > </ filter-mapping > < welcome-file-list > < welcome-file >index.jsp</ welcome-file > </ welcome-file-list > </ web-app > |
3、编写视图组件(JSP页面)
(1)登录页面login.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >< s:text name = "基于SH的登录注册系统" /></ title > </ head > < body bgcolor = "#CCCCFF" > < s:form action = "login" method = "post" > < br >< br >< br >< br >< br >< br > < table border = "1" align = "center" bgcolor = "AABBCCDD" > < tr > < td > < s:textfield name = "userName" label = "用户名字" size = "16" /> </ td > </ tr > < tr > < td > < s:password name = "password" label = "用户密码" size = "18" /> </ td > </ tr > < tr > < td colspan = "2" align = "center" > < s:submit value = "登录" /> </ td > </ tr > < tr > < td colspan = "2" align = "center" > < s:a href = "http://localhost:8080/hibernate01/register.jsp" >注册</ s:a > </ td > </ tr > </ table > </ s:form > </ body > </ html > |
(2)登陆成功页面success.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >Insert title here</ title > </ head > < body bgcolor = "#CCCCFF" > < hr > < table > < tr > < td > 欢迎< s:property value = "userName" />,登陆成功! </ td > </ tr > </ table > < hr > </ body > </ html > |
(3)注册页面register.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >Insert title here</ title > </ head > < body bgcolor = "#CCCCFF" > < s:form action = "register" method = "post" > < br >< br >< br >< br >< br >< br > < table border = "1" align = "center" bgcolor = "AABBCCDD" > < tr > < td > < s:textfield name = "userName" label = "用户名字" size = "16" /> </ td > </ tr > < tr > < td > < s:password name = "password1" label = "用户密码" size = "18" /> </ td > </ tr > < tr > < td > < s:password name = "password2" label = "再次输入密码" size = "18" /> </ td > </ tr > < tr > < td colspan = "2" align = "center" > < input type = "submit" value = "提交" /> < input type = "reset" value = "清空" /> </ td > </ tr > < tr > < td colspan = "2" align = "center" > < s:a href = "http://localhost:8080/hibernate01/login.jsp" >返回</ s:a > </ td > </ tr > </ table > </ s:form > </ body > </ html > |
4、业务控制器Action
(1)登录页面对应的业务控制器LoginAction.java
其中,重写valiadate()方法,进行手工验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
package loginRegisterAction; import java.util.List; import loginRegisterDao.LoginRegisterInfo; import PO.UserInfoPO; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String userName; private String password; private String message= "error" ; private List list; public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public void validate(){ if ( this .getUserName()== null || this .getUserName().length()== 0 ){ addFieldError( "userName" , "用户名不能为空!" ); } else { LoginRegisterInfo info= new LoginRegisterInfo(); list=info.queryInfo( "userName" , this .getUserName()); if (list.size()== 0 ){ addFieldError( "userName" , "该用户尚未注册" ); } else { UserInfoPO ui= new UserInfoPO(); for ( int i= 0 ;i<list.size();i++){ ui=(UserInfoPO) list.get(i); if ( this .getUserName().equals(ui.getUserName())){ if (ui.getPassword().equals( this .getPassword())){ message=SUCCESS; } else { addFieldError( "password" , "登录密码不正确" ); } } } } } } public String execute() throws Exception{ return message; } } |
(2)注册页面对应的业务控制器RegisterAction.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package loginRegisterAction; import java.util.List; import loginRegisterDao.LoginRegisterInfo; import PO.UserInfoPO; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport { private String userName; private String password1; private String password2; private String mess=ERROR; //ERROR等同于"error" private List list; public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getPassword1() { return password1; } public void setPassword1(String password1) { this .password1 = password1; } public String getPassword2() { return password2; } public void setPassword2(String password2) { this .password2 = password2; } public void validate(){ if ( this .getUserName()== null || this .getUserName().length()== 0 ){ addFieldError( "userName" , "用户名不能为空!" ); } else { LoginRegisterInfo info= new LoginRegisterInfo(); list=info.queryInfo( "userName" , this .getUserName()); UserInfoPO ui= new UserInfoPO(); for ( int i= 0 ;i<list.size();i++){ ui=(UserInfoPO) list.get(i); if (ui.getUserName().equals( this .getUserName())){ addFieldError( "userName" , "用户名已存在!" ); } } } if ( this .getPassword1()== null || this .getPassword1().length()== 0 ){ addFieldError( "password1" , "登录密码不许为空!" ); } else if ( this .getPassword2()== null || this .getPassword2().length()== 0 ){ addFieldError( "password2" , "重复密码不许为空!" ); } else if (! this .getPassword1().equals( this .getPassword2())){ addFieldError( "password2" , "两次密码不一致!" ); } } public UserInfoPO userInfo(){ UserInfoPO info= new UserInfoPO(); info.setUserName( this .getUserName()); info.setPassword( this .getPassword1()); return info; } public String execute() throws Exception{ LoginRegisterInfo lr= new LoginRegisterInfo(); String ri=lr.saveInfo(userInfo()); if (ri.equals( "success" )){ mess=SUCCESS; } return mess; } } |
5、在struts.xml中配置Action
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> < struts > < package name = "default" extends = "struts-default" > < action name = "register" class = "loginRegisterAction.RegisterAction" > < result name = "success" >/login.jsp</ result > < result name = "input" >/register.jsp</ result > < result name = "error" >/register.jsp</ result > </ action > < action name = "login" class = "loginRegisterAction.LoginAction" > < result name = "success" >/success.jsp</ result > < result name = "input" >/login.jsp</ result > < result name = "error" >/login.jsp</ result > </ action > </ package > </ struts > |
6、Hibernate的配置文件
使用Hibernate需要通过Hibernate的配置文件加载数据库驱动以及与数据建立连接,配置文件为hibernate.cfg.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> < hibernate-configuration > < session-factory > < property name = "connection.driver_class" >com.mysql.jdbc.Driver</ property > < property name = "connection.url" >jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8</ property > < property name = "connection.username" >root</ property > < property name = "connection.password" ></ property > <!-- 指定数据库的方言 --> < property name = "dialect" >org.hibernate.dialect.MySQL5Dialect</ property > <!-- 加入映射文件 --> < mapping resource = "PO/UserInfoPO.hbm.xml" /> </ session-factory > </ hibernate-configuration > |
7、加载上面Hibernate配置文件的类(HIbernateSessionFactory.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package addHibernateFile; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateSessionFactory { private SessionFactory sessionFactory; public HibernateSessionFactory(){ } public SessionFactory config(){ try { Configuration configuration= new Configuration(); Configuration configure=configuration.configure( "hibernate.cfg.xml" ); return configure.buildSessionFactory(); } catch (Exception e){ e.getMessage(); return null ; } } public Session getSession(){ sessionFactory=config(); return sessionFactory.openSession(); } } |
8、PO对象以及对应的映射文件(在同一个包下)
(1)PO对象的类UserInfoPO.Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package PO; /* * PO对象(持久化对象)的类,与数据库相对应 */ public class UserInfoPO { private int id; private String userName; private String password; public int getId() { return id; } public void setId( int id) { this .id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } } |
(2) PO对应的映射文件UserInfoPO.hbm.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<? xml version = "1.0" encoding = "utf-8" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 映射文件的根元素 --> < hibernate-mapping > <!-- 配置PO对象与数据库中表的对应关系使用class元素,name配置PO对象对应的类, table配置该PO对象在数据库中对应的表名,catalog配置表对应的数据库名 --> < class name = "PO.UserInfoPO" table = "info" catalog = "test" > <!-- id元素配置PO对象与数据库中表的对应id字段,name配置PO对象对应的属性,type指定类型 generator元素将主键自动加入序列 --> < id name = "id" type = "int" > < column name = "id" /> < generator class = "assigned" /> </ id > < property name = "userName" type = "string" > < column name = "userName" length = "30" not-null = "true" /> </ property > < property name = "password" type = "string" > < column name = "password" length = "30" not-null = "true" /> </ property > </ class > </ hibernate-mapping > |
9、完成登录和注册业务功能
将登录和注册业务功能封装到类LoginRegisterInfo(JavaBean)中
数据库操作类LoginRegisterInfo.java:
- package loginRegisterDao;
- /*
- * 登录和注册业务功能,封装到这个JavaBean
- */
- import java.util.List;
- import javax.swing.JOptionPane;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import PO.UserInfoPO;
- import addHibernateFile.HibernateSessionFactory;
- public class LoginRegisterInfo {
- private Session session;
- private Transaction transaction;
- private Query query;
- HibernateSessionFactory getSession;
- public LoginRegisterInfo(){
- }
- public String saveInfo(UserInfoPO info){
- String mess="error";
- getSession=new HibernateSessionFactory();
- session=getSession.getSession();
- try{
- transaction=session.beginTransaction();
- session.save(info);
- transaction.commit();
- mess="success";
- return mess;
- }catch(Exception e){
- message("RegisterInfo.error:"+e);
- e.printStackTrace();
- return null;
- }
- }
- public List queryInfo(String type,Object value){
- getSession=new HibernateSessionFactory();
- session=getSession.getSession();
- try{
- String hqlsql="from UserInfoPO as u where u.userName=?";
- query=session.createQuery(hqlsql);
- query.setParameter(0, value);
- List list=query.list();
- transaction=session.beginTransaction();
- transaction.commit();
- return list;
- }catch(Exception e){
- message("LoginRegisterInfo类中有异常,异常为::"+e);
- e.printStackTrace();
- return null;
- }
- }
- public void message(String mess){
- int type=JOptionPane.YES_NO_OPTION;
- String title="提示信息";
- JOptionPane.showMessageDialog(null, mess,title,type);
- }
- }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/Donnnnnn/p/5692182.html