用户模块--------用户登录

一、模块操作步骤:

1.用户模块:

前台:

表单验证:1.得到用户名和密码

利用EL表达式获取值,用户名: r e s u l t I n f o . r e s u l t . u n a m e       密 码 : {resultInfo.result.uname }   密码: resultInfo.result.uname   {resultInfo.result.upwd }

2.判断是否为空

通过添加Form表单,设置name属性值,

添加一个隐藏域,为了给后台传递数据,

给前台的用户名文本框添加name属性

给前台的密码文本框也添加name属性 

设置一个信息提示,${resultInfo.msg }

添加一个button按钮,添加点击事件,当触发时判断用户名和密码是否为空   <input type=“button” class=“log jc yahei16” value=“登 录” οnclick=“checkLogin()” />

判断是否为空工具,在在statics /js /util.js 中创建 isEmpty 方法,判断参数是否为空

/**

  • 判断参数是否为空
  • @param str
  • @returns {Boolean}
    */
    function isEmpty(str) {
    if (str == null || str.trim() == “”) {
    return true;
    }
    return false;
    }

/**

  • 判断参数是否不为空
  • @param str
  • @returns {Boolean}
    */
    function isNotEmpty(str) {
    if (str == null || str.trim() == “”) {
    return false;
    }
    return true;
    }
    判断:在statics /js /config.js 中进行判断用户名和密码,

/**
* 表单验证
* @returns {Boolean}
*/

function checkLogin(){
//得到文本框的值
var userName=KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲userName").val(…(“userPwd”).val();

//判断 是否为空
if(isEmpty(userName)){
    $("#msg").html("用户名不能为空!")
    //聚焦
    $("#userName").focus();
    return;
}
if(isEmpty(userPwd)){
    $("#msg").html("密码不能为空!")
    //聚焦
    $("#userPwd").focus();
    return;
}

//提交表单
$("#loginForm").submit();

}
                                            为空,提示用户

$("#msg").html(“用户名或密码不能为空!”);

3.不为空,提交表单 (表单元素需要有name属性值)

$("#loginForm").submit();

后台:

1、接收参数
          2、判断参数
                       参数为空,提示信息,请求转发到登录页面
          3、通过用户名查询用户对象是否存在
                        如果用户不存在,提示信息,请求转发到登录页面
          4、如果用户存在,判断密码是否正确
                        如果密码不正确,提示信息,请求转发到登录页面
          5、    成功:
                1、将用户信息存到session作用域中
                2、判断是否记住密码,如果是,存cookie对象
                3、重定向到首页
                    失败:
                1、将resultInfo对象存到request作用域中
                2、请求转发到登录页面
        
        Servlet层:(接收参数、调用service层、控制页面跳转)

/**

  • 用户模块
    */
    @WebServlet("/user")
    public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private UserService userService = new UserService();

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 得到用户行为
    String action = request.getParameter(“action”);

     if ("login".equals(action)) {
     	
     	// 用户登录
     	userLogin(request, response);
     	
     } else {
     	// 跳转到登录页面
     	response.sendRedirect("login.jsp");
     }
    

    }

1、接收参数(用户名、密码)

2、调用Service层,返回resultInfo封装类

3、判断是否登录成功

private void userLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

//1.接收参数(用户名、密码)
String uname=request.getParameter(“userName”);
String upwd=request.getparameter(“userPwd”);

//2.调用Service层,返回resultInfo封装类
ResultInfo resultInfo=userService.userLogin(uname,upwd);
​​
if(resultInfo.getCode==1){ //登录成功

}

成功:                                                                                                                                                                            1、将用户信息存到session作用域中 
                    2、判断是否记住密码,如果是,存cookie对象
                    3、重定向到首页
                失败:
                    1、将resultInfo对象存到request作用域中
                    2、请求转发到登录页面

if(resultInfo.getCode==1){ //登录成功

//1.将用户信息存到session作用域中            

request.getSession().setAttribute(“user”,resultInfo.getResult());//Service层对象的操作

//2.判断是否记住密码,如果是,存cookie对象
String rem=request.getParameter("rem"); //CheckBox的属性值
if("1".requals(rem)){ //记住密码,存cookie对象
    Cookie cookie=new Cookie("user",uname+"-"+upwd);
    //设置三天生效
    cookie.setMaxAge(3*24*60*60);  //单位秒
    //响应
    response.addCookie(cookie);
}

//3.重定向到首页
response.sendRedirect("index.jsp");

}else{ //登录失败
//1.将resultInfo对象存到request作用域中
request.setAttribute(“resultInfo”,resultInfo);

//2.请求转发到登录页面request.getRequestDispatcher("login.jsp").forward(request,response);

}
   
        
        Service层:(业务处理/业务逻辑层)

public class UserService {

private UserDao userDao = new UserDao();

1、判断参数是否能为空
                如果为空,设置resultInfo封装类的值 code=0,msg=用户名或密码不能为空,返回resultInfo对象
            2、调用Dao层,通过用户名查询用户对象,返回user对象
                如果user对象为空,设置resultInfo封装类的值 code=0,msg=用户名不存在,result回显,返回                                          resultInfo对象
            3、如果user对象不为空,判断前台传过来的密码是否和数据库查询到的密码一致
                      如果密码不一致,设置resultInfo封装类的值 code=0,msg=密码不正确,result回显,返回                                          resultInfo对象
            4、登录成功
                      置resultInfo封装类的值 code=1,msg=登录成功,result,返回resultInfo对象

//创建一个返回ResultInfo 对象的 UserLogin()方法
private ResutInfo Userlogin(String uname,String upwd){
//创建一个resultInfo对象
ResultInfo resultInfo=new ResultInfo<>();

//1.判断参数是否能够为空,对后台数据判断,用工具类StringUtil
if(StringUtil.isEmpty(uname)||(StringUtil.isEmpty(upwd)){

//如果为空,设置 resultInfo封装类的值 code=0,msg=用户名或密码不能为空,返回resultInfo对象
resultInfo.setCode(0);
resultInfo.setMsg("用户名或密码不能为空!")
return resultInfo;

}

//数据回显
User u=new User();
u.setUname(uname);//User类中的setUname构造器,即this.uname = uname;
u.setUpwd(upwd);  //User类中的setUpwd构造器,即this.upwd = upwd;

//2.调用Dao层中连接数据库查询方法,通过用户名查询用户对象,返回User对象
User user=UserDao.findUserByUname(uname); 

//如果user对象为空,设置resultInfo封装类的值code=0,msg=用户不存在,result回显,返回resultInfo对象
if(user==null){
    resultInfo.setCode(0);
    resultInfo.setMsg("用户名不存在!");

    //数据回显
    resultInfo.setResult(u); // 将对象 u 的值存入resultInfo
    return resultInfo; //返回resultInfo对象 
}

//3.如果对象不为空,判断前台传过来的密码是否和数据库查询到的密码一致
upwd=MD5Util.encode(MD5Util.encode(upwd)); //前台的密码
if(!upwd.equals(user.getUpwd())){  //user.getUpwd UserDao层连接数据库获取的密码
    resultInfo.setCode(0);
    resultInfo.setMsg("用户密码不正确!");
    return resultInfo;  //返回resultInfo对象 
}

//登录 成功
resultInfo.setCode(1);
resultInfo.setMsg("登录成功!");
resultInfo.setResult(user); //user信息较多,成功返回信息多

return resultInfo;

}

Dao层:(数据库操作层:增删改查)

public class UserDao {

/**
 * 通过用户名查询用户对象
 * @param uname
 * @return
 */
public User findUserByUname(String uname) {

通过用户名查询用户对象
            1、得到数据库连接
            2、写sql语句
            3、预编译
            4、设置参数
            5、执行查询,返回结果集
            6、判断并分析结果集
            7、关闭资源
            8、返回user对象

    User user = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
	// 1、得到数据库连接
	connection = DBUtil.getConnection();
	// 2、写sql语句  
	String sql = "select * from tb_user where uname = ?";
	// 3、预编译
	preparedStatement = connection.prepareStatement(sql);
	// 4、设置参数,下标从1开始
	preparedStatement.setString(1, uname);
	// 5、执行查询,返回结果集
	resultSet = preparedStatement.executeQuery();
	// 6、分析结果集,得到user对象
	if (resultSet.next()) {
		user = new User();
		user.setHead(resultSet.getString("head"));
		user.setMood(resultSet.getString("mood"));
		user.setNick(resultSet.getString("nick"));
		user.setUname(uname);
		user.setUpwd(resultSet.getString("upwd"));
		user.setUserId(resultSet.getInt("userId"));
	}
} catch (Exception e) {
	e.printStackTrace();
} finally {
	// 关闭资源
	DBUtil.close(resultSet, preparedStatement, connection);
}

return user;

}

作者:来世还生华夏门
来源:CSDN
原文:https://blog.csdn.net/qq_38708432/article/details/82994757
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值