A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

<script>
    /*
                表单校验:
                1.用户名:单词字符,长度8到20位
                2.密码:单词字符,长度8到20位
                3.email:邮件格式
                4.姓名:非空
                5.手机号:手机号格式
                6.出生日期:非空
                7.验证码:非空
        */

    //校验用户名
    //单词字符,长度8到20位
    function checkUsername() {
        //1.获取用户名值
        var username = $("#username").val();
        //2.定义正则
        var reg_username = /^\w{8,20}$/;

        //3.判断,给出提示信息
        var flag = reg_username.test(username);
        if(flag){
            //用户名合法
            $("#username").css("border","");
        }else{
            //用户名非法,加一个红色边框
            $("#username").css("border","1px solid red");
        }

        return flag;
    }

    //校验密码
    function checkPassword() {
        //1.获取密码值
        var password = $("#password").val();
        //2.定义正则
        var reg_password = /^\w{8,20}$/;

        //3.判断,给出提示信息
        var flag = reg_password.test(password);
        if(flag){
            //密码合法
            $("#password").css("border","");
        }else{
            //密码非法,加一个红色边框
            $("#password").css("border","1px solid red");
        }

        return flag;
    }

    //校验邮箱
    function checkEmail(){
        //1.获取邮箱
        var email = $("#email").val();
        //2.定义正则                itcast@163.com
        var reg_email = /^\w+@\w+\.\w+$/;

        //3.判断
        var flag = reg_email.test(email);
        if(flag){
            $("#email").css("border","");
        }else{
            $("#email").css("border","1px solid red");
        }

        return flag;
    }

    $(function () {
        //当表单提交时,调用所有的校验方法
        $("#registerForm").submit(function(){
            //1.发送数据到服务器
            if(checkUsername() && checkPassword() && checkEmail()){
                //校验通过,发送ajax请求,
                //$(this).serialize(): jquery的方法。把表单项序列化成提交的数据格式。
                // 提交表单的数据   username=zhangsan&password=123
                $.post("user/regist",$(this).serialize(),function(data){
                    //处理服务器响应的数据  data  {flag:true,errorMsg:"注册失败"}
                    if(data.flag){
                        //注册成功,跳转成功页面
                        location.href="register_ok.html";
                    }else{
                        //注册失败,给errorMsg添加提示信息
                        $("#errorMsg").html(data.errorMsg);
                    }
                });
            }
            //2.不让页面跳转
            return false;
            //如果这个方法没有返回值,或者返回为true,则表单提交,如果返回为false,则表单不提交
        });

        //当某一个组件失去焦点是,调用对应的校验方法
        $("#username").blur(checkUsername);
        $("#password").blur(checkPassword);
        $("#email").blur(checkEmail);
    });

</script>
<script>

    $(function () {
        //1.给登录按钮绑定单击事件
        $("#btn_sub").click(function () {
            //2.发送ajax请求,提交表单数据
            $.post("user/login",$("#loginForm").serialize(),function (data) {
                //回来的数据格式: data : {flag:false,errorMsg:''}
                 //3.根据返回数据判断:处理响应结果
                if(data.flag){
                    //登录成功
                    location.href="index.html";
                }else{
                    //登录失败
                    $("#errorMsg").html(data.errorMsg);
                }
            });
        });
    });

</script>

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取用户名和密码数据
        Map<String, String[]> map = request.getParameterMap();
        //2.封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        //3.调用Service查询
        UserService service = new UserServiceImpl();
        User u  = service.login(user);

        ResultInfo info = new ResultInfo();

        //4.判断用户对象是否为null
        if(u == null){
            //用户名密码或错误
            info.setFlag(false);
            info.setErrorMsg("用户名密码或错误");
        }
        //5.判断用户是否激活
        if(u != null && !"Y".equals(u.getStatus())){
            //用户尚未激活
            info.setFlag(false);
            info.setErrorMsg("您尚未激活,请激活");
        }
        //6.判断登录成功
        if(u != null && "Y".equals(u.getStatus())){
            request.getSession().setAttribute("user",u);//登录成功标记

            //登录成功
            info.setFlag(true);
        }

        //响应数据
        ObjectMapper mapper = new ObjectMapper();

        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),info);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
3.UserServiceImpl
编写思路:(必读)
1.servlet调用了我的login(User user)方法来处理登录业务,这里user对象不需要数据处理,因此直接调用数据库dao层去查询用户是否存在即可。

public class UserServiceImpl implements UserService {

    //用户操作数据库的dao实现类对象
    private UserDao userDao = new UserDaoImpl();
   
     /**
     * 登录方法
     */
    @Override
    public User login(User user) {
      return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
    }
}4.UserDaoImpl
public class UserDaoImpl implements UserDao {

    //用户操作数据库的工具类对象:JdbcTemplate: 该类封装了jdbc的增删改查原始操作。
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 根据用户名和密码查询用户的方法
     * @param username
     * @param password
     * @return User
     */
    @Override
    public User findByUsernameAndPassword(String username, String password) {
        User user = null;
        try {
            //1.定义sql
            String sql = "select * from tab_user where username = ? and password = ?";
            //2.执行sql
            user = template.queryForObject(sql, new BeanPropertyRowMapper<User>                     (User.class), username,password);
        } catch (Exception e) {
            ////这里无须打印日志,因为整个异常是因为查不到数据抛出的。不算是程序错误。
        }

        return user;
    }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马