我是创建动态网络项目的新手,我不确定我是否正确掌握了整个事情的想法。
我正在尝试创建一个简单的Web应用程序,用于浏览mySQL数据库中的书籍,该数据库只包含一个表:Books(id_book,title,author,isbn,description)。
我已准备好驱动程序类,我用它从数据库中检索数据并将其从ResultSet转换为ArrayList< .Book>, BookSelect servlet,其中应该将创建的列表传递给JSP文件,最后 bookselectJSP 文件,我希望在网站上显示结果。
驱动程序:
public class Driver {
private ResultSet resultSet;
public ArrayList<Book> resultList;
private Connection myCon;
private Statement myStatement;
public Driver() {
try {
this.resultList = new ArrayList<Book>();
myCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstbase","root","myPassword");
myStatement = myCon.createStatement();
resultSet = myStatement.executeQuery("select * from books");
while(resultSet.next()){
resultList.add(new Book(Integer.parseInt(resultSet.getString(1)),resultSet.getString(2),resultSet.getString(3),resultSet.getString(4),resultSet.getString(5)));
}
resultSet.close();
myStatement.close();
myCon.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public ArrayList<Book> getResultList(){
resultList.forEach(e -> System.out.println("here->" + e + "<-" ));
return resultList;
}
public ResultSet getResultSet(){
return this.resultSet;
}
BookSelect
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher rd = getServletContext().getRequestDispatcher("/bookselectJSP.jsp");
Driver myDriver = new Driver();
//myDriver.getResultList().add(new Book(1, "aa", "aa", "aa", "aa"));
request.setAttribute("resultList", myDriver.getResultList());
rd.forward(request, response);
}
bookselectJSP:(现在我只想显示带标签的一行)
<h1 id="titleBar">List of your books</h1>
<%
ArrayList<Book> rows = (ArrayList<Book>) request.getAttribute("resultList");
%>
<label><%=rows.get(0).toString()%></label>
整个问题是当我在Driver类中添加main方法并运行它时,一切似乎都运行得非常好。我获取数据,将其转换为ArrayList,然后我就可以打印该列表中的结果。 但是一旦我尝试从servlet类访问它,它总是为空。
错误讯息: This is an error message
奇怪的是,当我在servlet中添加一些内容(servlet服务方法中的注释代码)时,它正在被传递。 我完全不知道从现在开始如何继续,我完全迷失了,请帮助。
************************************解决********** ****************************
问题是tomcat无法找到合适的驱动程序,我认为这很奇怪因为我不仅把它放在WEB-INF / lib中,而且放在$ CATALINA_HOME / lib中,everythig配置正确。 无论如何,有助于在开始连接之前添加以下行:
DriverManager.registerDriver(new com.mysql.jdbc.Driver ());
据我所知,这不应该是必要的,但你知道什么,事实证明 - 它是:)
答案 0 :(得分:0)
我建议你为Book这样创建一个bean类。
Class BookBean{
private int bookId;
private String title;
//and so on for all the properties
//add getters and setters
}
现在在您的Driver类中将ResultSet转换为ArrayList,如下所示
ResultSet re=daoclass.getdata();//used to get result set from DB
List<BookBean> booklist=new ArrayList<BookBean>
while(re.next()){
int id=re.getInt("book_id");
String name=re.getString("name");
//extract all the parameters as above
BookBean bb=new BookBean();
bb.setId(id);
bb.setName(name);
//assign all the parameters to the bean
booklist.add(bb);//adding bean to the list
}
现在,您的Servlet将此列表转发给jsp,如下所示
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
request.setAttribute("booklist",booklist);
//forward the request to jsp using Request Dispatcher
}
现在在JSP中,您可以使用JSTL foreach属性访问每本书的数据,如下所示
<c:forEach var="blist" items="${booklist}">
<p>${blist.id}</p>
<p>${blist.name}</p>
</c:forEach>
如果您有任何疑问,请发表评论