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

Web简单案例——用户信息登录

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

Web简单案例——用户信息登录

文章目录
  • 前言
  • 基础信息
    • 技术栈
    • 所用jar包
    • 整体框架
  • 功能实现
    • 简单功能
      • 1.用户登录功能
      • 2.用户添加功能
      • 3.用户删除功能
      • 4.用户修改功能
    • 复杂功能
      • 1.删除选中功能
      • 2.分页查询功能
      • 3.模糊查询功能
  • 总结


前言

提示:用户信息登录案例,包含了Web阶段的基础内容和一些常规操作。其中有相对简单的用户登录功能、用户添加功能、用户删除功能和用户修改功能,也包含了相对复杂的删除选中功能、分页功能和复杂条件查询功能。


基础信息 技术栈

Servlet+Jsp+MySQL+JDBCTempleat+Duird+BeanUtils+tomcat

所用jar包

整体框架

在编码时使用了三层架构
1.表现层(UL):又称为表示层,位于三层架构的最上层,与用户直接接触。
2.业务逻辑层(service层):表现层和数据访问层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
3.数据访问层(dao层):一些简单的数据库增删改查操作。

功能实现 简单功能 1.用户登录功能


login.jsp代码:


  	

管理员登录


再点击登录后会自动提交到LoginServlet中,LoginServlet代码:

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        //获取数据
        String verifycode = request.getParameter("verifycode");
        //校验验证码
        Map map = request.getParameterMap();
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER");
        if (!verifycode.equalsIgnoreCase(checkcode_server)){
            //验证码不正确
            //提示信息
            request.setAttribute("login_msg","验证码错误");
            //转发回当前页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);
            return;
        }
        //封装对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //调用Service查询
        UserService service = new UserServiceImpl();
        User loginUser = service.login(user);
        if (loginUser != null){
            //登陆成功
            //将用户存储到session
            session.setAttribute("user",loginUser);
            //跳转页面
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }else {
            //登陆失败
            //提示信息
            request.setAttribute("login_msg","用户或密码错误");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }

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

进入LoginServlet后会首先进行验证码的校验,如果验证码出错,会返回到login.jsp并且提示验证码出错。如果验证码正确,会调用service中的login方法获取user对象。如果用户或密码错误,则user对象为空,会返回到login.jsp并且提示用户或密码出错。正确则会将user存到session中,方便之后使用,并且跳转到下一页面。

dao包代码:

public User login(User loginUser){
	try {
		String sql = "select * from user where username = ? and password = ?";
		User user = template.queryForObject(sql,new BeanPropertyRowMapper(User.class),loginUser.getUsername(),loginUser.getPassword());
		return user;
	} catch (DataAccessException e) {
		e.printStackTrace();
		return null;
	}
}
2.用户添加功能

用户添加操作和用户登陆操作相差不大
add.jsp代码:


添加联系人页面

UserAddServlet代码:

@WebServlet("/userAddServlet")
public class UserAddServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        //获取参数集合
        Map map = request.getParameterMap();
        User user = new User();
        //使用BeanUtils封装对象
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //调用service方法
        UserService service = new UserServiceImpl();
        service.addUser(user);
        //跳转页面
         response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

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

dao包代码

@Override
    public void addUser(User user) {
        String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";
        template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
    }
3.用户删除功能

用户删除功能也比较简单,只需要关注在jsp页面存储需要删除的用户id即可。

function deleteUser(id) {
	if (/confirm/i("您确定要删除吗")){
		location.href = "${pageContext.request.contextPath}/userDeleteServlet?id="+id;
	}
}
...
删除

UserDeleteServlet代码:

@WebServlet("/userDeleteServlet")
public class UserDeleteServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取id
        String id = request.getParameter("id");
        //调用service方法
        UserService service = new UserServiceImpl();
        service.deleteUser(id);
        //跳转页面
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

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

dao包代码:

@Override
public void deleteUser(int id) {
	String sql = "delete from user where id = ?";
	template.update(sql,id);
}
4.用户修改功能

用户信息修改相较于之前三个功能就要稍微复杂一点,因为它需要完成数据的回显。如图是功能的主要实现流程

UserFindServlet代码:

@WebServlet("/userFindServlet")
public class UserFindServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取id
        String id = request.getParameter("id");
        //调用service方法
        UserService service = new UserServiceImpl();
        User user = service.checkUserById(id);
        //将user存储到request域
        request.setAttribute("user",user);
        //转发到update.jsp
        request.getRequestDispatcher("/update.jsp").forward(request,response);

    }

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

update.jsp代码:


        

修改联系人

UserUpdateServlet代码:

@WebServlet("/userUpdateServlet")
public class UserUpdateServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //编写编码
        request.setCharacterEncoding("utf-8");
        //获取map集合
        Map map = request.getParameterMap();
        User user = new User();
        //封装对象
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //调用Service方法
        UserService service = new UserServiceImpl();
        service.updateUser(user);
        //跳转到查询所有的Servlet
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

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

dao包代码:

@Override
    public User checkUserById(int id) {
        String sql = "select * from user where id = ?";
        User user = template.queryForObject(sql,new BeanPropertyRowMapper(User.class),id);
        return user;
    }

    @Override
    public void updateUser(User user) {
        String sql = "update user set name = ? ,gender = ? ,age = ? ,address = ? ,qq = ? ,email = ? where id = ? ";
        template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress()
                ,user.getQq(),user.getEmail(),user.getId());
    }
复杂功能 1.删除选中功能

如字面意思所说,可以选中多条数据一次性删除。这个功能在相比于其他复杂功能也是稍微简单,下面是主要实现流程:



<%--使用form表单包裹table表格进行提交--%>
编号 姓名 性别 年龄 籍贯 QQ 邮箱 操作
${s.count} ${user.name} ${user.gender} ${user.age} ${user.address} ${user.qq} ${user.email} 修改  删除

DelSelectedServlet代码:

@WebServlet("/delSelectedServlet")
public class DelSelectedServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取所有id
        String[] ids = request.getParameterValues("uid");
        //调用service方法
        UserService service = new UserServiceImpl();
        service.deleteUsers(ids);
        //跳转页面
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

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

service代码(重复调用之前所写的删除单个用户的方法):

@Override
    public void deleteUsers(String[] ids) {
        for (String id : ids){
            dao.deleteUser(Integer.parseInt(id));
        }
    }
2.分页查询功能

在我们读取数据库中的数据时,往往会因为数据量过大无法在一个页面中完整显示,这时就需要用到分页操作,可以使界面更加简洁又条理。下面是主要实现流程:

首先,我们先要创建PageBean实体类存放数据

public class PageBean {
    private int totalCount;//总记录数
    private int totalPage;//总页码
    private List list;//每页数据
    private int currentPage;//当前页码
    private int rows;//每页记录数
    ...
}

接着是jsp中的分页符

FindUserByPageServlet代码:

@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //获取参数
        String currentPage = request.getParameter("currentPage");
        String rows = request.getParameter("rows");
        if (currentPage == null || "".equals(currentPage)){
            currentPage = "1";
        }
        if (rows == null || "".equals(rows)){
            rows = "5";
        }
        //获取条件查询参数
        Map condition = request.getParameterMap();
        //调用service查询
        UserService service = new UserServiceImpl();
        PageBean pb = service.checkUserByPage(currentPage,rows,condition);
        //将PageBean存储在request
        request.setAttribute("pb",pb);
        request.setAttribute("condition",condition);
        //转发页面
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }

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

service中代码:

@Override
    public PageBean checkUserByPage(String _currentPage, String _rows, Map condition) {
        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);
        if (currentPage <= 0){
            currentPage = 1;
        }
        //创建PageBean对象
        PageBean pb = new PageBean();
        //设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);
        //调用dao查询总记录数
        int totalCount = dao.CheckTotalCount(condition);
        pb.setTotalCount(totalCount);
        //调用dao查询list集合
        int start = (currentPage - 1)*rows;
        List list = dao.CheckByPage(start,rows,condition);
        pb.setList(list);
        //计算总页数
        int totalPage = (totalCount%rows) ==0 ? (totalCount/rows) : (totalCount/rows) +1;
        pb.setTotalPage(totalPage);
        return pb;
    }

dao包中代码:

@Override
    //获取总页数
    public int CheckTotalCount(Map condition) {
        String sql = "select count(*) from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        Set keySet = condition.keySet();
        List params = new ArrayList();
        for (String key : keySet){
            if (key.equals("currentPage") || key.equals("rows")){
                continue;
            }
            String value = condition.get(key) [0];
            if (value != null && !"".equals(value)){
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");
            }
        }
        return template.queryForObject(sb.toString(),Integer.class,params.toArray());
    }

    @Override
    //根据当前页数获取user集合
    public List CheckByPage(int start, int rows, Map condition) {
        String sql = "select * from user where 1 = 1";
        StringBuilder sb = new StringBuilder(sql);
        Set keySet = condition.keySet();
        List params = new ArrayList();
        for (String key : keySet){
            if (key.equals("currentPage") || key.equals("rows")){
                continue;
            }
            String value = condition.get(key) [0];
            if (value != null && !"".equals(value)){
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");
            }
        }
        //添加分页
        sb.append(" limit ? , ?");
        params.add(start);
        params.add(rows);
        return template.query(sb.toString() ,new BeanPropertyRowMapper(User.class),params.toArray());
    }
 
3.模糊查询功能 

模糊查询和分页查询功能相差不多同样需要分页,在分页查询的service和dao包操作时已经进行了添加,也就是condition属性。因此,值附上jsp的操作代码:

总结

以上的功能都是在web阶段比较基础的存在,但是任何web项目都离不开它们的存在。因此,必须要牢牢掌握

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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