案例:WEB版学生管理系统

Day38

WEB-学生管理系统

详情页面index.jsp

学生角色:修改密码,修改信息

老师角色:修改密码,修改信息,查询所有学生

安全退出按钮

需要的数据:姓名,角色,username

将数据从LoginServlet中拿过来,方式一:存请求里,通过请求拿过来。

方式二:存session里,通过session拿过来。

推荐:存在session里,因为请求数据在返回成功后就会消失,但是目前需要将数据保存,所以用session。

if(user!=null){
                //有相关数据,登录成功
                request.getSession().setAttribute("username",user.getUsername());
                request.getSession().setAttribute("name",user.getName());
                request.getSession().setAttribute("role",role);
                response.sendRedirect("index.jsp");
}

详情页面:

<%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 9:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
            background: #f0f0f0;
            text-align: center;

        }
    </style>
</head>
<body>
<%
    String username = (String) session.getAttribute("username");
    String role = (String) session.getAttribute("role");
    String name = (String) session.getAttribute("name");
%>
    <h2>欢迎<%=name %><%=(role.equals("student"))?"同学":""%><%=(role.equals("teacher"))?"老师":""%>进入学生管理系统!</h2>
    <div>
        <a href="repassword.jsp">修改密码</a>
    <% if(role.equals("student")){%>

        <a href="StuInitModifyServlet?username=<%=username%>">修改信息</a>
    <%}%>
    <% if(role.equals("teacher")){%>
        <a href="TeaInitModifyServlet?username=<%=username%>">修改信息</a>
        <a href="QueryAllStuSevlet">查询学生</a>
    <%}%>
    <button type="button" οnclick="doOutLogin()">安全退出</button>
    </div>
    <script type="text/javascript">
        function doOutLogin(){
            window.location="DoOutLoginServlet";
        }
    </script>
</body>
</html>

登录-记住我功能

登录成功后退出,再次点击登录直接跳转到详情页面

rememberMe:选中了返回on,没选中返回null

逻辑:当rememberMe非空时,把数据存到cookie里面,(不是session,session在服务器,cookie在浏览器),数据存储index.jsp所需要的数据,否则跳转过去数据为空。

一个数据为一个凭证,要做三个凭证。(要传三个数据)

使用工具类做凭证:

CookieUtil类,编写方法createCookie(String key,String value,int time)

注意:1.cookie是纯文本数据。2.存储中文的时候,使用URLEncoder.encode(value,“UTF-8”)方法把value转换为中文合法。

public static Cookie createCookie(String key,String value,int time){
        try {
            Cookie cookie = new Cookie(key, URLEncoder.encode(value,"UTF-8"));
            cookie.setMaxAge(time);
            return cookie;
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

然后利用该工具类添加cookie:

 if(user!=null){
                //有相关数据,登录成功
                //记住我功能
                if(rememberMe!=null){
                    response.addCookie(CookieUtil.createCookie("username",user.getUsername(),60*60*24));
                    response.addCookie(CookieUtil.createCookie("name",user.getName(),60*60*24));
                    response.addCookie(CookieUtil.createCookie("role",role,60*60*24));
                }

之后再login.jsp中取凭证,如果凭证相同添加数据,都相同则直接跳转index.jsp。

<%
    Cookie[] cookies = request.getCookies();
    if(cookies!=null){
        int count=0;
        for(Cookie cookie:cookies){
            String key = cookie.getName();
            String value = URLDecoder.decode(cookie.getValue(),"UTF-8");
            if(key.equals("username")){
                session.setAttribute("username",value);
                count++;
            }
            if(key.equals("name")){
                session.setAttribute("name",value);
                count++;
            }
            if(key.equals("role")){
                session.setAttribute("role",value);
                count++;
            }
        }
        if(count==3){
            response.sendRedirect("index.jsp");
        }
    }

%>

注意:1.cookie会自己有一个JSESSIONID,所以此刻有四个cookie。

2.需要对之前中文编码的value进行解码。

登录成功-安全退出

DoOutLoginServlet

思路:删除Session里的数据,删除cookie里的数据,跳转。

先在CookieUtil里添加删除Cookie的功能( 通过设置一个已存在的 Cookie 的过期时间为零来删除 Cookie ):

public static void removeCookie(HttpServletResponse response,String key){
        //通过设置一个已存在的 Cookie 的过期时间为零来删除 Cookie
        response.addCookie(createCookie(key,"",0));
    }

然后使用:

package com.qf.servlet;

import com.qf.utils.CookieUtil;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/DoOutLoginServlet")
public class DoOutLoginServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charSet=UTF-8");
        HttpSession session = request.getSession();
        //删除session里的数据
        session.removeAttribute("username");
        session.removeAttribute("name");
        session.removeAttribute("role");
        //删除cookie里的数据
        CookieUtil.removeCookie(response,"username");
        CookieUtil.removeCookie(response,"name");
        CookieUtil.removeCookie(response,"role");
        //跳转
        response.sendRedirect("welcome.html");
    }
}
修改密码

从详情页面直接跳转到repassword.jsp,从session中获取账号和密码。

表单:

账号、原密码、新密码、提交、返回

判断角色和账号:

方案一:在action里面拼接,缺点:action里面的信息会显示出来。

方案二:隐藏域,input type=“hidden”

<%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 13:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  String username = (String) session.getAttribute("username");
  String role = (String) session.getAttribute("role");
%>
    <form action="RepasswordServlet" method="post">
      <tr>
        <td>
          <input type="hidden" name="username" value="<%=username%>"/>
          <input type="hidden" name="role" value="<%=role%>"/>
          账号:<%=username%><br/>
        </td>
      </tr>
      <tr>
        <td>
          原密码:<input type="password" name="password"/><br/>
          新密码:<input type="password" name="repassword"/><br/>

          <input type="submit" value="修改密码"/>
          <button type="button" οnclick="fun01()">返回</button>
        </td>
      </tr>
    </form>
    <script type="text/javascript">
      function fun01(){
        window.location="index.jsp";
      }
    </script>

</body>
</html>

将数据传给RepasswordServlet:

获取数据,判断角色,查询对象判断是否为空,不为空则修改,修改后安全退出,为空修改失败,设置信息返回修改页面。

package com.qf.servlet;

import com.qf.pojo.Student;
import com.qf.pojo.Teacher;
import com.qf.pojo.User;
import com.qf.utils.DBUtil;

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.sql.SQLException;

@WebServlet("/RepasswordServlet")
public class RepasswordServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String username = request.getParameter("username");
        String role = request.getParameter("role");
        String password = request.getParameter("password");
        String repassword = request.getParameter("repassword");


        try {
            User user = null;
            if("student".equals(role)){
                user = DBUtil.commonQueryObj(Student.class, "select * from student where username=? and password=?", username, password);
                if(user != null){
                    DBUtil.commonUpdate("update student set password=? where username=?",repassword,username);
                }
            }else if("teacher".equals(role)){
                user = DBUtil.commonQueryObj(Teacher.class,"select * from teacher where username=? and password=?", username, password);
                if(user != null){
                    DBUtil.commonUpdate("update teacher set password=? where username=?",repassword,username);
                }
            }

            if(user != null){
                request.getRequestDispatcher("DoOutLoginServlet").forward(request,response);
            }else{
                request.setAttribute("msg","修改密码失败 -- 原密码不正确");
                request.getRequestDispatcher("repassword.jsp").forward(request,response);
            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
}
修改学生信息

修改姓名,年龄,爱好

关键:已有数据从哪里来?–Servlet中利用传过来的username从数据库中获取对象,将对象放到session里面传到stuinfo页面

StuInitModifyServlet:

package com.qf.servlet;

import com.qf.pojo.Student;
import com.qf.utils.DBUtil;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet("/StuInitModifyServlet")
public class StuInitModifyServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charSet=UTF-8");
//        String username = (String) request.getSession().getAttribute("username");
        String username = request.getParameter("username");
        try {
            //利用账户查询学生对象
            Student student = DBUtil.commonQueryObj(Student.class, "select * from student where username=?", username);
            //将对象返回给前端
            request.setAttribute("stu",student);
            request.getRequestDispatcher("stuinfo.jsp").forward(request,response);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

    }
}

jsp页面根据对象获取数据

stuinfo.jsp:

<%@ page import="com.qf.pojo.Student" %><%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 17:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  Student stu = (Student) request.getAttribute("stu");
%>
    <h2>修改学生信息</h2>
    <form action="StuModifyServlet" method="post">
      <input type="hidden" name="username" value="<%=stu.getUsername()%>"/>

      <br/>
      姓名:<input type="text" name="name" value="<%=stu.getName()%>" /><br />
      年龄:<input type="text" name="age"  value="<%=stu.getAge()%>" /><br />
      性别:
      <input type="radio" name="sex" value="man" <%=(stu.getSex().equals("man"))?"checked='checked'":""%>/>男
      <input type="radio" name="sex" value="woman"<%=(stu.getSex().equals("woman"))?"checked='checked'":""%>/>女
      <br />
      爱好:
      <input type="checkbox" name="hobbies" value="football" <%=(stu.getHobbies().contains("football"))?"checked='checked'":""%>/>足球
      <input type="checkbox" name="hobbies" value="basketball" <%=(stu.getHobbies().contains("basketball"))?"checked='checked'":""%>/>篮球
      <input type="checkbox" name="hobbies" value="shop" <%=(stu.getHobbies().contains("shop"))?"checked='checked'":""%>/>购物
      <br />

      <input type="submit" value="修改" />
      <button type="button" οnclick="fun01()">返回</button>
    </form>
    <script type="text/javascript">
      function fun01(){
        window.location="index.jsp";
      }
    </script>
</body>
</html>

修改后将数据传回(注意要用隐藏域写账号,以便传回账号)到一个Servlet中完成对数据库信息的修改

StuModifyServlet:

package com.qf.servlet;

import com.qf.pojo.Student;
import com.qf.utils.BeanUtil;
import com.qf.utils.CookieUtil;
import com.qf.utils.DBUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Map;

@WebServlet("/StuModifyServlet")
public class StuModifyServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charSet=UTF-8");

        Map<String, String[]> parameterMap = request.getParameterMap();
        Student stu = new Student();
        BeanUtil.populate(stu,parameterMap);
        System.out.println(stu);
        try {
            //更新数据库数据
            DBUtil.commonUpdate("update student set name=?,age=?,sex=?,hobbies=?",stu.getName(),stu.getAge(),stu.getSex(),stu.getHobbies());
            //更新session
            HttpSession session = request.getSession();
            session.setAttribute("name",stu.getName());
            //更新cookie
            response.addCookie(CookieUtil.createCookie("name",stu.getName(),60*60*24));
            //跳转
            response.sendRedirect("index.jsp");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }


    }
}
修改老师信息

老师角色->index.jsp–>TeaInitModifyServlet(根据username查询老师对象,并添加到请求中,查询所有学科对象(集合),并添加到请求中)–>teaInfo.jsp(获取请求中的老师对象和学科集合再适配到页面上,页面中有账号、姓名、学科,学科需要匹配当前账号的信息,判断老师和学科表中的id是否相同,默认选中。还有修改和返回两个按钮,修改到TeaModifyServlet,依据username修改name和courseId,更新session和cookie里的name数据,跳转到index.jsp;返回到index.jsp)。

TeaInitModifyServlet:

package com.qf.servlet;

import com.qf.pojo.Course;
import com.qf.pojo.Teacher;
import com.qf.utils.DBUtil;

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.sql.SQLException;
import java.util.List;

@WebServlet("/TeaInitModifyServlet")
public class TeaInitModifyServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charSet=UTF-8");

        String username = request.getParameter("username");
        try {
            //查询老师对象
            Teacher teacher = DBUtil.commonQueryObj(Teacher.class, "select * from teacher where username=?", username);
            // 查询所有课程对象
            List<Course> courseList = DBUtil.commonQueryList(Course.class, "select * from course");


            //返回到请求中并跳转页面
            request.setAttribute("teacher",teacher);
            request.setAttribute("courseList",courseList);
            request.getRequestDispatcher("teainfo.jsp").forward(request,response);

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

    }
}

teainfo.jsp:

<%@ page import="com.qf.pojo.Course" %>
<%@ page import="com.qf.pojo.Teacher" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 19:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List<Course> courseList = (List<Course>) request.getAttribute("courseList");
        Teacher tea = (Teacher) request.getAttribute("teacher");
    %>
    <h2>修改老师信息</h2>
    <form action="TeaModifyServlet" method="post">
      <input type="hidden" name="username" value="<%=tea.getUsername()%>"/>

      <br/>
      姓名:<input type="text" name="name" value="<%=tea.getName()%>" /><br />

      课程:<select name="courseId">

        <%for(Course course:courseList){%>
            <option value="<%=course.getId()%>" <%=(tea.getCourseId()== course.getId())?"selected":""%>><%=course.getName()%></option>
        <%}%>
    </select>

      <input type="submit" value="修改" />
      <button type="button" οnclick="fun01()">返回</button>
    </form>
    <script type="text/javascript">
      function fun01(){
        window.location="index.jsp";
      }
    </script>

</body>
</html>

TeaModifyServlet:

package com.qf.servlet;

import com.qf.pojo.Teacher;
import com.qf.utils.BeanUtil;
import com.qf.utils.CookieUtil;
import com.qf.utils.DBUtil;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Map;

@WebServlet("/TeaModifyServlet")
public class TeaModifyServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charSet=UTF-8");

        Teacher teacher = new Teacher();
        Map<String, String[]> parameterMap = request.getParameterMap();
        BeanUtil.populate(teacher,parameterMap);
        try {
            DBUtil.commonUpdate("update teacher set name=?,courseId=?",teacher.getName(),teacher.getCourseId());

            HttpSession session = request.getSession();
            session.setAttribute("name",teacher.getName());
            response.addCookie(CookieUtil.createCookie("name",teacher.getName(),60*60*24));
            response.sendRedirect("index.jsp");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
查询

QueryAllStuServlet

做分页假数据:

public static void main(String[] args) {
        for(int i=0;i<100;i++){
            String sql = "insert into student values (?,?,?,?,?,?)";
            try {
                DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

查询全部数据,存到请求里,

package com.qf.servlet;

import com.qf.pojo.Student;
import com.qf.utils.DBUtil;

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.sql.SQLException;
import java.util.List;

@WebServlet("/QueryAllStuSevlet")
public class QueryAllStuServlet extends HttpServlet {

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

   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.setCharacterEncoding("UTF-8");
       response.setContentType("text/html;charset=UTF-8");
       try {
           List<Student> students = DBUtil.commonQueryList(Student.class, "select * from student");
           request.setAttribute("stuList",students);
           request.getRequestDispatcher("stuList.jsp").forward(request,response);
       } catch (SQLException e) {
           throw new RuntimeException(e);
       } catch (InstantiationException e) {
           throw new RuntimeException(e);
       } catch (IllegalAccessException e) {
           throw new RuntimeException(e);
       }

   }
//      假数据
//    public static void main(String[] args) {
//        for(int i=0;i<100;i++){
//            String sql = "insert into student values (?,?,?,?,?,?)";
//            try {
//                DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
//            } catch (SQLException e) {
//                throw new RuntimeException(e);
//            }
//        }
//    }
}

stuList.jsp

获取数据集合,展示表格:账号、姓名、性别、年龄、爱好、操作,显示内容用for循环

<%@ page import="com.qf.pojo.Student" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 20:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  List<Student> stuList = (List<Student>) request.getAttribute("stuList");

%>

<button οnclick="fun01()">返回</button>
<h1>学生列表页面</h1>
<table border="1" width="800px">
  <tr>
    <th>账号</th>
    <th>姓名</th>
    <th>性别</th>
    <th>年龄</th>
    <th>爱好</th>
    <th>操作</th>
  </tr>

  <%for(Student stu:stuList){ %>
  <tr>
    <td><%=stu.getUsername()%></td>
    <td><%=stu.getName()%></td>
    <td><%=stu.getSex()%></td>
    <td><%=stu.getAge()%></td>
    <td><%=stu.getHobbies()%></td>
    <td>
      <a href="#">修改</a>
      <a href="#">删除</a>
    </td>
  </tr>
  <%}%>
</table>

<script type="text/javascript">
  function fun01(){
    window.location = "index.jsp";
  }
</script>
</body>
</html>

但是展示的数据是数据库里的数据,不是展示的数据(不满足中英文转换等展示需求)。

概念:dto:满足前端数据展示需求

写StudentDto类

写工具类DtoUtil:把学生类封装成StudentDto类。

两个方法,studentHandler(Student student)方法把单个学生类转换成dto;studentListHandler(List<Student.> stuList)方法把学生对象集合转换成dto类集合。

package com.qf.utils;

import com.qf.dto.StudentDto;
import com.qf.pojo.Student;

import java.util.ArrayList;
import java.util.List;

public class DtoUtil {
    public static StudentDto studentHandler(Student student){
        String sex = student.getSex();
        if("man".equals(sex)){
            sex = "男";
        }
        if("woman".equals(sex)){
            sex = "女";
        }
        String hobbies = student.getHobbies();
        hobbies = hobbies.replaceAll("football","足球");
        hobbies = hobbies.replaceAll("basketball","篮球");
        hobbies = hobbies.replaceAll("shop","购物");
        StudentDto studentDto = new StudentDto(student,sex,hobbies);
        return studentDto;
    }
    public static List<StudentDto> studentListHandler(List<Student> stuList){
        List<StudentDto> studentDtos = new ArrayList<>();
        for (Student stu :stuList){
            StudentDto studentDto = studentHandler(stu);
            studentDtos.add(studentDto);
        }
        return studentDtos;
    }
}

QueryAllStuServlet中就要对应修改:

            List<StudentDto> students = DtoUtil.studentListHandler(DBUtil.commonQueryList(Student.class, "select * from student"));

前端存的应该是dto类:

<%@ page import="com.qf.pojo.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="com.qf.dto.StudentDto" %><%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 20:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  List<StudentDto> stuList = (List<StudentDto>) request.getAttribute("stuList");

%>

<button οnclick="fun01()">返回</button>
<h1>学生列表页面</h1>
<table border="1" width="800px">
  <tr>
    <th>账号</th>
    <th>姓名</th>
    <th>性别</th>
    <th>年龄</th>
    <th>爱好</th>
    <th>操作</th>
  </tr>

  <%for(StudentDto stu:stuList){ %>
  <tr>
    <td><%=stu.getStu().getUsername()%></td>
    <td><%=stu.getStu().getName()%></td>
    <td><%=stu.getSex()%></td>
    <td><%=stu.getStu().getAge()%></td>
    <td><%=stu.getHobbies()%></td>
    <td>
      <a href="#">修改</a>
      <a href="#">删除</a>
    </td>
  </tr>
  <%}%>
</table>

<script type="text/javascript">
  function fun01(){
    window.location = "index.jsp";
  }
</script>
</body>
</html>

分页查询

QueryAllStuServlet

数据库中利用分页查询语句查询,可以定为每页15条数据,偏移量为(页数-1)*每页数据量。

index.jsp:

<a href="QueryAllStuServlet?curPage=1">查询学生</a>

将页面数据添加到请求中,除了数据外还要存当前页数。

stuList.jsp中要写首页、上一页、下一页、尾页按钮。首页不能有上一页、尾页不能有下一页。

优化DBUtil:编写getAllCount(String sql)方法,获取数据条数。

/**
     * 获取数据条数
     * @param sql
     * @return
     */
    public static int getAllCount(String sql){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            connection = getConnection();
            statement = connection.prepareStatement(sql);
            resultSet = statement.executeQuery();
            if(resultSet.next()){
                int allCount = resultSet.getInt(1);
                return allCount;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            close(connection,statement,resultSet);
        }
        return 0;
    }

然后再QueryAllStuSevlet中利用该工具类计算总页数,并存储该数据返回前端。

package com.qf.servlet;

import com.qf.dto.StudentDto;
import com.qf.pojo.Student;
import com.qf.utils.DBUtil;
import com.qf.utils.DtoUtil;

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.sql.SQLException;
import java.util.List;

@WebServlet("/QueryAllStuServlet")
public class QueryAllStuServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        int curPage = Integer.parseInt(request.getParameter("curPage"));

        int count = 15;//每一页的数据条数
        int offset = (curPage-1)*count;//计算偏移量

        int allCount = DBUtil.getAllCount("select count(username) from student");//总条数
        int totalPage;//总页数
        if(allCount%count == 0){
            totalPage = allCount/count;
        }else{
            totalPage = allCount/count + 1;
        }

        try {
            String sql = "select * from student limit ?,?";
            List<Student> stuList = DBUtil.commonQueryList(Student.class,sql,offset,count);
            List<StudentDto> stuDtoList = DtoUtil.studentListHandler(stuList);

            //将页面数据添加到请求对象中
            request.setAttribute("stuList",stuDtoList);
            request.setAttribute("curPage",curPage);
            request.setAttribute("totalPage",totalPage);

            request.getRequestDispatcher("stuList.jsp").forward(request,response);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }

}
//      假数据
//    public static void main(String[] args) {
//        for(int i=0;i<100;i++){
//            String sql = "insert into student values (?,?,?,?,?,?)";
//            try {
//                DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
//            } catch (SQLException e) {
//                throw new RuntimeException(e);
//            }
//        }
//    }

前端中完善翻页功能

<%@ page import="com.qf.pojo.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="com.qf.dto.StudentDto" %><%--
  Created by IntelliJ IDEA.
  User: Gu
  Date: 2024-06-14
  Time: 20:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  List<StudentDto> stuList = (List<StudentDto>) request.getAttribute("stuList");
  int curPage = (int) request.getAttribute("curPage");
  int totalPage = (int) request.getAttribute("totalPage");
%>

<button οnclick="fun01()">返回</button>
<h1>学生列表页面</h1>
<table border="1" width="800px">
  <tr>
    <th>账号</th>
    <th>姓名</th>
    <th>性别</th>
    <th>年龄</th>
    <th>爱好</th>
    <th>操作</th>
  </tr>

  <%for(StudentDto stu:stuList){ %>
  <tr>
    <td><%=stu.getStu().getUsername()%></td>
    <td><%=stu.getStu().getName()%></td>
    <td><%=stu.getSex()%></td>
    <td><%=stu.getStu().getAge()%></td>
    <td><%=stu.getHobbies()%></td>
    <td>
      <a href="#">修改</a>
      <a href="#">删除</a>
    </td>
  </tr>
  <%}%>
</table>
    <a href="QueryAllStuServlet?curPage=1">首页</a>
    <%if(curPage>1){%>
    <a href="QueryAllStuServlet?curPage=<%=curPage-1%>">上一页</a>
    <%}%>

    <%if(curPage<totalPage){%>
    <a href="QueryAllStuServlet?curPage=<%=curPage+1%>">下一页</a>
    <%}%>
    <a href="QueryAllStuServlet?curPage=<%=totalPage%>">尾页</a>
<script type="text/javascript">
  function fun01(){
    window.location = "index.jsp";
  }
</script>
</body>
</html>

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值