页面登录案例

登录案例

需求:
    在页面上填写用户名和密码及验证码,点击提交,先校验验证码是否一致.若一致后再去找数据库.顺便记住用户名

技术:

    表单
    验证码
    servlet
    request
    session

    cookie

步骤分析:

    1.数据库和表
        create table user(
            id int primary key auto_increment,
            username varchar(20),
            password varchar(20)
        );
    2.创建一个项目
        包结构
        jar包
        工具类和配置文件
    3.表单 login.jsp
    4.表单提交 loginServlet
        loginServlet:
            获取验证码(从前台传过来和session中)
                判断两个验证码是否一致
                    若不一致:
                        填写错误信息,请求转发到login.jsp
                    若一致:获取用户名和密码
                        调用userService的getuserbyusernameandpassword 返回值 User user
                        判断user是否为空
                            若为空:填写错误信息,请求转发到login.jsp
                            若不为空:
                                继续判断是否勾选了记住用户名
                                    若勾选:
                                        创建cookie 将用户名放入cookie写回浏览器
                                将user对象放入session中
                                页面重定向 index.jsp 展示 xxx:欢迎回来
                        

  代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <servlet>
    <description></description>
    <display-name>CodeServlet</display-name>
    <servlet-name>CodeServlet</servlet-name>
    <servlet-class>com.feizhu.web.servlet.CodeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CodeServlet</servlet-name>
    <url-pattern>/code</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.feizhu.web.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

</web-app>

 

-------------------------------------------------------------

package com.feizhu.web.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.feizhu.web.domain.User;
import com.feizhu.web.service.UserService;

/**
 * 登录
 */
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //设置编码
        request.setCharacterEncoding("utf-8");
     //接受两个验证码
        String rCode=request.getParameter("checkCode");
        
         String sCode = (String) request.getSession().getAttribute("sessionCode");
    //一次性验证码 用完之后从session 中移除
         request.getSession().removeAttribute("sessionCose");
    //判断两个验证码是否一致
         if(rCode==null || rCode.trim().length()==0 || sCode ==null) {
             //验证码有问题 提示信息 页面跳转到login
             request.setAttribute("msg", "请重新输入验证码");
             request.getRequestDispatcher("/login.jsp").forward(request, response);
             return;
         }
         if(rCode.equals(sCode)) {
             //验证码不一致 提示信息 页面跳转到login
             request.setAttribute("msg", "验证码输入错误");
             request.getRequestDispatcher("/login.jsp").forward(request, response);
             return;
         }
     //接受用户名和密码
         String   username=  request.getParameter("username");
         String   password=  request.getParameter("password");
        
        User user=null;
        //调用userservice  getUsernameAndPwd() 返回user
        try {
            user = new UserService().getUserByUsernameAndPwd(username,password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    //判断user
        if(user==null) {
            //若user为空 提示信息 请求转发到login.jsp
             request.setAttribute("msg", "用户名密码不匹配");
             request.getRequestDispatcher("/login.jsp").forward(request, response);
             return;
            
        }else {
             //若user不为空 判断是否勾选了记住用户名将user放入session
            if("ok".equalsIgnoreCase(request.getParameter("savename"))) {
                //创建cookie  username不能是中文
                  Cookie c=  new Cookie("savename", username);
                  c.setPath(request.getContextPath()+"/");
                  c.setMaxAge(3600);
                //写回浏览器
                  response.addCookie(c);
            }
            
            request.getSession().setAttribute("user", user);
        }
       //页面重定向index.jsp
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }

}

---------------------------------------------------------------------------------------

package com.feizhu.web.service;

import java.sql.SQLException;

import com.feizhu.web.dao.UserDao;
import com.feizhu.web.domain.User;

public class UserService {

    public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
        // TODO Auto-generated method stub
        return new UserDao().getUserByUsernameAndPwd(username,  password);
    }

    
}
 

------------------------------------------------------------------------------------

package com.feizhu.web.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.feizhu.web.domain.User;
import com.feizhu.web.utls.DataSourceUtils;

public class UserDao {

    public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
        QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
        String sql="select * from user where username=? and password=?";
        return qr.query(sql, new BeanHandler<>(User.class),username,password);
    }
 

}

----------------------------------------------------------------------------------------------------

package com.feizhu.web.domain;

public class User {

    private int id;
    
    private String username;
    
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

}

--------------------------------------------------------

c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/web
c3p0.user=root

c3p0.password=root

备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值