如果我在前端网页有一个按钮,点击后,需要访问数据库中的数据,跳转网页,并生成网页内容,这在jsp和servlet里应该怎么编写
时间: 2023-09-06 15:09:36 浏览: 230
在JSP中,你可以使用JSTL(JSP标准标记库)和EL(表达式语言)来访问数据库和生成网页内容。
以下是一个简单的示例代码,它显示了如何从数据库中检索数据并将其显示在JSP页面上:
```jsp
<%@ page import="java.sql.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>My JSP Page</title>
</head>
<body>
<h1>My JSP Page</h1>
<c:set var="dbUrl" value="jdbc:mysql://localhost:3306/mydatabase"/>
<c:set var="dbUser" value="myusername"/>
<c:set var="dbPassword" value="mypassword"/>
<c:if test="${not empty param.id}">
<c:set var="id" value="${param.id}"/>
<c:choose>
<c:when test="${not empty id}">
<%
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
stmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");
stmt.setInt(1, Integer.parseInt(id));
rs = stmt.executeQuery();
if (rs.next()) {
String name = rs.getString("name");
String description = rs.getString("description");
%>
<h2><%= name %></h2>
<p><%= description %></p>
<%
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
</c:when>
<c:otherwise>
<p>No id specified.</p>
</c:otherwise>
</c:choose>
</c:if>
<p><a href="?id=1">Show item 1</a></p>
<p><a href="?id=2">Show item 2</a></p>
</body>
</html>
```
在这个例子中,我们使用JSTL的`<c:set>`标签设置数据库连接信息,然后检查URL参数中是否有一个名为“id”的参数。如果有,我们将其存储在一个JSP变量中,并使用JDBC连接到数据库并执行一个SELECT查询。如果查询返回一条记录,我们将记录的名称和描述输出到页面上。
在Servlet中,你可以使用Java JDBC API来访问数据库,并使用JSP来生成网页内容。以下是一个简单的示例代码,它演示了如何从数据库中检索数据并将其传递给JSP页面:
```java
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
private Connection conn = null;
public void init() throws ServletException {
String dbUrl = "jdbc:mysql://localhost:3306/mydatabase";
String dbUser = "myusername";
String dbPassword = "mypassword";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
} catch (Exception e) {
throw new ServletException("Error initializing servlet", e);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String idParam = request.getParameter("id");
int id = (idParam != null) ? Integer.parseInt(idParam) : 0;
try {
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
String name = rs.getString("name");
String description = rs.getString("description");
request.setAttribute("name", name);
request.setAttribute("description", description);
}
rs.close();
stmt.close();
} catch (SQLException e) {
throw new ServletException("Error executing SQL query", e);
}
RequestDispatcher dispatcher = request.getRequestDispatcher("/myjsp.jsp");
dispatcher.forward(request, response);
}
public void destroy() {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,我们在Servlet的`init()`方法中建立JDBC连接,并在`doGet()`方法中检查URL参数中是否有一个名为“id”的参数。如果有,我们将其存储在一个变量中,并使用JDBC连接到数据库并执行一个SELECT查询。如果查询返回一条记录,我们将记录的名称和描述存储在请求属性中,并将请求分派给JSP页面。
在JSP页面中,我们可以使用EL表达式`${name}`和`${description}`来输出记录的名称和描述。例如:
```jsp
<html>
<head>
<title>My JSP Page</title>
</head>
<body>
<h1>My JSP Page</h1>
<c:if test="${not empty name}">
<h2>${name}</h2>
<p>${description}</p>
</c:if>
<p><a href="?id=1">Show item 1</a></p>
<p><a href="?id=2">Show item 2</a></p>
</body>
</html>
```
这个例子中,我们使用JSTL的`<c:if>`标签来检查请求属性中是否有一个名为“name”的属性。如果有,我们输出名称和描述。否则,我们不输出任何内容。
阅读全文