在项目数据库下建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();
}
保存成功:
网页模板在模板之家http://www.cssmoban.com/cssthemes/7161.shtml 下载,将资源文件放到dtb-web项目的/dtb-web/src/main/webapp/目录下。
原版注册页面:
注册表单信息有点多,先把用不到的删掉.....精简版:
表单校验操作使用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接收请求:
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>
大功告成,测试一下,注册成功:
用户名已存在,注册失败,跳回注册页面: