JavaWeb_(SSH論壇)_3、用戶模塊

 

 

基於SSH框架的小型論壇項目  javascript

  1、項目入門  傳送門css

  2、框架整合  傳送門html

  3、用戶模塊  傳送門java

  4、頁面顯示  傳送門jquery

  5、帖子模塊  傳送門web

  6、點贊模塊  傳送門spring

  7、輔助模塊  傳送門sql

 

User表數據庫

  id:apache

  username:登錄帳號

  password:登錄密碼

  name:用戶名

  email:用戶郵箱

  telephone:用戶電話

  state(1,0):根據郵箱判斷用戶是否激活

  code:

  image:用戶頭像

  level:用戶等級

  coin:金幣

 

(根據用戶表單進行建立User表)

 

  點擊當即註冊

    用戶成功->登錄界面

    註冊失敗->用戶名存在

 

  將表單數據連接數據庫

<form action="${pageContext.request.contextPath }/UserAction_register }" method="post">

</form>

 

  建立User實體(domain層)

    private String id;
    private String username;
    private String password;
    private String name;
    private String email;
    private String telephone;
    private Integer state;
    private String code;
    private String image;
    private Integer level;
    private Integer coin;

 

package com.Gary.domain;

public class User {
    private String id;
    private String username;
    private String password;
    private String name;
    private String email;
    private String telephone;
    private Integer state;
    private String code;
    private String image;
    private Integer level;
    private Integer coin;
    
    public String getId() {
        return id;
    }
    public void setId(String 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;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    public Integer getCoin() {
        return coin;
    }
    public void setCoin(Integer coin) {
        this.coin = coin;
    }
    
    
    
}
User.java

 

  用戶註冊流程

  一開始用戶先來到UserAction.java中register()方法

    public String register() throws Exception {
        // TODO Auto-generated method stub
        
        userService.addUser(user);
    
        return "toLogin";    
        
    }

 

  經過regiser()方法來到UserService.java

public class UserService {

    private UserDao userDao;
    
    public void addUser(User user) {
    
        userDao.addUser(user);
        
    }
}

 

  經過addUser()來到Dao層save(user)

public class UserDao extends HibernateDaoSupport{

    public void addUser(User user) {
        // TODO Auto-generated method stub
        //拿到與當前線程綁定的session
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        session.save(user);
    }

}

 

  register.jsp自動封裝表單字段

        <form action="${pageContext.request.contextPath }/UserAction_register }" method="post">
            <div class="register-box">

                <label for="username" class="username_label"> 用 戶 名 <input maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 設 置 密 碼 <input maxlength="20" type="password" name="password" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 確 認 密 碼 <input maxlength="20" type="password" placeholder="請再次輸入密碼" />
                </label>
                <div class="tips"></div>
            </div>

            <div class="register-box">
                <label for="username" class="username_label"> 真實姓名 <input maxlength="20" name="name" type="text" placeholder="您的真實姓名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 手機號 <input maxlength="20" name="telephone" type="text" placeholder="您的手機號" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《錯題用戶註冊協議》</a> <a href="login.html">已有帳號,當即登陸</a>
                <div class="tips"></div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 注 冊</button>
            </div>
        </form>

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/login.css" />
<link rel="stylesheet" href="css/head.css" />
</head>

<body style="margin: -2px">
    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>
    <section class="sec">
        <form action="${pageContext.request.contextPath }/UserAction_register }" method="post">
            <div class="register-box">

                <label for="username" class="username_label"> 用 戶 名 <input maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 設 置 密 碼 <input maxlength="20" type="password" name="password" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 確 認 密 碼 <input maxlength="20" type="password" placeholder="請再次輸入密碼" />
                </label>
                <div class="tips"></div>
            </div>

            <div class="register-box">
                <label for="username" class="username_label"> 真實姓名 <input maxlength="20" name="name" type="text" placeholder="您的真實姓名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 手機號 <input maxlength="20" name="telephone" type="text" placeholder="您的手機號" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《錯題用戶註冊協議》</a> <a href="login.html">已有帳號,當即登陸</a>
                <div class="tips"></div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 注 冊</button>
            </div>
        </form>
    </section>
    <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
register.jsp

 

  register()中手動封裝表單未添加數據

public String register() throws Exception {
        // TODO Auto-generated method stub
        
/*
     自動封裝的打1
     private String id;
    private String username;    1
    private String password;    1
    private String name;    1
    private String email;    1
    private String telephone;    1
    private Integer state;
    private String code;
    private String image;
    private Integer level;
    private Integer coin;        
 */
        
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
        
        //是否添加成功
        userService.addUser(user);
    
        return "toLogin";    
        
    }

 

 

配置hibernate

 

  applicationContext.xml中有一句

<property name="mappingDirectoryLocations"
            value="classpath:com/Gary/domain"></property>

 

    <!-- 配置sessionFactory -->
    <bean name="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sqp">true</prop>
                <prop key="hibernate.format_sql">true</prop>
            </props>
        </property>

        <property name="mappingDirectoryLocations"
            value="classpath:com/Gary/domain"></property>

    </bean>

 

  數據源字段再User,hbm中配置

<?xml version="1.0" encoding="UTF-8"?>
<!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.Gary.domain">
    <class name="User" table="user">
        <id name="id">
            <generator class="uuid"></generator>
        </id>
        
    <!--     
    private String username;
    private String password;
    private String name;
    private String email;
    private String telephone;
    private Integer state;
    private String code;
    private String image;
    private Integer level;
    private Integer coin; -->
        
        <property name="username" column="username"></property>
        <property name="password" column="password"></property>
        <property name="name" column="name"></property>
        <property name="email" column="email"></property>
        <property name="telephone" column="telephone"></property>
        <property name="state" column="state"></property>
        <property name="code" column="code"></property>
        <property name="image" column="image"></property>
        <property name="level" column="level"></property>
        <property name="coin" column="coin"></property>
        
    </class>
</hibernate-mapping>
User.hbm.xml

 

 

配置Struts

 

  在UserAction對Struts進行配置

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="css/head.css" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
</head>

<body style="margin: -2px">

    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>

    <section class="sec">
        <form action="UserLoginServlet" method="post">
            <div class="register-box">
                <label for="username" class="username_label"> 用 戶 名 <input maxlength="20" name="userName" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 密 碼 <input maxlength="20" type="password" name="pwd" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《你問我答用戶註冊協議》</a> <a href="register.html">沒有帳號,當即註冊</a>
                <div class="tips"></div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 登陸</button>
            </div>
        </form>
    </section>
    <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
</body>
login.jsp

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <!-- 開啓動態方法調用 -->
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <package name="Gary_SSHForum" namespace="/" extends="struts-default">
    <!-- 容許所有方法 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="UserAction_*" class="com.Gary.web.UserAction">
            <result name="toLogin" type="redirect">/login.jsp</result>
            
        </action>
    </package>

</struts>

 

 

配置spring

 

<struts>

    <!--開啓動態方法調用 -->
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!-- 告訴struts不用本身建立Action,Spring來幫你建立 -->
    <constant name="struts.objectFactory" value="spring"></constant>

    <package name="Gary_SSHForum" namespace="/" extends="struts-default">
        <!-- 容許所有方法 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}">
            <result name="toLogin" type="redirect">/login.jsp</result>

        </action>
    </package>

</struts>

 

 

  applicationContext.xml中進行整合

    <!-- 配置Action -->
    <bean name="userAction" class="com.Gary.web.UserAction" scope="prototype">
    
        <property name="userService" ref="userService">
        
        </property>
    </bean>
    
    <!-- 配置Service -->
    <bean name="userService" class="com.Gary.service.UserService">
        <property name="userDao" ref="userDao"></property>
    </bean>
    
    <!-- 配置Dao -->
    <bean name="userDao" class="com.Gary.dao.UserDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

 

   測試

  在項目中進行表單註冊

 

 

 

表單校驗

 

  頁面自帶表單校驗

  經過引入jquery.validate.min.js就能夠實現

 

//input各類判斷
    //用戶名:
    $('input').eq(0).blur(function(){
        if($(this).val().length==0){
            $(this).parent().next("div").text("");
            $(this).parent().next("div").css("color",'#ccc');
        }else if($(this).val().length>0 && $(this).val().length<4){
            $(this).parent().next("div").text("長度只能在4-20個字符之間");
            $(this).parent().next("div").css("color",'red');
        }else if($(this).val().length>=4&& !isNaN($(this).val())){
            $(this).parent().next("div").text("用戶名不能爲純數字");
            $(this).parent().next("div").css("color",'red');
        }
    })
    //密碼
    $('input').eq(1).blur(function(){
        if($(this).val().length==0){
            $(this).parent().next("div").text("");
            $(this).parent().next("div").css("color",'#ccc');
        }else if($(this).val().length>0 && $(this).val().length<3){
            $(this).parent().next("div").text("長度只能在3-20個字符之間");
            $(this).parent().next("div").css("color",'red');
        }else{
            $(this).parent().next("div").text("");
        }        
    })
//    確認密碼
    $('input').eq(2).blur(function(){
        if($(this).val().length==0){
            $(this).parent().next("div").text("");
            $(this).parent().next("div").css("color",'#ccc');
        }else if($(this).val()!=$('input').eq(1).val()){
            $(this).parent().next("div").text("兩次密碼不匹配");
            $(this).parent().next("div").css("color",'red');
        }else{
            $(this).parent().next("div").text("");
        }        
    })

 

實現From表單中郵箱校驗

  郵箱name="email"

 <div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"></div>
            </div>

 

<script type="text/javascript">

    $(function(){
        $("#myform").validate({
            
            //json格式規則
            rules:{
                "email":{
                    //是否未必填字段
                    "required":true,
                    "email":true
                }
            },
            
            //若是違反了規則應該怎麼辦
            messages:{
                "email":{
                    "required":"郵箱不能爲空",
                    "email":"請輸入正確的郵箱"
                }
            }
            
        })
        
    })

</script>

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/login.css" />
<link rel="stylesheet" href="css/head.css" />
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/index.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

    $(function(){
        $("#myform").validate({
            
            //json格式規則
            rules:{
                "email":{
                    //是否未必填字段
                    "required":true,
                    "email":true
                }
            },
            
            //若是違反了規則應該怎麼辦
            messages:{
                "email":{
                    "required":"郵箱不能爲空",
                    "email":"請輸入正確的郵箱"
                }
            }
            
        })
        
    })

</script>

</head>

<body style="margin: -2px">
    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>
    <section class="sec">
        <form id="myform" action="${pageContext.request.contextPath }/UserAction_register" method="post">
            <div class="register-box">

                <label for="username" class="username_label"> 用 戶 名 <input maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 設 置 密 碼 <input maxlength="20" type="password" name="password" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 確 認 密 碼 <input maxlength="20" type="password" placeholder="請再次輸入密碼" />
                </label>
                <div class="tips"></div>
            </div>

            <div class="register-box">
                <label for="username" class="username_label"> 真實姓名 <input maxlength="20" name="name" type="text" placeholder="您的真實姓名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 手機號 <input maxlength="20" name="telephone" type="text" placeholder="您的手機號" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《錯題用戶註冊協議》</a> <a href="login.html">已有帳號,當即登陸</a>
                <div class="tips"></div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 注 冊</button>
            </div>
        </form>
    </section>
</body>
</html>

register.jsp
register.jsp

 

  書寫表單校驗提示信息

<div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"><label class="error" for="email" style="display:none">請輸入正確的郵箱</label></div>
            </div>

 

  讓提示信息變得好看

  錯誤信息顏色變紅

<style>
    .error{
        color:red;
    }
</style>

 

<div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"><label class="error" for="email" style="display:none; padding-left:0px ; line-height: 25px;color:red">請輸入正確的郵箱</label></div>
            </div>

 

 

Ajax實現用戶名異步校驗

 

  異步校驗:當用戶註冊帳號一離焦,立馬將數據與數據庫中的數據進行校驗

  給用戶名錶單添加Ajax校驗

 

<label for="username" class="username_label"> 用 戶 名 <input id="username" maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>

 

$(function()
        {
        $("#username").blur(function(){
            $.post(
            //action地址
            
            //提交的數據
            {},
            //回調函數
            function(data)
            {
                
            }
            //數據的格式
            "json"
            
            )
        })
    })

 

  

 

  

  基於Ajax異步校驗檢測,Web層,Service層,Dao層 

  Web層校驗用戶名是否存在

public String checkUsername() throws Exception {
        
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }

 

  Service層去查找有沒有username

public boolean findUserByUsername(String username) {
        // TODO Auto-generated method stub
        Long count = userDao.findUserByUsername(username);
        if(count==0)
            return true;
        else
            return false;
    }

 

   Dao層對數據庫進程數據查詢

public Long findUserByUsername(String username){
        // TODO Auto-generated method stub
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select count(*) from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);
        
        //1號位置設置爲username
        query.setParameter(1,username);
        BigInteger result = (BigInteger)query.uniqueResult();
        
        return result.longValue();
    }

 

  register.jsp返回要查詢的值

$(function()
        {
        $("#username").blur(function(){    
            var usernameInput = $(this).val();    
            //alert(usernameInput);
            $.post(
                //action地址checkUsername()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                "${pageContext.request.contextPath}/UserAction_checkUsername",
                //提交的數據
                {"username":usernameInput},
                //回調函數
                function(data)
                {
                    var success = data.success;
                    //能夠添加
                    if(success)
                    {
                        $("#usernameInfo").css("color","green");
                        $("#usernameInfo").html("用戶名可使用!");    
                    }
                    //不可添加
                    else
                    {
                        $("#usernameInfo").css("color","red");
                        $("#usernameInfo").html("用戶名已經被註冊!");
                    }
                },
                //數據的格式
                "json"
            )
        })
    })

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/login.css" />
<link rel="stylesheet" href="css/head.css" />
<style>
    .error{
        color:red;
    }
</style>
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
<script src="js/index.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

    $(function(){
        $("#myform").validate({
            
            //json格式規則
            rules:{
                "email":{
                    //是否未必填字段                             
                    "required":true,
                    "email":true
                }
            },
            
            //若是違反了規則應該怎麼辦
            messages:{
                "email":{
                    "required":"郵箱不能爲空",
                    "email":"請輸入正確的郵箱"
                }
            }
            
        })
        
    })
    
    $(function()
        {
        $("#username").blur(function(){    
            var usernameInput = $(this).val();    
            //alert(usernameInput);
            $.post(
                //action地址checkUsername()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                "${pageContext.request.contextPath}/UserAction_checkUsername",
                //提交的數據
                {"username":usernameInput},
                //回調函數
                function(data)
                {
                    var success = data.success;
                    //能夠添加
                    if(success)
                    {
                        $("#usernameInfo").css("color","green");
                        $("#usernameInfo").html("用戶名可使用!");    
                    }
                    //不可添加
                    else
                    {
                        $("#usernameInfo").css("color","red");
                        $("#usernameInfo").html("用戶名已經被註冊!");
                    }
                },
                //數據的格式
                "json"
            )
        })
    })

</script>

</head>

<body style="margin: -2px">
    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>
    <section class="sec">
        <form id="myform" action="${pageContext.request.contextPath }/UserAction_register" method="post">
            <div class="register-box">
                <label for="username" class="username_label"> 用 戶 名 <input id="username" maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div id="usernameInfo" class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 設 置 密 碼 <input maxlength="20" type="password" name="password" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 確 認 密 碼 <input maxlength="20" type="password" placeholder="請再次輸入密碼" />
                </label>
                <div class="tips"></div>
            </div>

            <div class="register-box">
                <label for="username" class="username_label"> 真實姓名 <input maxlength="20" name="name" type="text" placeholder="您的真實姓名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 郵箱 <input maxlength="20" name="email" type="text" placeholder="您的郵箱" />
                </label>
                <div class="tips"><label class="error" for="email" style="display:none; padding-left:0px ; line-height: 25px;color:red">請輸入正確的郵箱</label></div>
            </div>
            <div class="register-box">
                <label for="username" class="username_label"> 手機號 <input maxlength="20" name="telephone" type="text" placeholder="您的手機號" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《錯題用戶註冊協議》</a> <a href="login.html">已有帳號,當即登陸</a>
                <div class="tips"></div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 注 冊</button>
            </div>
        </form>
    </section>
</body>
</html>
register.jsp

 

package com.Gary.web;

import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

//採用模型驅動 泛型User
public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user =  new User();
    
    private UserService userService;
    
    //校驗用戶名是否存在
    public String checkUsername() throws Exception {
        
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }
    
    public String register() throws Exception {
        // TODO Auto-generated method stub
        
/*
     自動封裝的打1
     private String id;
    private String username;    1
    private String password;    1
    private String name;    1
    private String email;    1
    private String telephone;    1
    private Integer state;
    private String code;
    private String image;
    private Integer level;
    private Integer coin;        
 */
        
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
        
        //是否添加成功
        userService.addUser(user);
    
        return "toLogin";    
        
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }

}
UserAction.java

 

package com.Gary.service;

import java.math.BigInteger;

import com.Gary.dao.UserDao;
import com.Gary.domain.User;

public class UserService {

    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        // TODO Auto-generated method stub
         userDao.addUser(user);
    }

    public boolean findUserByUsername(String username) {
        // TODO Auto-generated method stub
        Long count = userDao.findUserByUsername(username);
        if(count==0)
            return true;
        else
            return false;
    }

}
UserService.java

 

package com.Gary.dao;

import java.math.BigInteger;

import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.Gary.domain.User;

public class UserDao extends HibernateDaoSupport{

    public void addUser(User user) {
     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();
     session.save(user);
 
    }

    public Long findUserByUsername(String username){
        // TODO Auto-generated method stub
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select count(*) from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);
        
        //1號位置設置爲username
        query.setParameter(1,username);
        BigInteger result = (BigInteger)query.uniqueResult();
        
        return result.longValue();
    }
    
}
UserDao.java

 

 

郵箱註冊

  

 

 

    

 

  郵箱類

// 1.建立一個程序與郵件服務器會話對象 Session

        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "SMTP");
        props.setProperty("mail.host", "smtp.163.com");
        props.setProperty("mail.smtp.auth", "true");// 指定驗證爲true

        // 建立驗證器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("m17689470428", "tt199706282818");
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.建立一個Message,它至關因而郵件內容
        Message message = new MimeMessage(session);

        message.setFrom(new InternetAddress("m17689470428@163.com")); // 設置發送者

        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 設置發送方式與接收者

        //設置標題
        message.setSubject(title);
        // message.setText("這是一封激活郵件,請<a href='#'>點擊</a>");

        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.建立 Transport用於將郵件發送

        Transport.send(message);

 

  UserAction.java中添加郵箱激活內容,編寫用戶激活函數

public String register() throws Exception {
        // TODO Auto-generated method stub
    
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
            
        //是否添加成功
        userService.addUser(user);
    
        MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active'>點擊這裏</a>");
        
        return "toLogin";    
        
    }

 

  用戶激活函數

public String active() throws Exception {
    
        System.out.println("active");
        return null;
    }

 

 

 

 

 

package com.Gary.utils;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {
    
    //發郵箱,給誰發Email,以及Email內容
    public static void sendMail(String email, String title,String emailMsg)
            throws AddressException, MessagingException {
        // 1.建立一個程序與郵件服務器會話對象 Session

        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "SMTP");
        props.setProperty("mail.host", "smtp.163.com");
        props.setProperty("mail.smtp.auth", "true");// 指定驗證爲true

        // 建立驗證器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("m17689470428", "tt199706282818");
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.建立一個Message,它至關因而郵件內容
        Message message = new MimeMessage(session);

        message.setFrom(new InternetAddress("m17689470428@163.com")); // 設置發送者

        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 設置發送方式與接收者

        //設置標題
        message.setSubject(title);
        // message.setText("這是一封激活郵件,請<a href='#'>點擊</a>");

        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.建立 Transport用於將郵件發送

        Transport.send(message);
    }
}
MailUtils.java

 

package com.Gary.web;

import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.Gary.utils.MailUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

//採用模型驅動 泛型User
public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user =  new User();
    
    private UserService userService;
    
    //用戶激活
    public String active() throws Exception {
    
        System.out.println("active");
        return null;
    }
    
    //校驗用戶名是否存在
    public String checkUsername() throws Exception {
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }
    
    public String register() throws Exception {
        // TODO Auto-generated method stub
    
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
            
        //是否添加成功
        userService.addUser(user);
    
        MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active'>點擊這裏</a>");
        
        return "toLogin";    
        
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }

}
UserAction.java

 

  編寫用戶激活邏輯,設置用戶state屬性從0變1

 

MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active?userCode="+user.getCode()+"'>點擊這裏</a>");

 

  Web層用戶激活

public String active() throws Exception {
    
        userService.activeUser(userCode);
        
        return "toLogin";    
    }

 

  Service層傳遞數據給Dao層

public void activeUser(String userCode) {
        // TODO Auto-generated method stub
        userDao.activeUser(userCode);
    }

 

  Dao層修改數據庫中State爲1

    public void activeUser(String userCode) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "update user set state = 1 where code = ?";
        NativeQuery query = session.createSQLQuery(sql);
        query.setParameter(1,userCode);
        query.executeUpdate();
    }

 

  用戶註冊

  

 

  查看SQL數據庫中用戶信息

 

  阿里雲郵箱中激活用戶信息

 

  點擊激活後,修改用戶我的state值

 

package com.Gary.web;

import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.Gary.utils.MailUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

//採用模型驅動 泛型User
public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user =  new User();
    
    private String userCode;
    
    private UserService userService;
    
    //用戶激活
    public String active() throws Exception {
    
        userService.activeUser(userCode);
        
        return "toLogin";    
    }
    
    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    //校驗用戶名是否存在
    public String checkUsername() throws Exception {
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }
    
    public String register() throws Exception {
        // TODO Auto-generated method stub
    
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
            
        //是否添加成功
        userService.addUser(user);
    
        MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active?userCode="+user.getCode()+"'>點擊這裏</a>");
        
        return "toLogin";    
        
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }

}
UserAction.java

 

package com.Gary.service;

import java.math.BigInteger;

import com.Gary.dao.UserDao;
import com.Gary.domain.User;

public class UserService {

    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }
    
    public void activeUser(String userCode) {
        // TODO Auto-generated method stub
        userDao.activeUser(userCode);
    }
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        // TODO Auto-generated method stub
         userDao.addUser(user);
    }

    public boolean findUserByUsername(String username) {
        // TODO Auto-generated method stub
        Long count = userDao.findUserByUsername(username);
        if(count==0)
            return true;
        else
            return false;
    }


}
UserService.java

 

package com.Gary.dao;

import java.math.BigInteger;

import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.Gary.domain.User;

public class UserDao extends HibernateDaoSupport{

    public void addUser(User user) {
     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();
     session.save(user);
 
    }

    public Long findUserByUsername(String username){
        // TODO Auto-generated method stub
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select count(*) from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);

        //1號位置設置爲username
        query.setParameter(1,username);
        BigInteger result = (BigInteger)query.uniqueResult();
        
        return result.longValue();
    }
    
    public void activeUser(String userCode) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "update user set state = 1 where code = ?";
        NativeQuery query = session.createSQLQuery(sql);
        query.setParameter(1,userCode);
        query.executeUpdate();
    }
    
}
User.Dao

 

 

用戶登錄

 

  用戶登陸

  用戶登陸流程圖

 

 

   Service層連接出具庫,在數據庫中查詢數據

public int checkUser(User user) {
        User temp = userDao.findUserByUsernameReturnUser(user);
        //用戶名不存在
        if(temp==null)
        {
            return 1;
        }
        //判斷密碼是否相同
        if(temp.getPassword().equals(user.getPassword()))
        {
            if(temp.getState()==1)
            {
                //登錄成功
                return 0;
            }else {
                //沒有激活
                return 3;
            }
        }else {
            //密碼錯誤
            return 2;
        }

    }

 

  Web層傳遞數據給Service層

public String Login() throws Exception {
    
        int success = userService.checkUser(user);
        
        if(success == 0)
        {
            return "toIndex";
        }
        else if(success ==1) {
            //用戶名不存在
            ActionContext.getContext().put("error","用戶名不存在!!");
            return "login";
        }
        else if(success ==2) {
            //密碼錯誤
            ActionContext.getContext().put("error", "密碼錯誤");
            return "login";
        }
        else if(success ==3) {
            //用戶未激活
            ActionContext.getContext().put("error","用戶未激活!!");
            return "login";
        }else {
            return "error";
        }
        
    }

 

 

package com.Gary.web;

import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.Gary.utils.MailUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

//採用模型驅動 泛型User
public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user =  new User();
    
    private String userCode;
    
    private UserService userService;
    
    //用戶登錄
    public String Login() throws Exception {
    
        int success = userService.checkUser(user);
        
        if(success == 0)
        {
            return "toIndex";
        }
        else if(success ==1) {
            //用戶名不存在
            ActionContext.getContext().put("error","用戶名不存在!!");
            return "login";
        }
        else if(success ==2) {
            //密碼錯誤
            ActionContext.getContext().put("error", "密碼錯誤");
            return "login";
        }
        else if(success ==3) {
            //用戶未激活
            ActionContext.getContext().put("error","用戶未激活!!");
            return "login";
        }else {
            return "error";
        }
        
    }
    
    //用戶激活
    public String active() throws Exception {
    
        userService.activeUser(userCode);
        
        return "toLogin";    
    }
    
    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    //校驗用戶名是否存在
    public String checkUsername() throws Exception {
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }
    
    public String register() throws Exception {
        // TODO Auto-generated method stub
    
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
            
        //是否添加成功
        userService.addUser(user);
    
        MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active?userCode="+user.getCode()+"'>點擊這裏</a>");
        
        return "toLogin";    
        
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }

}
UserAction.java

 

package com.Gary.service;

import java.math.BigInteger;

import com.Gary.dao.UserDao;
import com.Gary.domain.User;

public class UserService {

    private UserDao userDao;

    public int checkUser(User user) {
        User temp = userDao.findUserByUsernameReturnUser(user);
        //用戶名不存在
        if(temp==null)
        {
            return 1;
        }
        //判斷密碼是否相同
        if(temp.getPassword().equals(user.getPassword()))
        {
            if(temp.getState()==1)
            {
                //登錄成功
                return 0;
            }else {
                //沒有激活
                return 3;
            }
        }else {
            //密碼錯誤
            return 2;
        }

    }
    
    public UserDao getUserDao() {
        return userDao;
    }
    
    public void activeUser(String userCode) {
        // TODO Auto-generated method stub
        userDao.activeUser(userCode);
    }
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        // TODO Auto-generated method stub
         userDao.addUser(user);
    }

    public boolean findUserByUsername(String username) {
        // TODO Auto-generated method stub
        Long count = userDao.findUserByUsernameReturnNum(username);
        if(count==0)
            return true;
        else
            return false;
    }

}
UserService.java

 

package com.Gary.dao;

import java.math.BigInteger;

import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.Gary.domain.User;

public class UserDao extends HibernateDaoSupport{

    public void addUser(User user) {
     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();
     session.save(user);
 
    }

    public Long findUserByUsernameReturnNum(String username){
        // TODO Auto-generated method stub
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select count(*) from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);

        //1號位置設置爲username
        query.setParameter(1,username);
        BigInteger result = (BigInteger)query.uniqueResult();
        
        return result.longValue();
    }
    
    public void activeUser(String userCode) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "update user set state = 1 where code = ?";
        NativeQuery query = session.createSQLQuery(sql);
        query.setParameter(1,userCode);
        query.executeUpdate();
    }

    public User findUserByUsernameReturnUser(User user) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select * from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);    
        query.addEntity(User.class);
        query.setParameter(1, user.getUsername());
        User temp =(User) query.uniqueResult();
        
        return temp;
    }
    
}
UserDao.java

 

   對用戶登錄進行測試

  此時數據庫中純在兩條數據

  

 

  測試失敗:用戶名不存在,用戶密碼登錄錯誤,用戶未激活

 

  測試成功:跳轉index頁面

 

  添加一個提示用戶去激活郵箱的界面

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="css/head.css" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
</head>

<body style="margin: -2px">
    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>
        <div class="dvlogo" style="color:black;margin-top:200px;margin-left:300px">
            恭喜你註冊成功,請到您剛填寫的郵箱去激活用戶!!謝謝
        </div>
        
</body>
registerSuccess.jsp

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <!--開啓動態方法調用 -->
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!-- 告訴struts不用本身建立Action,Spring來幫你建立 -->
    <constant name="struts.objectFactory" value="spring"></constant>
    <package name="Gary_SSHForum" namespace="/" extends="struts-default">
        <!-- 容許所有方法 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}">
            <result name="toLogin" type="redirect">/login.jsp</result>
            <result name="login">/login.jsp</result>
            <result name="toIndex" type="redirect">/index.jsp</result>
            <result name="error">/login.jsp</result>
            <result name="toRegisterSuccess" type="redirect">/registerSuccess.jsp</result>
        </action>
    </package>

</struts>
struct.xml

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="res/layui/css/layui.css">
<link rel="stylesheet" href="res/css/global.css">
<link rel="stylesheet" type="text/css" href="css/index.css">
<script src="res/layui/layui.js"></script>
<style>
</style>
</head>
<body>
    <div class="dvhead">
        <div class="dvlogo">
            <a href="index.jsp" target="_parent" fount-size="34px">論壇</a>
        </div>
        <div class="dvsearch">Cynical丶Gary</div>
        <div class="nav-user" style="top: 0px; right: 100px;">

            <!--描述:未登陸的樣子

            <a class="avatar" href="">
                <img src="res/images/avatar/11.jpg">
                <cite>Gary</cite>
            </a>
            <div class="nav">
                <a href="">
                    <i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i>
                    退出
                </a>
            </div>
             -->
            <!--描述:未登陸的樣子-->

            <a class="iconfont icon-touxiang layui-hide-xs" style="margin-top: 4px; display: inline-block;"> </a>
            <div class="nav" style="font-size: 14px; color: white; margin-top: -5px; margin-left: 1px;" />
            <a href="login.jsp" target="_parent">登陸</a> <a href="register.jsp" target="_parent">註冊</a>
        </div>
    </div>
</body>
</html>
head.html

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="css/head.css" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
</head>

<body style="margin: -2px">

    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>

    <section class="sec">
        <form action="${pageContext.request.contextPath }/UserAction_Login" method="post">
            <div class="register-box">
                <label for="username" class="username_label"> 用 戶 名 <input maxlength="20" name="username" type="text" placeholder="您的用戶名和登陸名" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="register-box">
                <label for="username" class="other_label"> 密 碼 <input maxlength="20" type="password" name="password" placeholder="建議至少使用兩種字符組合" />
                </label>
                <div class="tips"></div>
            </div>
            <div class="arguement">
                <input type="checkbox" id="xieyi" /> 閱讀並贊成 <a href="javascript:void(0)">《你問我答用戶註冊協議》</a> <a href="register.html">沒有帳號,當即註冊</a>
                <div class="tips">
                <font color="red">
                <s:property value="error"/> 
                </font> 
                </div>
            </div>
            <div class="submit_btn">
                <button type="submit" id="submit_btn">立 即 登陸</button>
            </div>
        </form>
    </section>
    <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
</body>
login.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">

<link rel="stylesheet" href="css/head.css" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
</head>

<body style="margin: -2px">
    <iframe src="head.html" scrolling="no" width="100%" height="110px"></iframe>
        <div class="dvlogo" style="color:black;margin-top:200px;margin-left:300px">
            恭喜你註冊成功,請到您剛填寫的郵箱去激活用戶!!謝謝
        </div>
        
</body>
registerSuccess.jsp

 

package com.Gary.web;

import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.Gary.utils.MailUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

//採用模型驅動 泛型User
public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user =  new User();
    
    private String userCode;
    
    private UserService userService;
    
    //用戶登錄
    public String Login() throws Exception {
    
        int success = userService.checkUser(user);
        
        if(success == 0)
        {
            return "toIndex";
        }
        else if(success ==1) {
            //用戶名不存在
            ActionContext.getContext().put("error","用戶名不存在!!");
            return "login";
        }
        else if(success ==2) {
            //密碼錯誤
            ActionContext.getContext().put("error", "密碼錯誤");
            return "login";
        }
        else if(success ==3) {
            //用戶未激活
            ActionContext.getContext().put("error","用戶未激活!!");
            return "login";
        }else {
            return "error";
        }
        
    }
    
    //用戶激活
    public String active() throws Exception {
    
        userService.activeUser(userCode);
        
        return "toLogin";    
    }
    
    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    //校驗用戶名是否存在
    public String checkUsername() throws Exception {
        //得到用戶username
        boolean success = userService.findUserByUsername(user.getUsername());
        //得到原生Servlet對象
        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");
        
        return null;
    }
    
    public String register() throws Exception {
        // TODO Auto-generated method stub
    
        //沒有的數據手動封裝
        user.setState(0);
        user.setCode(UUID.randomUUID().toString());
        user.setImage("0");
        user.setLevel(1);
        user.setCoin(1000);
            
        //是否添加成功
        userService.addUser(user);
    
        MailUtils.sendMail(user.getEmail(), "請激活", "恭喜您註冊成功,請點擊下面的連接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active?userCode="+user.getCode()+"'>點擊這裏</a>");
        
        return "toRegisterSuccess";    
        
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }

}
UserAction.java

 

package com.Gary.service;

import java.math.BigInteger;

import com.Gary.dao.UserDao;
import com.Gary.domain.User;

public class UserService {

    private UserDao userDao;

    public int checkUser(User user) {
        User temp = userDao.findUserByUsernameReturnUser(user);
        //用戶名不存在
        if(temp==null)
        {
            return 1;
        }
        //判斷密碼是否相同
        if(temp.getPassword().equals(user.getPassword()))
        {
            if(temp.getState()==1)
            {
                //登錄成功
                return 0;
            }else {
                //沒有激活
                return 3;
            }
        }else {
            //密碼錯誤
            return 2;
        }

    }
    
    public UserDao getUserDao() {
        return userDao;
    }
    
    public void activeUser(String userCode) {
        // TODO Auto-generated method stub
        userDao.activeUser(userCode);
    }
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        // TODO Auto-generated method stub
         userDao.addUser(user);
    }

    public boolean findUserByUsername(String username) {
        // TODO Auto-generated method stub
        Long count = userDao.findUserByUsernameReturnNum(username);
        if(count==0)
            return true;
        else
            return false;
    }

}
UserService.java

 

package com.Gary.dao;

import java.math.BigInteger;

import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.Gary.domain.User;

public class UserDao extends HibernateDaoSupport{

    public void addUser(User user) {
     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();
     session.save(user);
 
    }

    public Long findUserByUsernameReturnNum(String username){
        // TODO Auto-generated method stub
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select count(*) from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);

        //1號位置設置爲username
        query.setParameter(1,username);
        BigInteger result = (BigInteger)query.uniqueResult();
        
        return result.longValue();
    }
    
    public void activeUser(String userCode) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "update user set state = 1 where code = ?";
        NativeQuery query = session.createSQLQuery(sql);
        query.setParameter(1,userCode);
        query.executeUpdate();
    }

    public User findUserByUsernameReturnUser(User user) {
        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
        String sql = "select * from user where username = ?";
        NativeQuery query = session.createSQLQuery(sql);    
        query.addEntity(User.class);
        query.setParameter(1, user.getUsername());
        User temp =(User) query.uniqueResult();
        
        return temp;
    }
    
}
User.Dao

 

 

 

 

項目過程當中的問題

 

1、Struts has detected an unhandled exception:

Messages:
  1. Duplicate entry 'Gary' for key 'username_UNIQUE'
  2. could not execute statement
  3. could not execute statement; SQL [n/a]; constraint [username_UNIQUE]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

 

 

   註冊信息重名,不能添加劇復的username

相關文章
相關標籤/搜索