将resultSet从servlet传递到JSP文件。 ArrayList类型的属性始终为null

时间:2017-05-02 21:11:13

标签: java mysql jsp servlets arraylist

我是创建动态网络项目的新手,我不确定我是否正确掌握了整个事情的想法。

我正在尝试创建一个简单的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 ());

据我所知,这不应该是必要的,但你知道什么,事实证明 - 它是:)

1 个答案:

答案 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>

如果您有任何疑问,请发表评论