zoukankan      html  css  js  c++  java
  • JavaWeb_(SSH论坛)_三、用户模块

    基于SSH框架的小型论坛项目  

      一、项目入门  传送门

      二、框架整合  传送门

      三、用户模块  传送门

      四、页面显示  传送门

      五、帖子模块  传送门

      六、点赞模块  传送门

      七、辅助模块  传送门

    User表

      id:

      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

    项目过程中的问题

    一、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

     

     
    (如需转载学习,请标明出处)
  • 相关阅读:
    第21,22章:出现次数超过一半的数字,最短摘要的生成
    String的方法
    最长公共子串
    第29章:字符串编辑距离
    字符串转换为整数
    第11章:最长公共子序列(LCS:Longest Common Subsequence)
    django开发_七牛云CNAME解析
    django开发_七牛云图片管理
    FastDFS分布式文件系统
    requests获取响应时间(elapsed)与超时(timeout)、小数四舍五入
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/9863973.html
Copyright © 2011-2022 走看看