Java 无法使用servlet将数据从mysql传递到jsp/html表
我试图在eclipse中使用Tomcat8服务器创建Java web应用程序。 我已经创建了servlet,它将请求转发到jsp页面,并使用来自两个表的数据初始化页面内的表。我一直在网上关注几个关于如何用MySQL数据库中的代码填充html表的例子,但是失败了。我使用MainServlet的doGet方法将本地数据库中的数据获取到列表中,并将其设置为请求中的属性。但当我启动servlet时,jsp表中并没有记录。Servlet连接到db并从中接收记录,我已经调试了这个应用程序。那么我的代码有什么问题?我不熟悉html和css、servlet和jsp技术。也许问题在于我使用的css框架是物化css。 以下是我的MainServlet.java代码:Java 无法使用servlet将数据从mysql传递到jsp/html表,java,jsp,servlets,jakarta-ee,Java,Jsp,Servlets,Jakarta Ee,我试图在eclipse中使用Tomcat8服务器创建Java web应用程序。 我已经创建了servlet,它将请求转发到jsp页面,并使用来自两个表的数据初始化页面内的表。我一直在网上关注几个关于如何用MySQL数据库中的代码填充html表的例子,但是失败了。我使用MainServlet的doGet方法将本地数据库中的数据获取到列表中,并将其设置为请求中的属性。但当我启动servlet时,jsp表中并没有记录。Servlet连接到db并从中接收记录,我已经调试了这个应用程序。那么我的代码有什么
package redirect;
import java.io.IOException;
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;
import java.sql.Connection;
import util.Book;
@WebServlet(name="Libbook",urlPatterns={"/libbook"})
public class MainServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private static String url = "jdbc:mysql://localhost:3306/Test";
private static String user = "user",password = "password";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List<Book> books = new ArrayList<>();
Connection connection = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(url,user,password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(
"SELECT IDBook,Title,AddDate,ISBN,Name,Sirname "
+ "FROM Book INNER JOIN Author "
+ "ON Book.IDAuthor = Author.IDAuthor;");
while (resultSet.next())
{
Book b = new Book();
b.setId(resultSet.getInt(1));
b.setTitle(resultSet.getString(2));
b.setIsbn(resultSet.getLong(4));
b.setDate(resultSet.getDate(3).toString());
b.setName(resultSet.getString(5));
b.setSirname(resultSet.getString(6));
books.add(b);
}
}
catch (SQLException | ClassNotFoundException e)
{
e.printStackTrace();
}
finally {
try {if(connection != null)connection.close();}catch (SQLException e) {e.printStackTrace();}
}
request.setAttribute("books", books);
request.getRequestDispatcher("pages/libbook.jsp").forward(request, response);
}
}
Java在bean类中寻找getter方法来读取数据。 正如您所看到的,bean类书getter方法名称类似于getISBN、getTitle、getAName等。您应该使用类似于jsp的代码
<td><c:out value="${book.iSBN}"/></td>
<td><c:out value="${book.title}"/></td>
<td><c:out value="${book.aName}"/></td>
找到了解决办法。问题出在jsp文件中,我没有包括与c标记scriplet相关的导入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
并且没有将jstl-1.2.jar库添加到我的项目中发布Book类的代码。JavaBean属性以小写字母开头。如果您有一个getter getTitle,JSP中的代码应该是${book.title}。我稍微重建了代码生成的book类JavaBean类,但它仍然没有帮助我
<td><c:out value="${book.iSBN}"/></td>
<td><c:out value="${book.title}"/></td>
<td><c:out value="${book.aName}"/></td>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>