2017-05-02 51 views
1

動的なWebプロジェクトを作成するのは初めてです。すべてのことが正しく理解されているかどうかはわかりません。サーブレットからJSPファイルにresultSetを渡します。 ArrayList型の属性は常にnullです。

Books(id_book、title、author、isbn、description)という1つのテーブルのみを含むmySQLデータベースからブックをブラウズするための簡単なWebアプリケーションを作成しようとしています。

私はJSPファイルに作成されたリストを渡すことになっているBookSelectサーブレット、、、私はデータベースからデータを取得し、<の.bookをArrayListにするResultSetからそれを変換するために使用ドライバクラスを、>用意しました最終的に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> 
(今私はちょうどラベルでも、1行を表示しようとしています)

Driverクラスのmainメソッドを追加して実行すると、すべてがうまく動作しているようです。データを取得してArrayListに変換し、そのリストから結果を出力することができます。 しかし、サーブレットクラスからアクセスしようとすると、常にnullになります。

エラーメッセージ: This is an error message

奇妙なことは、私は(サーブレットのserviceメソッド内のコードをコメント)サーブレットでリストに何かを追加するとき、それは渡されているということです。 私は今からどのように進めるのか全く分かりません。私は完全に迷っています。助けてください。

************************************解決しようと********* *****************************

問題は、tomcatが適切なドライバを見つけることができなかったことです、私はその奇妙なbeacause私はWEB-INF/libだけでなく、$ CATALINA_HOME/libにも入れました。すべてが正しく設定されています。 - それは:)

ある

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 

私はそれは結局のところ、必要されるべきではないと言われましたが、あなたは何を知っていますかのよう:ちょうど接続を開始する前に次の行を追加して助けたものをとにかく 、


答えて

0

私は、このような本のためのBeanクラスを作成することをお勧めします。あなたのJSPで今

public void doGet(HttpServletRequest request, HttpServletResponse response) 
{ 
request.setAttribute("booklist",booklist); 
//forward the request to jsp using Request Dispatcher 
} 

以下のようにJSPに前方にあなたのサーブレットで今すぐ以下のようにこのリストを

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 

} 

をArrayListにあなたのドライバクラスコンバートのResultSetで今すぐ

Class BookBean{ 
private int bookId; 
private String title; 
//and so on for all the properties 
//add getters and setters 
} 

のことができますJSTL foreach属性を使用して各書籍のデータにアクセスします。

<c:forEach var="blist" items="${booklist}"> 
    <p>${blist.id}</p> 
    <p>${blist.name}</p>   
</c:forEach> 

あなたはどんな疑問

+0

を持っている場合、問題はコード自体のドライバーに関連することが判明し、していないが、私は本当に、あなたの努力に感謝し、あなたの応答移行したピジョンいただきありがとうございます:) 私はしましたコメントをしてください編集した投稿に説明を残した。 – zjemCiChleb

+0

問題はありませんが、データベースを使用してコンセンサスを作成するためにドライバクラスをロードする必要がある場合、DriverManager.registerDriver()を呼び出す必要はなく、class.forName(ドライバクラス)を呼び出してドライバを登録できます。 –

関連する問題