登录注册
登录
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<form action="LoginServlet" method="post">
账号<input type="text" name="username"/><br>
密码<input type="password" name="password"/><br>
<input type="submit" value="登录"><br>
<a href="register.jsp">注册</a>
</form>
</body>
</html>
注册
注册成功后跳回login
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册界面</title>
</head>
<body>
<form action="RegisterServlet" method="post">
请完成注册<br>
账号<input type="text" name="username"/><br>
密码<input type="password" name="password"/><br>
<input type="submit" value="注册"><br>
</form>
</body>
</html>
register的servlet
package servlet;
import Dao.StudentDao;
import entity.Student;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet(name = "RegisterServlet", value = "/RegisterServlet")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
StudentDao studentDao=new StudentDao();
try {
studentDao.RegisterStudent(username,password);
response.sendRedirect("login.jsp");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
login的servlet
登录成功后转到TableServlet
package servlet;
import Dao.StudentDao;
import entity.Student;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
@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");
Student stu=new Student();
stu.setUsername(username);
stu.setPassword(password);
//调用登录功能
StudentDao studentDao = new StudentDao();
try {
Boolean result = studentDao.login(stu);
if(result==true){
response.getWriter().print("login success");
request.getRequestDispatcher("TableServlet").forward(request,response);
}else {
response.getWriter().print("login fail");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
查询结果页面
TableServlet
先通过数据库操作查询所有信息,再调用request域向前端把list传过去;也可以用session,但是浪费资源。
传过去的的是键值的形式。
package servlet;
import Dao.StudentDao;
import entity.Student;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "TableServlet", value = "/TableServlet")
public class TableServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StudentDao studentDao=new StudentDao();
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
/* //一页显示3条数据
int pageSize=3;
//如果第一次访问servlet,页面在首页,值为1;否则传啥是啥
String cPage = request.getParameter("begin");
if(cPage==null){
cPage="1";
}
int currentPage= Integer.parseInt(cPage);
*/
//查找数据库列表信息,跳转向jsp
try {
List<Student> list = studentDao.SelectAll();
//向前端传值
request.setAttribute("list",list);
//跳转
request.getRequestDispatcher("StudentTable.jsp").forward(request,response);
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
StudentTable.jsp
注意jsp的格式,使用herf传递值的方法,
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>StudentTable</title>
</head>
<body>
<form action="" method="post">
<table border="1px">
<tr>
<td>id</td><td>username</td><td>password</td><td>weight</td><td>height</td><td>grade</td>
</tr>
<%--通过使用循环来输出学生信息--%>
<%
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
List<Student> list = (List<Student>) request.getAttribute("list");
for(int i=0;i<list.size();i++){
%>
<tr>
<td><%=list.get(i).getId()%></td>
<td><%=list.get(i).getUsername()%></td>
<td><%=list.get(i).getPassword()%></td>
<td><%=list.get(i).getWeight()%></td>
<td><%=list.get(i).getHeight()%></td>
<td><%=list.get(i).getGrade()%></td>
<td><a href="DeleteServlet?id=<%=list.get(i).getId()%>" >delete</a></td>
<td><a href="UpdateServlet?id=<%=list.get(i).getId()%>" >update</a></td>
</tr>
<%
};
%>
<tr>
add
</tr>
</table>
</form>
<a href="PageServlet?begin=1">index</a>
<a href="">last</a>
<a href="">next</a>
<a href="">end</a>
</body>
</html>
删除学生记录
点击delete会被超连接到DeleteServlet
package servlet;
import Dao.StudentDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
StudentDao studentDao=new StudentDao();
try {
studentDao.DeleteStudentById(id);
//先挑servlet再执行一编查找,再通过servlet中的跳转到jsp页面,完成对jsp页面的刷新
request.getRequestDispatcher("TableServlet").forward(request,response);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
需要注意的是,在Servlet中成数据库的删除操作后,需要再执行一次查找页面,再被动跳转到jsp;否则会异常!其他操作的逻辑也如此。
分页
分页查询方法,返回一个指定大小的list
/**
* 分页查询
*/
public List<Student> SelectByPage(int begin, int size) throws SQLException {
//1.连接数据库
DBUtil db=new DBUtil();
Connection connection= db.getConnection();
//2.编写sql,设置value
String sql="select * from stu2 limit ?,?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1,begin);
pstmt.setInt(2,size);
//3.执行sql
ResultSet rs = pstmt.executeQuery();
Student student;
List<Student> list=new ArrayList<>();
while (rs.next()){
String id2 = rs.getString("id");
String username2 = rs.getString("username");
String password2 = rs.getString("password");
double height2 = rs.getDouble("height");
double weight2 = rs.getDouble("weight");
double grade2 = rs.getDouble("grade");
//封装
student=new Student();
student.setId(id2);
student.setUsername(username2);
student.setPassword(password2);
student.setHeight(height2);
student.setGrade(grade2);
student.setWeight(weight2);
list.add(student);
}
return list;
}
查询数据库数据总数方法,返回一个int
/**
* 查询数据总数
*/
public int getTotalCount() throws SQLException {
//1.连接数据库
DBUtil db=new DBUtil();
Connection connection= db.getConnection();
//2.编写sql,设置value
String sql="select count(*) from stu2";
PreparedStatement pstmt = connection.prepareStatement(sql);
//3.执行sql
ResultSet rs = pstmt.executeQuery();
int num=-1;
while (rs.next()){
num = rs.getInt(1);
}
return num;
}
对四个按钮进行设置
<a href="TableServlet?begin=0">index</a>
<a href="TableServlet?begin=<%=request.getAttribute("last")%>">last</a>
<a href="TableServlet?begin=<%=request.getAttribute("next")%>">next</a>
<a href="TableServlet?begin=<%=request.getAttribute("endPage")%>">end</a>
TableServlet
package servlet;
import Dao.StudentDao;
import entity.Student;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet(name = "TableServlet", value = "/TableServlet")
public class TableServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StudentDao studentDao=new StudentDao();
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//设置为一页显示三条数据
int size=3;
//如果第一次访问servlet,页面在首页,值为0;否则传啥是啥
String cPage = request.getParameter("begin");
if(cPage==null){cPage="0";}
int currentPage= Integer.parseInt(cPage);
//数据总数
try {
int totalAccount=studentDao.getTotalCount();
//页面总数
int totalPage=totalAccount%size+1;
int endPage=totalAccount-1;
//next
int next=currentPage+size;
//last
int last=currentPage-size;
//数据发送去前端
request.setAttribute("currentPage",currentPage);
request.setAttribute("size",size);
request.setAttribute("totalPage",totalPage);
request.setAttribute("endPage",endPage);
request.setAttribute("next",next);
request.setAttribute("last",last);
} catch (SQLException e) {
e.printStackTrace();
}
try {
List<Student> list = studentDao.SelectByPage(currentPage, size);
//向前端传值
request.setAttribute("list",list);
//跳转
request.getRequestDispatcher("StudentTable.jsp").forward(request,response);
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
}
//查找数据库列表信息,跳转向jsp
/* try {
List<Student> list = studentDao.SelectAll();
//向前端传值
request.setAttribute("list",list);
//跳转
request.getRequestDispatcher("StudentTable.jsp").forward(request,response);
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}*/
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}