品牌增删改查案例,登录以及注册

环境导入E:\课程\javaweb资料\day10-JSP\资料\2. 品牌增删改查案例素材(师生共用)
品牌增删改查案例,登录以及注册_第1张图片

查询所有(使用JSP脚本展示品牌数据)
品牌增删改查案例,登录以及注册_第2张图片
1,在数据访问层的mapper接口中定义查询所有的sql语句

    @Select("select * from tb_brand")
    List<Brand> selectAll();

2,在service业务逻辑层中,调用mapper接口中的sql查询语句,获得查询结果并返回给controller控制层

public List<Brand> selectAll(){
        //1,获得sqlsession
        SqlSession sqlSession = factory.openSession();
        //2,连接mapper接口
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //3,调用查询方法
        List<Brand> brands = mapper.selectAll();

        //2,返回结果给servlet

        return brands;
    }

3,在controller控制层中,调用service业务逻辑层的查询方法,并接受返回值,把返回值存到域中,通过请求转发到brand.jsp,并共享域

  @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //创建BrandService对象
        BrandService brandService = new BrandService();
    //通过BrandService对象调用selectAll()查询方法
        List<Brand> brands = brandService.selectAll();
         //通过setAttribute()方法把查询到的数据储存到域中
        request.setAttribute("list",brands);
        //通过请求转发共享数据
        request.getRequestDispatcher("/brand.jsp").forward(request,response);
    }

4,在brand.jsp中遍历所有查询到的数据

<%@ page import="com.itheima.pojo.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--
  Created by IntelliJ IDEA.
  User: zhouxiangyang
  Date: 2021/12/18
  Time: 9:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>jsp脚本案例title>
head>
<body>
<input type="button" value="新增" onclick="addBrand()"><br>

<hr>
<table border="1" cellspacing="0" width="80%">
<tr>
    <th>序号th>
    <th>品牌名称th>
    <th>企业名称th>
    <th>排序th>
    <th>品牌介绍th>
    <th>状态th>
    <th>操作th>
tr>
<%--  通过forEach遍历所有的数据  --%>
<c:forEach items="${list}" var="brand" varStatus="vs">
    <tr align="center">
    <td>${vs.count}td>
    <td>${brand.brandName}td>
    <td>${brand.companyName}td>
    <td>${brand.ordered}td>
    <td>${brand.description}td>
    <td>${brand.status==1?"启用":"禁用"}td>

    <td><a href="/day10-brand-demo/selectByIdServlet?id=${brand.id}">修改a>
        <a href="/day10-brand-demo/DelectServlet?id=${brand.id}">删除a>td>
    tr>
c:forEach>

添加数据
1,在数据访问层中定义添加的sql语句

@Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
    void add(Brand brand);

2,在service业务逻辑层中,连接数据库,调用mapper方法,进行添加操作

    public void add(Brand brand){
        //获得sqlswssion对象
        SqlSession sqlSession = factory.openSession(true);
        //链接mapper接口
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //调用添加方法
        mapper.add(brand);
    }

3,在controller控制层中,获得用户请求,并获取所有的参数,把参数封装传递给service业务逻辑层,最后展示所有的数据

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        Brand brand = new Brand();
        try {
            BeanUtils.populate(brand,request.getParameterMap());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        BrandService brandService = new BrandService();
        brandService.add(brand);
        response.sendRedirect(request.getContextPath()+"/selectAllServlet");
    }

5,在brand.jsp中给新增按钮添加跳转页面,实现添加

<%-给新增按钮添加点击事件,实现点击新增就跳转到新增界面---%>
<input type="button" value="新增" onclick="addBrand()"><br>
<script>
    function addBrand(){
    
        location.href="/day10-brand-demo/addBrand.html"
    }
script>

6,通过addBrand.html获得新增的数据,并把请求给servlet,进行添加

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>添加品牌title>
head>
<body>
<h3>添加品牌h3>
<form action="/day10-brand-demo/addServlet" method="post">
    品牌名称:<input name="brandName"><br>
    企业名称:<input name="companyName"><br>
    排序:<input name="ordered"><br>
    描述信息:<textarea rows="5" cols="20" name="description">textarea><br>
    状态:
        <input type="radio" name="status" value="0">禁用
        <input type="radio" name="status" value="1">启用<br>

    <input type="submit" value="提交">
form>

body>
html>

修改数据
思路:首先要获得需要修改的的全部信息, 在修改页面展示出来,然后再进行修改,修改后保存。

1,在数据访问层中的mapper接口中,定义通过id查询的sql语句

 @Select("select * from tb_brand where id=#{id}")
    Brand selectById(int id);

2,在service业务逻辑层中,连接数据库,调用mapper接口中的selectById()方法,并把结果返归给controller控制层,

public Brand selectById(int id){
        //获得sqlswssion对象
        SqlSession sqlSession = factory.openSession(true);
        //链接mapper接口
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = mapper.selectById(id);
        sqlSession.close();
        return brand;
    }

3,在controller控制层中调用service业务逻辑层中的查询方法,并接收返回结果,把结果封装到域中,通过请求转发,把数据共享给修改页面update.jsp

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        BrandService brandService = new BrandService();
        Brand brand = brandService.selectById(Integer.parseInt(id));
        request.setAttribute("brands",brand);
        request.getRequestDispatcher("/update.jsp").forward(request,response);

    }

4,修改页面展示要被修改的的数据,修改完成后,把修改请求发送到contorller控制层中

<%--
  Created by IntelliJ IDEA.
  User: zhouxiangyang
  Date: 2021/12/18
  Time: 17:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>修改品牌title>
head>
<body>
<h3>修改品牌h3>
<form action="/day10-brand-demo/updateServlet" method="post">
<%--type="hidden"的作用是将这一行的数据隐藏,不展示个用户看--%>
    <input type="hidden" name="id" value="${brands.id}"><br>
    品牌名称:<input name="brandName" value="${brands.brandName}"><br>
    企业名称:<input name="companyName" value="${brands.companyName}"><br>
    排序:<input name="ordered" value="${brands.ordered}"><br>
    描述信息:<textarea rows="5" cols="20" name="description"> "${brands.description}"textarea><br>
    状态:
    禁用
    启用<br>

    <input type="submit" value="提交">
form>
body>
html>

5,controller接收到修改请求后,获取所有的参数,并把参数封装到brand对象中,传递给service业务逻辑层,

   @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        Brand brand = new Brand();

        try {
        //获取所有的参数,并封装到brand对象中
            BeanUtils.populate(brand,request.getParameterMap());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

6,service业务逻辑层,连接数据库,创建mapper接口的代理对象,调用mapper接口里的修改方法

 public void update(Brand brand){
        SqlSession sqlSession = factory.openSession(true);
        //链接mapper接口
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        mapper.update(brand);
        sqlSession.close();
    }

7,在数据访问层中,接收service业务逻辑层传递过来的数据,并执行修改的sql语句,修改表中的数据

@Update("update tb_brand set brand_name=#{brandName}, company_name=#{companyName}, ordered=#{ordered}, description=#{description}, status=#{status} where id=#{id}")
    void update(Brand brand);

删除数据
1,在数据访问层中的mapper接口中定义删除的修改语句


    @Delete("delete from tb_brand where id=#{id}")
    void delect(int id);

2,在servive业务逻辑处理层中,连接数据库,创建mapper接口的代理对象,调用接口中的查询方法

  public void deleteById(int id){
        SqlSession sqlSession = factory.openSession(true);
        //链接mapper接口
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        mapper.delect(id);
        sqlSession.close();
    }

3,在controller控制层中,接收删除请求,并获取请求参数,把参数传递给service业务逻辑层

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

4,在brand.jsp中把删除请求发送给controller控制层中,实现请求

<%@ page import="com.itheima.pojo.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--
  Created by IntelliJ IDEA.
  User: zhouxiangyang
  Date: 2021/12/18
  Time: 9:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>jsp脚本案例title>
head>
<body>
<%----%>
<input type="button" value="新增" onclick="addBrand()"><br>
<script>
    function addBrand(){
        location.href="/day10-brand-demo/addBrand.html"
    }
script>
<hr>
<table border="1" cellspacing="0" width="80%">
<tr>
<%--    --%>
    <th>序号th>
    <th>品牌名称th>
    <th>企业名称th>
    <th>排序th>
    <th>品牌介绍th>
    <th>状态th>
    <th>操作th>
tr>
<%--开始遍历
    items="":被遍历的容器名称,也就是域对象中集合的名称
    var="":表示每次遍历出来的结果保存的变量
    varStatus="vs" :表示遍历的状态信息
        vs.index:表示当前元素的索引,从0开始
        vs.count:表示第几个元素,从1开始
--%>
<c:forEach items="${list}" var="brand" varStatus="vs">
    <tr align="center">
    <td>${vs.count}td>
    <td>${brand.brandName}td>
    <td>${brand.companyName}td>
    <td>${brand.ordered}td>
    <td>${brand.description}td>
    <td>${brand.status==1?"启用":"禁用"}td>

    <td><a href="/day10-brand-demo/selectByIdServlet?id=${brand.id}">修改a>
    <%---在地址栏中id的参数传递给controller控制层中-%>
 <a href="/day10-brand-demo/DelectServlet?id=${brand.id}">删除a>td>
    tr>
c:forEach>
    table>

    body>

思维梳理图
1,查询所有
品牌增删改查案例,登录以及注册_第3张图片
2,新增数据
品牌增删改查案例,登录以及注册_第4张图片
3,修改,回显数据
品牌增删改查案例,登录以及注册_第5张图片

品牌增删改查案例,登录以及注册_第6张图片
登录
需求:用户登录判断用户名以及密码,用户可选择记住密码和用户名
1,controller控制层

 @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得用户输入的用户名
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        //获得用户输入的密码
        String password = request.getParameter("password");
        //调用业务逻辑层判断用户是否存在
        User login = userService.login(username, password);
        if (login!=null){
       //如果用户存在就将用户名和密码储存到cookie中
            Cookie usernameCookie = new Cookie("username", username);
            Cookie passwordCookie = new Cookie("password", password);
            String remember = request.getParameter("remember");
            
            if(remember!=null){
            //如果用户点击了记住密码的按钮,则则使这个两个cookie对象存活七天,使下次登录的时候显示用户名和密码
                usernameCookie.setMaxAge(60*60*24*7);
                passwordCookie.setMaxAge(60*60*24*7);
            }
            else {
            //如果没有点击记住密码的按钮,则使这个两个cookie对象存活时间为0
                usernameCookie.setMaxAge(0);
                passwordCookie.setMaxAge(0);
            }
            response.addCookie(usernameCookie);
            response.addCookie(passwordCookie);
            //如果存在,把数用户据用session储存,方便后面使用
            HttpSession session = request.getSession();
            session.setAttribute("user",login);
            //通过重定向
            response.sendRedirect(request.getContextPath()+"/selectAllServlet");
        }
        else {
            request.setAttribute("login_msg","比狗儿子还蠢");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }

2,service业务逻辑层定义查询方法

public class UserService {
    //1 加载mybatis-config.xml核心配置文件,获取SqlSessionFactory对象
    private SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();

    /**
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    public User login(String username, String password){
        //2 获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //3 获取UserMapper接口代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //4 执行方法,得到结果
        User user = userMapper.select(username, password);
        //5 处理结果,释放资源
        sqlSession.close();
        return user;
    }

3,在数据访问层定义查询sql语句

  @Select("select * from tb_user where username = #{username} and password = #{password}")
    User select(@Param("username") String username,@Param("password")  String password);

在login.jsp中写登录页面

<%--
  Created by IntelliJ IDEA.
  User: zhouxiangyang
  Date: 2021/12/20
  Time: 15:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>logintitle>
    <link href="css/login.css" rel="stylesheet">
head>
<body>
<div id="loginDiv" style="height: 350px">
    <form action="/day11-brand-demo/loginServlet" id="form">
        <h1 id="loginMsg">LOGIN INh1>
        <%--登录错误提示--%>
        <div id="errorMsg">${login_msg}div>

        <p>Username:<input id="username" name="username" 
        <%--value="${cookie.username.value}"如果用户登录时选择记住密码,那么这个用来回显密码和用户名--%>
        type="text" value="${cookie.username.value}">p>
        <p>Password:<input id="password" name="password" type="password" value="${cookie.password.value}">p>
        <%--记住密码按钮--%>
        <p>Remember:p>
        <div id="subDiv">
            <input type="submit" class="button" value="login up">
            <input type="reset" class="button" value="reset">   
            <a href="register.jsp">没有账号?a>
        div>
    form>
div>

body>
html>

用户注册
1,注册页面书写,以及验证码判断

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎注册title>
    <link href="css/register.css" rel="stylesheet">
head>
<body>

<div class="form-div">
    <div class="reg-content">
        <h1>欢迎注册h1>
        <span>已有帐号?span> <a href="login.jsp">登录a>
        <%--展示错误信息的div--%>
        <div id="errorMsg"><font color="red">${register_msg}font>div>
    div>
    <%-- 用户填写完注册信息后想客户端发送注册用户请求   --%>
    <form id="reg-form" action="/day11-brand-demo/registerServlet" method="get">
        <table>
            <tr>
                <td>用户名td>
                <td class="inputs">
                    <input name="username" type="text" id="username" value="${username1}">
                    <br>
                    <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎span>
                td>

            tr>
            <tr>
                <td>密码td>
                <td class="inputs">
                    <input name="password" type="password" id="password" value="${password1}">
                    <br>
                    <span id="password_err" class="err_msg" style="display: none">密码格式有误span>
                td>
            tr>
            <tr>
                <td>验证码td>
                <td class="inputs">
                    <input name="checkCode" type="text" id="checkCode">
                    <%-- src="/day11-brand-demo/checkCodeServlet"验证码图片的地址--%>
                    <img src="/day11-brand-demo/checkCodeServlet" id="checkCodeImg" onclick="changeImage()">
                    <a href="#" id="changeImg" onclick="changeImage()">看不清?a>
                td>
            tr>
        table>
        <div class="buttons">
            <input value="注 册" type="submit" id="reg_btn">
        div>
        <br class="clear">
    form>
div>
<script>
    function changeImage() {
        console.info("changeImage...")
        //修改img标签的src属性
        document.querySelector("#checkCodeImg").src="/day11-brand-demo/checkCodeServlet?"+new Date().getTime();
    }
script>
body>
html>

2,controller控制层,接收注册请求,并执行注册判断,以及验证判断

 private UserService userService=new UserService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      //获取用户注册的信息
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //获取请求中用户输入的验证码
        String checkCode = request.getParameter("checkCode");
        //获取session中存的验证码,用于判断
        String checkCodes = (String) 
request.getSession().getAttribute("checkCodes");
//验证码使用一次之后,立马销毁
        request.getSession().removeAttribute("checkCodes");
        //判断用验证码是否为空或者是否与正确验证码不一致,
        if (checkCode==null||!checkCode.equalsIgnoreCase(checkCodes)){
            String username1 = request.getParameter("username");
            String password1 = request.getParameter("password");
            request.setAttribute("username1",username1);
            request.setAttribute("password1",password1);
            //将错误信息存入request域中,通过注册也买你展示
            request.setAttribute("register_msg","你输入的验证码有误");
            request.getRequestDispatcher("/register.jsp").forward(request,response);
            //如果验证码不正确就不继续执行,直到验证码正确再继续往下执行
            return;
        }
        User user = new User();
        try {
            BeanUtils.populate(user,request.getParameterMap());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //将注册信息交给service业务逻辑处理层,判断注册信息是否存在
        boolean regist = userService.regist(user);
        if (regist){
        //如果用户信息添加成功则代表注册成功,跳转到登录页面
            request.setAttribute("login_msg","已注册成功,抓紧上号");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }
        else {
        //如果用户注册失败,则给出提示并重新注册
            request.setAttribute("register_msg","你输入的用户名已存在");
            request.getRequestDispatcher("/register.jsp").forward(request,response);
        }
    }

3,controller控制层,验证码图片


@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //详细验证码方法建议百度
        String s = CheckCodeUtil.outputVerifyImage(100, 50, response.getOutputStream(), 4);
        HttpSession session = request.getSession();
        session.setAttribute("checkCodes",s);
    }

3,service业务逻辑处理层,判断用户是否存在,如果不存在则添加

 public boolean regist(User user){
        //2 获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //3 获取UserMapper接口代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //4 执行方法,得到结果
        //4.1 调用selectByUsername方法,查询用户信息
        User existUser = userMapper.selectByUsername(user.getUsername());
        if(existUser==null){
            //4.3 如果user==null,表示用户名不存在,可以添加,调用add方法进行添加/注册
            userMapper.add(user);
            //5 处理结果,释放资源
            sqlSession.commit();
            sqlSession.close();
            return true; //表示注册成功
        }
        //5 处理结果,释放资源
        sqlSession.close();
        return false; //表示注册失败
    }

5,mapper接口中sql语句

    @Select("select * from tb_user where username = #{username}")
    User selectByUsername(String username);

    /**
     * 添加用户
     * @param user
     */
    @Insert("insert into tb_user values(null,#{username},#{password})")
    void add(User user);
}

你可能感兴趣的:(java,开发语言)