栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

三、登陆和退出功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

三、登陆和退出功能

 分析

 Servlet代码实现  前台代码  后台代码

LoginServlet

package cn.itcast.travel.web.servlet;

import cn.itcast.travel.domain.ResultInfo;
import cn.itcast.travel.domain.User;
import cn.itcast.travel.service.UserService;
import cn.itcast.travel.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;


@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.获取用户密码
        Map map = request.getParameterMap();
        //2.创建user对象
        User user = new User();
        //3.将map获取值传入user对象中
        try {
            BeanUtils.populate(user, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //4.调用service查询
        UserService service = new UserServiceImpl();
        User u = service.login(user);
        //5.对用户的非空、激活、成功登录进行判断

        ResultInfo info = new ResultInfo();
        if (u == null) {
            info.setFlag(false);
            info.setErrorMsg("用户或密码不存在");
        }
        if (u != null && !"Y".equals(u.getStatus())) {
            info.setFlag(false);
            info.setErrorMsg("用户未激活,请先激活");
        }
        if (u != null && "Y".equals(u.getStatus())) {
            info.setFlag(true);
        }

        //响应数据 (设置json数据返回 和格式)
        response.setContentType("application/json;charset=utf-8");
        ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(response.getOutputStream(), info);

    }

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

Uservice

UserDao

 Service & Dao代码实现
UserServiceImpl
  @Override
    public User login(User user) {
        return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
    }
UserDao
    //用户登录
    User findByUsernameAndPassword(String username, String password);
UserDaoImpl
 @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.class), username,password);

        } catch (Exception e) {
        }
        return user;
    }
 实现_前台页面
login.html

测试效果图

本次测试效果图 存在问题 后台没有校验验证码 这个自行增加 可在前面的代码中 进行模仿 

 登录功能_姓名提示
header.html



FindUserServlet
package cn.itcast.travel.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从request中获取name值
        Object name = request.getSession().getAttribute("name");
        //将name值回显到客户端
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        String json = mapper.writeValueAsString(name);
        response.getWriter().write(json);

    }

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

细节注意:

1、writeValue和writeValueAsString的区别 

二者都是Java对象转换JSON的方法 

* writeValue(参数1,obj):

         参数1:
                            File:将obj对象转换为JSON字符串,并保存到指定的文件中
                            Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                            OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中

* writeValueAsString(obj):将对象转为json字符串
2、更改好代码之后 如果没有作用 很可能是缓存问题

解决:

 清除浏览器cookie缓存数据  或者是更换一个浏览器进行测试

3、如果获取name值为null

解决:

​

 退出功能

什么叫做登录了?session中有user对象。
实现步骤:
1.    访问servlet,将session销毁
2.    跳转到登录页面

ExitServlet
package cn.itcast.travel.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        //1.清除session信息
        request.getSession().invalidate();


        //2.跳转登录页

        response.sendRedirect(request.getContextPath() + "/login.html");

    }

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

测试效果图

细节注意

//invalidate方法用于 主要用于注销  调用该方法 会清空已定义的session 而不是清空session里的值
//如果是清空session里面的值 的话removeAttribute是这个方法
//        request.getRequestDispatcher("xxxx").forward(request,response);
        
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号