您的位置:首页 > 其它

使用ssh框架写一个基本的登录注册页面

2017-07-05 22:27 369 查看
From:

http://blog.csdn.net/lylyyg/article/details/46932493

1、建立数据库和用户表,简单考虑只建立user表,添加user_id、user_name、email、pass四个属性。

2、新建web工程。

3、第一种方法是直接右击项目名称选择Myeclipse一次选择添加structs2、springhibernate包。这种方法在后续编程中有可能造成许多jar包冲突。

  第二种是使用没有冲突的jar包。把structs、spring、Hibernate以及MySQL-connector-java(连接mysql数据库)添加到WebRoot/WEB-INF/bin目录下,并选中项目中要使用的所有jar包文件右击选择builtPath——>Add
To Built Path

4、选择MyEclipse Database explorer Perspective。新建一个Database Driver。



上图配置自动在ApplicationContext.xml文件中自动生成dataSorce bean

选择要建立Hibernate反转映射的表右击选择Hibernate reverse Engineering配置表的各项属性后会生成如下文件



5、建立UserDao.java

[java]
view plain
copy
print?

import java.util.List;  
import com.domain.User;  
public interface UserDao {  
    User get(Integer id);  
    Integer save(User user);  
    void update(User user);  
    void delete(User user);  
    void delete(Integer id);  
      
    List<User> findByNameAndPass(User user);  
    User findByName(String name);  
    User findByEmail(String email);  
}  

import java.util.List;
import com.domain.User;
public interface UserDao {
User get(Integer id);
Integer save(User user);
void update(User user);
void delete(User user);
void delete(Integer id);

List<User> findByNameAndPass(User user);
User findByName(String name);
User findByEmail(String email);
}


6、UserDaoHibernate.java

[java]
view plain
copy
print?

package dao.persistence.impl;  
  
import java.util.*;  
import com.common.hibernate3.support.YeekuHibernateDaoSupport;  
import com.domain.*;  
import dao.UserDao;  
public class UserDaoHibernate extends YeekuHibernateDaoSupport implements UserDao{  
    @Override  
    public User get(Integer id){  
        return getHibernateTemplate().get(User.class, id);  
    }  
  
    @Override  
    public Integer save(User user) {  
        // TODO Auto-generated method stub  
        Integer inte = (Integer)getHibernateTemplate().save(user);  
        return inte;  
    }  
  
    @Override  
    public void update(User user) {  
        // TODO Auto-generated method stub  
        getHibernateTemplate().update(user);          
    }  
  
    @Override  
    public void delete(User user) {  
        // TODO Auto-generated method stub  
        getHibernateTemplate().delete(user);  
    }  
      
    @Override  
    public void delete(Integer id) {  
        // TODO Auto-generated method stub  
        getHibernateTemplate().delete(get(id));  
    }  
  
    @SuppressWarnings("unchecked")  
    @Override  
    public List<User> findByNameAndPass(User user) {  
        // TODO Auto-generated method stub  
        return (List<User>)getHibernateTemplate()  
                .find("from User u where u.userName=? and u.pass=?", user.getUserName(), user.getPass());  
    }  
  
    @Override  
    public User findByName(String name) {  
        // TODO Auto-generated method stub  
        @SuppressWarnings("unchecked")  
        List<User> us = (List<User>)getHibernateTemplate()  
                .find("from User where userName = ? " , name);  
            if (us!= null && us.size() >= 1)  
            {  
                return us.get(0);  
            }  
            return null;  
    }  
  
    @Override  
    public User findByEmail(String email) {  
        // TODO Auto-generated method stub  
        @SuppressWarnings("unchecked")  
        List<User> us = (List<User>)getHibernateTemplate()  
                .find("from User where email = ? " , email);  
            if (us!= null && us.size() >= 1)  
            {  
                return us.get(0);  
            }  
            return null;  
    }  
}  

package dao.persistence.impl;

import java.util.*;
import com.common.hibernate3.support.YeekuHibernateDaoSupport;
import com.domain.*;
import dao.UserDao;
public class UserDaoHibernate extends YeekuHibernateDaoSupport implements UserDao{
@Override
public User get(Integer id){
return getHibernateTemplate().get(User.class, id);
}

@Override
public Integer save(User user) {
// TODO Auto-generated method stub
Integer inte = (Integer)getHibernateTemplate().save(user);
return inte;
}

@Override
public void update(User user) {
// TODO Auto-generated method stub
getHibernateTemplate().update(user);
}

@Override
public void delete(User user) {
// TODO Auto-generated method stub
getHibernateTemplate().delete(user);
}

@Override
public void delete(Integer id) {
// TODO Auto-generated method stub
getHibernateTemplate().delete(get(id));
}

@SuppressWarnings("unchecked")
@Override
public List<User> findByNameAndPass(User user) {
// TODO Auto-generated method stub
return (List<User>)getHibernateTemplate()
.find("from User u where u.userName=? and u.pass=?", user.getUserName(), user.getPass());
}

@Override
public User findByName(String name) {
// TODO Auto-generated method stub
@SuppressWarnings("unchecked")
List<User> us = (List<User>)getHibernateTemplate()
.find("from User where userName = ? " , name);
if (us!= null && us.size() >= 1)
{
return us.get(0);
}
return null;
}

@Override
public User findByEmail(String email) {
// TODO Auto-generated method stub
@SuppressWarnings("unchecked")
List<User> us = (List<User>)getHibernateTemplate()
.find("from User where email = ? " , email);
if (us!= null && us.size() >= 1)
{
return us.get(0);
}
return null;
}
}


7、UserService.java

[java]
view plain
copy
print?

package com.service;  
  
import com.domain.*;  
import java.util.*;  
public interface UserService {  
public User getByName(String name);  
public User getByEmail(String email);  
public boolean checkUser(User user);  
public boolean addUser(User user);  
}  

package com.service;

import com.domain.*;
import java.util.*;
public interface UserService {
public User getByName(String name);
public User getByEmail(String email);
public boolean checkUser(User user);
public boolean addUser(User user);
}


8、UserManageImpl.java

[java]
view plain
copy
print?

package com.service.impl;  
  
import java.util.List;  
import com.domain.User;  
import com.service.UserService;  
import dao.*;  
  
public class UserManagerImpl implements UserService {  
  
    private UserDao userdao;  
      
    public UserDao getUserdao() {  
        return userdao;  
    }  
  
    public void setUserdao(UserDao userdao) {  
        this.userdao = userdao;  
    }  
  
    @Override  
    public User getByName(String name) {  
        return userdao.findByName(name);  
    }  
  
    @Override  
    public User getByEmail(String email) {  
        // TODO Auto-generated method stub  
        return userdao.findByEmail(email);  
    }  
  
    public boolean checkUser(User user){  
        List<User> users= (userdao.findByNameAndPass(user));  
        if(users.size()>0)  
            return true;  
        else  
            return false;  
    }  
      
    @Override  
    public boolean addUser(User user) {  
        // TODO Auto-generated method stub  
        Integer ref=(Integer) userdao.save(user);  
        if(ref!=null)  
            return true;  
        else  
            return false;  
    }  
  
}  

package com.service.impl;

import java.util.List;
import com.domain.User;
import com.service.UserService;
import dao.*;

public class UserManagerImpl implements UserService {

private UserDao userdao;

public UserDao getUserdao() {
return userdao;
}

public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}

@Override
public User getByName(String name) {
return userdao.findByName(name);
}

@Override
public User getByEmail(String email) {
// TODO Auto-generated method stub
return userdao.findByEmail(email);
}

public boolean checkUser(User user){
List<User> users= (userdao.findByNameAndPass(user));
if(users.size()>0)
return true;
else
return false;
}

@Override
public boolean addUser(User user) {
// TODO Auto-generated method stub
Integer ref=(Integer) userdao.save(user);
if(ref!=null)
return true;
else
return false;
}

}


9、UserAction.java

[java]
view plain
copy
print?

<pre name="code" class="java">package com.action;  
  
import net.sf.json.JSONObject;  
import com.domain.User;  
import com.opensymphony.xwork2.ActionSupport;  
import com.opensymphony.xwork2.ModelDriven;  
import com.service.UserService;  
  
@SuppressWarnings("serial")  
public class UserAction extends ActionSupport implements ModelDriven {  
    private String result;  
    private UserService userservice;  
    private User user;  
  
    public User getUser() {  
        return user;  
    }  
  
    public void setUser(User user) {  
        this.user.setUserName(user.getUserName());  
        this.user.setPass(user.getPass());  
        this.user = user;  
    }  
  
    public UserService getUserservice() {  
        return userservice;  
    }  
  
    public void setUserservice(UserService userservice) {  
        this.userservice = userservice;  
    }  
  
    public String getResult() {  
        return result;  
    }  
  
    public void setResult(String result) {  
        this.result = result;  
    }  
  
    @Override  
    public Object getModel() {  
        // TODO Auto-generated method stub  
        if (user == null)  
            user = new User();  
        return user;  
    }  
  
    public String checkUserName() {  
        String warnMsg = "";  
        User user = userservice.getByName(this.user.getUserName());  
        if (user == null)  
            warnMsg = "该用户名可用";  
        else  
            warnMsg = "该用户名已经存在";  
        JSONObject jo = new JSONObject();  
        jo.put("warnMsg", warnMsg);  
        result = jo.toString();//向jsp页面传递一个result值  
        return SUCCESS;  
    }  
  
    public String checkUserEmail() {  
        User user = userservice.getByEmail(this.user.getEmail());  
        String warnMsg = "";  
        if (user == null)  
            warnMsg = "该邮箱可用";  
        else  
            warnMsg = "该邮箱已注册";  
        JSONObject jo = new JSONObject();  
        jo.put("warnMsg", warnMsg);  
        result = jo.toString();  
        return SUCCESS;  
    }  
  
    public String login() {  
        if (userservice.checkUser(user))  
            return "success";  
        else  
            return "input";  
    }  
  
    public String add() {  
        if (userservice.addUser(user) == true)  
            return "success";  
        else  
            return "input";  
  
    }  
  
}  

<pre name="code" class="java">package com.action;

import net.sf.json.JSONObject;
import com.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.service.UserService;

@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven {
private String result;
private UserService userservice;
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user.setUserName(user.getUserName());
this.user.setPass(user.getPass());
this.user = user;
}

public UserService getUserservice() {
return userservice;
}

public void setUserservice(UserService userservice) {
this.userservice = userservice;
}

public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}

@Override
public Object getModel() {
// TODO Auto-generated method stub
if (user == null)
user = new User();
return user;
}

public String checkUserName() {
String warnMsg = "";
User user = userservice.getByName(this.user.getUserName());
if (user == null)
warnMsg = "该用户名可用";
else
warnMsg = "该用户名已经存在";
JSONObject jo = new JSONObject();
jo.put("warnMsg", warnMsg);
result = jo.toString();//向jsp页面传递一个result值
return SUCCESS;
}

public String checkUserEmail() {
User user = userservice.getByEmail(this.user.getEmail());
String warnMsg = "";
if (user == null)
warnMsg = "该邮箱可用";
else
warnMsg = "该邮箱已注册";
JSONObject jo = new JSONObject();
jo.put("warnMsg", warnMsg);
result = jo.toString();
return SUCCESS;
}

public String login() {
if (userservice.checkUser(user))
return "success";
else
return "input";
}

public String add() {
if (userservice.addUser(user) == true)
return "success";
else
return "input";

}

}


10、Bean注入



11、配置Action及校验配置

为了完成登录校验使用了Ajax技术,首先要为Structs添加JSON插件,将Structs解压缩目录的lib子目录下的structs-json-plugin-2.2.1.jar文件复制到web应用的WEB-INF、lib目录下。

[html]
view plain
copy
print?

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
<struts>  
    <package name="userjson" namespace="/" extends="json-default">  
        <action name="userJSONAction_*" method="{1}" class="UserA">  
            <result type="json">  
                <param name="root">result</param>  
            </result>  
        </action>  
    </package>  
    <package name="default" extends="struts-default" namespace="/">  
        <action name="Login" class="UserA" method="login">  
            <result name="input">/login.jsp</result>  
            <result name="success">/main.jsp</result>  
        </action>  
        <action name="regist" class="UserA" method="add">  
            <result name="input">/regist.jsp</result>  
            <result name="success">/main.jsp</result>  
        </action>  
  
        <action name="*">  
            <result>{1}.jsp</result>  
        </action>  
    </package>  
</struts>  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="userjson" namespace="/" extends="json-default">
<action name="userJSONAction_*" method="{1}" class="UserA">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
<package name="default" extends="struts-default" namespace="/">
<action name="Login" class="UserA" method="login">
<result name="input">/login.jsp</result>
<result name="success">/main.jsp</result>
</action>
<action name="regist" class="UserA" method="add">
<result name="input">/regist.jsp</result>
<result name="success">/main.jsp</result>
</action>

<action name="*">
<result>{1}.jsp</result>
</action>
</package>
</struts>

上面的文件为第一个action配置了返回值为Json(JavaScript Object Notation即javascript对象符号)类型的result。json插件可以将action中的状态信息序列化成json格式的字符串,并将该字符串返回给客户端的浏览器。在客户端页面就可以用JavaScript异步调用Action,并且Action可以不使用视图资源来显示该Action里的状态信息。通过这种方式就可以完成Ajax(Asynchronous
JavaScript And XML即异步JavaScript和XML技术)交互。

配置json数据类型的result时还配置了root参数,该参数可以为OGNL表达式,确定Action内的某个属性。配置该参数说明不再把整个Action对象序列化成JSON字符串,而是只将该参数指定的Action属性序列化成JSON字符串返回给客户端。

12、login.jsp建立登录页面

主要的提交数据表单代码如下:

[html]
view plain
copy
print?

<form method="post" action="Login.action">  
    用户名:<input name="username" type="text"><br/>  
    密码:<input name="password" type="password"> <br/>  
    <input name="Submits" type="submit" value="登录"/>  
    <input name="ReSet" type="reset" value="重置"/>  
       <a href="regist.jsp"><input type="button"  value="注册"/></a>  
      
   </form>  

<form method="post" action="Login.action">
用户名:<input name="username" type="text"><br/>
密码:<input name="password" type="password"> <br/>
<input name="Submits" type="submit" value="登录"/>
<input name="ReSet" type="reset" value="重置"/>
<a href="regist.jsp"><input type="button"  value="注册"/></a>

</form>


13、regist.jsp页面中使用了Ajax和jQuery检测用户名和注册邮箱是否重复。
http://www.2cto.com/kf/201308/238557.html(网上的另一种实现)
上面的UserService和UserDao中都已经定义了findByUserName和findByEmail方法。在UserAction中写checkUsername和checkUserEmail方法,前台的js代码把取得的username和email分别使用Json数据传递给后台调用check方法,check方法给warnMes赋值并在此使用Json格式传递。

regist.jsp代码如下:

[html]
view plain
copy
print?

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<%@taglib prefix="s" uri="/struts-tags"%>  
<html>  
<head>  
<base href="<%=basePath%>">  
  
<title>My JSP 'regist.jsp' starting page</title>  
  
<meta http-equiv="pragma" content="no-cache">  
<meta http-equiv="cache-control" content="no-cache">  
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
<meta http-equiv="description" content="This is my page">   
<script src="js/jQuery.js"></script>   
<script type="text/javascript">  
function checkEmail(){  
var emailifo=$("#email").val();  
         $.ajax({  
             type: "GET",  
             url: "userJSONAction_checkUserEmail.action",  
             data: {email:emailifo},  
             dataType: "json",  
             success: function(data){  
             var obj=$.parseJSON(data);  
             $("#emailMes").html("");  
             $("#emailMes").text(obj.warnMsg);  
             }  
             });  
}  
function checkUserName(){  
var nameInfo=$("#userName").val();  
         $.ajax({  
             type: "GET",  
             url: "userJSONAction_checkUserName.action",  
             data: {userName:nameInfo},  
             dataType: "json",  
             success: function(data){  
             var obj=$.parseJSON(data);  
             $("#nameMes").html("");  
             $("#nameMes").text(obj.warnMsg);  
             }  
             });  
}  
</script>  
<!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
</head>  
  
<body>  
    註冊  
    <br>  
    <form action="regist.action" method="post">  
        邮箱:<input type="text" id="email" name="email" onblur="checkEmail()"><p id="emailMes"></p>  
        <br /> 用户名:<input type="text" id="userName" name="userName" onblur="checkUserName()"><p id="nameMes"></p> <br /> 密码:<input  
            type="text" name="pass" value="">  
        <br /> <input type="submit" name="submit" value="注册">  
    </form>  
</body>  
</html>  

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'regist.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script src="js/jQuery.js"></script>
<script type="text/javascript">
function checkEmail(){
var emailifo=$("#email").val();
$.ajax({
type: "GET",
url: "userJSONAction_checkUserEmail.action",
data: {email:emailifo},
dataType: "json",
success: function(data){
var obj=$.parseJSON(data);
$("#emailMes").html("");
$("#emailMes").text(obj.warnMsg);
}
});
}
function checkUserName(){
var nameInfo=$("#userName").val();
$.ajax({
type: "GET",
url: "userJSONAction_checkUserName.action",
data: {userName:nameInfo},
dataType: "json",
success: function(data){
var obj=$.parseJSON(data);
$("#nameMes").html("");
$("#nameMes").text(obj.warnMsg);
}
});
}
</script>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
註冊
<br>
<form action="regist.action" method="post">
邮箱:<input type="text" id="email" name="email" onblur="checkEmail()"><p id="emailMes"></p>
<br /> 用户名:<input type="text" id="userName" name="userName" onblur="checkUserName()"><p id="nameMes"></p> <br /> 密码:<input
type="text" name="pass" value="">
<br /> <input type="submit" name="submit" value="注册">
</form>
</body>
</html>


初学还有很多不足,欢迎大家批评指正。

参考链接</p><p>http://wenku.baidu.com/link?url=ZT_y9ERAAZV9UsFFA4Td9FJ0n3747GJ9iIPh57HLvf6FQ1fdyBoO4oHjd-MgzRj7nEyerfw14N78ZQJ4kbvVcaQrput8wWJecZhwMXW7cky</p><p></p><p>1、建立数据库和用户表,简单考虑只建立user表,添加user_id、user_name、email、pass四个属性。</p><p>2、新建web工程。</p><p>3、第一种方法是直接右击项目名称选择Myeclipse一次选择添加structs2、spring、Hibernate包。这种方法在后续编程中有可能造成许多jar包冲突。</p><p> 

    第二种是使用没有冲突的jar包。把structs、spring、Hibernate以及mysql-connector-java(连接mysql数据库)添加到WebRoot/WEB-INF/bin目录下,并选中项目中要使用的所有jar包文件右击选择builtPath——>Add To Built Path</p><p>4、选择MyEclipse Database explorer Perspective。新建一个Database Driver。</p><p><img src="" alt="" /></p><p>上图配置自动在ApplicationContext.xml文件中自动生成dataSorce

bean</p><p><img src="" alt="" /></p><p>选择要建立Hibernate反转映射的表右击选择Hibernate reverse
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: