0002.实现用户注册

 在项目数据库下建User表:

create table dtb_user
(
   user_id              bigint(32) not null,
   username             varchar(16),
   password             varchar(32),
   status               varchar(1),
   details              varchar(255),
   primary key (user_id)
);
 写相应User类:

public class User {
	private Long user_id;
	private String username;
	private String password;
	private String status;//状态
	private String details;//备注
	
	public Long getUser_id() {
		return user_id;
	}
	public void setUser_id(Long user_id) {
		this.user_id = user_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;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getDetails() {
		return details;
	}
	public void setDetails(String details) {
		this.details = details;
	}
	
}
 配置User类的映射文件User.hbm.xml,id托管给数据库生成:

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.dengtuzi.dtb.domain">
    	<class name="User" table="dtb_user" >
    		<id name="user_id" >
    			<generator class="native"></generator>
    		</id>
    		<property name="username"></property>
    		<property name="password"></property>
    		<property name="status"></property>
    		<property name="details"></property>
    	</class>
    
    </hibernate-mapping>
 测试一下:

@Test
	public void fun(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//获得session
		SessionFactory sf = (SessionFactory) ac.getBean("sessionFactory");
		Session session = sf.openSession();
		//开启事务
		Transaction ransaction = session.beginTransaction();
		
		User u = new User();
		u.setUsername("测试");
		session.save(u);
		
		//提交事务
		ransaction.commit();
		session.close();
		sf.close();
		
	}
 保存成功:

test_01

 网页模板在模板之家http://www.cssmoban.com/cssthemes/7161.shtml 下载,将资源文件放到dtb-web项目的
/dtb-web/src/main/webapp/目录下。

 原版注册页面:

registraction_before

 注册表单信息有点多,先把用不到的删掉.....精简版:registration_after

 表单校验操作使用EasyUI完成,导入资源文件,页面中引入jar包和样式文件:

<!-- easyUI -->
        <link rel="stylesheet" type="text/css" href="js/themes/default/easyui.css">
	<link rel="stylesheet" type="text/css" href="js/themes/icon.css">
	<script type="text/javascript" src="js/jquery.easyui.min.js"></script>

 使用EasyUI提供的API自定义输入长度和密码一致性校验规则:

 <script type="text/javascript">
	//自定义校验方法
	$(function(){
		$.extend($.fn.validatebox.defaults.rules, {
			//校验密码一致性
			isSame: {
				validator:function(value,param){
				return $(param[0]).val() == value;
				},
				message:'密码不匹配'
				},
			//校验输入项长度
			len: {
				validator:function(value){
				return value.length >= 6 && value.length<=32;
				},
				message:'有效长度在6-32之间'
				}
			});
	});
 </script>

调整输入项样式为easyui-validatebox,添加必填项required属性,同时设置valiType属性的值:

<input type="text" id="username" name="user.username" class="easyui-validatebox" required='true' validType="len" >
<input type="password" id="password" name="user.password" class="easyui-validatebox"  required="true" validType="len" >
<input id="cpassword" name="confirmPassword" type="password" class="easyui-validatebox" required="true" validType="isSame['#password']" >

最后,修改表单的请求路径和方法,设置OnSubmit属性进行表单有效性校验:

<form id="addUserFrom"  action="UserAction_add.action" method="post" onSubmit="return check();" >

 <script type="text/javascript">
	//进行表单校验
	function check(){
		//通过表单验证则提交表单
		return $("#addUserFrom").form("validate");
	}
 </script>

前端页面完成后,进行服务器端开发。在dtb-web项目下新建UserAction接收请求:

action_path

 Struts2提供了3种封装页面参数的方法,分别可以通过设置属性驱动、设置对象驱动、实现ModelDriven接口设置模型驱动三种方式获取自动封装的页面参数。我用的是使用对象驱动来获取,UserAction代码:

@Controller
@Scope("prototype")
public class UserAction {
	@Autowired
	private UserService userService = new UserServiceImpl();
	private User user; //设置对象驱动
	
	/**
	 * 新用户注册
	 * 
	 */
	public String add(){
		//调用service处理添加操作
		Long id = userService.add(user);
		if(id !=null)
			//注册成功
			return "success";
		//注册失败
		return "none";
	}

	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	
}
 考虑到数据的安全性,并不应该在数据库中储存用户的明文密码,因此在service层中先对用户输入的密码进行MD5加密,

然后查询用户名是否被占用,若未被使用,则调用Dao的save方法执行持久化操作:

@Service
@Transactional//事务注解
public class UserServiceImpl implements UserService {


	@Autowired
	private UserDao userDao = new UserDaoImpl();
	
	public Long add(User user) {
		//将用户输入的明文密码加密
		String md5_password = MD5Utils.getMd5(user.getPassword());
		user.setPassword(md5_password);
		//查询用户名是否被占用
		if(userDao.find(user) == null){
			return userDao.add(user);
		}
		return null;
	}
	
}
 User层使用HibernateTemplate模板类提供的find和save方法查询和保存用户:
@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
	
	
	@Resource
	public void setMySessionFactory(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}
	
	/**
	 * 添加用户
	 */
	public Long add(User user) {
		return (Long) this.getHibernateTemplate().save(user);
		
	}
	
	/**
	 * 根据用户名查找用户
	 * @param user
	 * @return
	 */
	public User find(User user){
		//把输入username赋值给example
		User example = new User();
		example.setUsername(user.getUsername());
		//根据用户名查找用户
		List<User> list = this.getHibernateTemplate().findByExample(example);
		if(list.size() != 0){
			return (User) list.get(0);
		}else{
			return null;
		}
	}
}
 最后,在struts配置文件中加入Action配置:
	<package name="user" extends="struts-default" namespace="/">
		<action name="UserAction_*" class="com.dengtuzi.dtb.web.action.UserAction" method="{1}">
			<result name="success" type="dispatcher">/success.jsp</result>
			<result name="none" type="dispatcher">/registration.jsp</result>
		</action>
	    </package>
 大功告成,测试一下,注册成功: add_test



用户名已存在,注册失败,跳回注册页面:

add_fail_test



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值