2017-05-13 26 views
0

Eclipseでtomcat 8サーバーを使用してJava Webアプリケーションを作成しようとしています。 jspページへのリクエストを転送し、このページ内のテーブルを2つのテーブルのデータで初期化するサーブレットを作成しました。私は、MySQLデータベースからのrecoredsでhtmlテーブルを埋める方法についてインターネット上のいくつかの例に従ってきましたが、失敗しました。 MainServletのdoGetメソッドを使用して、ローカルデータベースからリストにデータを取得し、リクエストとして属性として設定します。しかし、私がサーブレットを起動しているときは、jspテーブルにはレコードがありません。サーブレットはdbに接続し、そこからレコードを受信します(私はすでにアプリケーションをデバッグしています)。だから私のコードで何が間違っていますか?私はhtmlとcss、servletとJSP技術には新しいです。たぶん問題は、私は(マテリアライズCSS)を使用しているCSSのフレームワークです。ここ は私MainServlet.javaコードです:サーブレットを使用してmysqlからjsp/htmlテーブルにデータを渡すことができません

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); 
    } 

} 

libbook.jspページ:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset=UTF-8"/> 
<title>LibBook</title> 
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/css/materialize.min.css" rel="stylesheet"> 
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
<style type="text/css"> 
    .logo{ 
      color: #444; 
      text-transform: uppercase; 
      letter-spacing: 0.3em; 
      font-size: 2em; 
     } 
    .logo img{ 
     width: 5%; 
     margin: 0.5%; 
     vertical-align: middle; 
     margin-right: 0.5em; 
    } 
</style> 
</head> 
<body> 

    <nav class="white"> 
     <div class="navbar-wrapper container"> 
      <a id="logo-container" href="#" class="logo"> 
       LIBBOOK 
       <img src="assets/book.svg" alt="LibBooklogo"> 
      </a> 
      <ul class="right"> 
       <li><a class="waves-effect waves-light btn" href="pages/new_author.jsp"><i class="material-icons left">perm_identity</i>NEW AUTHOR</a></li> 
       <li><a class="waves-effect waves-light btn" href="pages/new_book.jsp"><i class="material-icons left">class</i>NEW BOOK</a></li> 
      </ul> 
     </div> 
    </nav> 
    <div class="container"> 
     <div class="row"> 
      <div class="card-panel"> 
       <form action="test"> 
        <div class="input-field"> 
         <input placeholder="Type here (title,author) and press enter.." id="search_bar" type="text"> 
         <label for="search_bar">Search</label> 
        </div> 
       </form> 
      </div> 
     </div> 

     <div class="row"> 
      <div class="card-panel"> 
       <table> 
        <thead> 
         <tr> 
          <th>ISBN</th> 
          <th>Title</th> 
          <th>Author</th> 
          <th>Info/Edit</th> 
          <th>Remove</th> 
         </tr> 
        </thead> 
        <c:forEach var="book" items="${books}"> 
          <tr> 
          <td><c:out value="${book.isbn}"/></td> 
          <td><c:out value="${book.title}"/></td> 
          <td><c:out value="${book.name}"/></td> 
          <td> 
           <a href=""><i class="material-icons">mode_edit</i></a> 
          </td> 
          <td> 
           <a href=""><i class="material-icons">delete</i></a> 
          </td> 
          </tr> 
        </c:forEach> 
       </table> 
      </div> 
     </div> 

    </div> 

    <script 
     src="https://code.jquery.com/jquery-3.2.1.min.js" 
     integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
     crossorigin="anonymous"> 
     </script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/js/materialize.min.js"></script> 
</body> 
</html> 

Bookクラス:

package util; 

import java.io.Serializable; 

public class Book implements Serializable 
{ 
    private Integer id; 
    private String title; 
    private String date; 
    private Long isbn; 
    private String name; 
    private String sirname; 

    public Book(){ 

    } 

    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public String getDate() { 
     return date; 
    } 
    public void setDate(String date) { 
     this.date = date; 
    } 
    public Long getIsbn() { 
     return isbn; 
    } 
    public void setIsbn(Long isbn) { 
     this.isbn = isbn; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getSirname() { 
     return sirname; 
    } 
    public void setSirname(String sirname) { 
     this.sirname = sirname; 
    } 


} 
+0

ポストBookクラスのコードにJSTL-1.2.jarライブラリを追加しませんでした。問題は、私は、cタグのスクリプトレットに関連する輸入品が含まれていなかった、JSPファイルにありました。 Java Beanのプロパティは小文字で始まります。ゲッター 'getTitle()'がある場合、JSPのコードは '$ {book.title}'でなければなりません。 –

答えて

0

見つかりソリューションのようにJSPのコードを使用する必要があります。

<%@ 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" %> 

をそして、私のプロジェクト

-1

Javaが読むことをBeanクラスにgetterメソッドを探しますデータ。あなたBeanクラス(書籍)ゲッターメソッド名として は(getISBNのようなもの)、あるgetTitle()、getAName()などあなたは

<td><c:out value="${book.iSBN}"/></td> 
<td><c:out value="${book.title}"/></td> 
<td><c:out value="${book.aName}"/></td> 
+0

私はコード(BookクラスのJavaBeanクラスを作った)を少し再構築しましたが、それでも私は役に立たなかった – xbound

関連する問題