Day38
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");
}
详情页面:
Title
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
background: #f0f0f0;
text-align: center;
}
欢迎进入学生管理系统!
修改密码
">修改信息
">修改信息
查询学生
安全退出
function doOutLogin(){
window.location="DoOutLoginServlet";
}
登录-记住我功能
登录成功后退出,再次点击登录直接跳转到详情页面
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。
注意: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”
Title
账号:
原密码:
新密码:
返回
function fun01(){
window.location="index.jsp";
}
将数据传给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:
Title
修改学生信息
姓名:
年龄:
性别:
男
女
爱好:
足球
篮球
购物
返回
function fun01(){
window.location="index.jsp";
}
修改后将数据传回(注意要用隐藏域写账号,以便传回账号)到一个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 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 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:
Title
修改老师信息
姓名:
课程:
返回
function fun01(){
window.location="index.jsp";
}
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 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
String sql = "insert into student values (?,?,?,?,?,?)";
try {
DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
@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
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
// String sql = "insert into student values (?,?,?,?,?,?)";
// try {
// DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
// } catch (SQLException e) {
// throw new RuntimeException(e);
// }
// }
// }
}
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
List
StudentDto studentDto = studentHandler(stu);
studentDtos.add(studentDto);
}
return studentDtos;
}
}
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;
}
@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
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
// String sql = "insert into student values (?,?,?,?,?,?)";
// try {
// DBUtil.commonInsert(sql,"jiashuju"+i,"123123","假数据"+i,"man",18,"football");
// } catch (SQLException e) {
// throw new RuntimeException(e);
// }
// }
// }
p前端中完善翻页功能/p
pre class="brush:python;toolbar:false"%@ 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
titleTitle/title
/head
body
%
ListStudentDto stuList = (ListStudentDto) 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
修改
删除
/td
/tr
%}%
/table
首页
%if(curPage1){%
"上一页
%}%
%if(curPagetotalPage){%
">下一页
">尾页
function fun01(){
window.location = "index.jsp";
}