你刚才回答的这个项目的Servlet怎么写
时间: 2024-03-26 13:39:21 浏览: 23
好的,这里是一个简单的 Servlet 实现表的分页功能的示例代码:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/pagination")
public class PaginationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String jdbcUrl = "jdbc:mysql://localhost:3306/mydb";
private String jdbcUsername = "root";
private String jdbcPassword = "password";
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int page = 1;
int recordsPerPage = 10;
if (request.getParameter("page") != null) {
page = Integer.parseInt(request.getParameter("page"));
}
List<YourBean> dataList = getDataList((page - 1) * recordsPerPage, recordsPerPage);
int totalRecords = getTotalRecords();
int totalPages = (totalRecords + recordsPerPage - 1) / recordsPerPage;
String pageNav = getPageNav(page, totalPages);
request.setAttribute("dataList", dataList);
request.setAttribute("totalRecords", totalRecords);
request.setAttribute("totalPages", totalPages);
request.setAttribute("pageNav", pageNav);
request.setAttribute("currentPage", page);
request.getRequestDispatcher("your_jsp.jsp").forward(request, response);
}
private Connection getConnection() throws SQLException {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
private List<YourBean> getDataList(int offset, int limit) {
String sql = "SELECT * FROM your_table LIMIT " + offset + "," + limit;
List<YourBean> dataList = new ArrayList<>();
try (Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
YourBean bean = new YourBean();
// 设置 bean 属性值
dataList.add(bean);
}
} catch (SQLException e) {
e.printStackTrace();
}
return dataList;
}
private int getTotalRecords() {
String sql = "SELECT COUNT(*) FROM your_table";
int totalRecords = 0;
try (Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
totalRecords = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return totalRecords;
}
private String getPageNav(int currentPage, int totalPages) {
StringBuilder sb = new StringBuilder();
sb.append("共 " + getTotalRecords() + " 条记录,每页 " + recordsPerPage + " 条,共 " + totalPages + " 页,当前第 " + currentPage + " 页 ");
sb.append("<a href=\"?page=1\">首页</a> ");
if (currentPage > 1) {
sb.append("<a href=\"?page=" + (currentPage - 1) + "\">上一页</a> ");
}
if (currentPage < totalPages) {
sb.append("<a href=\"?page=" + (currentPage + 1) + "\">下一页</a> ");
}
sb.append("<a href=\"?page=" + totalPages + "\">尾页</a>");
return sb.toString();
}
}
```
这个 Servlet 中,我们定义了一个 JDBC 连接和一些 SQL 查询语句,用于从数据库中取得数据。在 doGet() 方法中,我们获取了当前页数和每页显示记录数,通过 getDataList() 方法获取指定页的数据,通过 getTotalRecords() 方法获取总记录数,通过 getPageNav() 方法生成分页导航栏,最后将这些数据保存到 request 中并转发到 JSP 页面。在 JSP 页面中,我们可以通过 JSTL 标签库将数据展示出来。