[pgsql-jp: 28236] ServletとPostgreSQLの接続エラー

Takeuchi takeu-al @ tf6.so-net.ne.jp
2002年 12月 10日 (火) 01:21:20 JST


takeuchi と申します。

「ServletとPostgreSQLの接続エラー」について質問させて下さい。

環境は以下の通りです。
OS:Vine Linux 2.5
Webサーバ:Apache1.3.26
サーブレット:Tomcat4.0
JDK:JDK1.4

/usr/local/jakarta-tomcat-4.0.5/webapps/examples/WEB-INF/classes/HelloWorldE
xample.java
は問題なく動きました。よって
tomcat とapacheの連携は問題ないと思われます。
PostgreSQL起動後
http://localhost/examples/servlets/showform2.html
のフォームからBookmark2.java
のサーブレットを呼び出すと以下のようなエラーがでました。

NullPointerExceptionという事で、オブジェクトが空である可能性が
高いです。可能性的には以下の部分が問題であるようですが。

DriverManager.getConnection("jdbc:postgresql://localhost/bookmark");

どうも、データベースへの接続の構文を見てみますと、
DriverManager.getConnection(url,user.pwd);

と書いてあります。私自身、perl のプログラムでPostgreSQLと
接続する際に、パスワードとか設定しなくてもつなげるのですが。
やはりuser ID とpasswordは必要なのでしょうか。

私自身、見落としている点があると思いますので
どなたか気づいた点が御座いましたらご教授お願い致します。

java.lang.NullPointerException
 at Bookmark2.doPost(Bookmark2.java:57)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
 at filters.ExampleFilter.doFilter(ExampleFilter.java:149)
 at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:213)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:243)
......
......
......
--------------Showform2.html-----------------------------
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>
<head>
<meta http-equiv="Content-type" content="text/html"; charset=EUC-JP">

<title>HTLM Form</title>
</head>

<body>
<form name="setform" action="/examples/servlet/Bookmark2"  method="POST">
member ID:<br>
<input type="text" name="memberid" size="20" MAXLENGTH="10"><br>
password :<br>
<input type="password" name="password" size="20" MAXLENGTH="10"><br>
searchkeyword:<br>
<input type="text" name="searchword" size="20" MAXLENGTH="20"><br>
<center>
<input type="submit" value="submit">
</center>
</form>
</body>
</html>
-----------------Bookmark2.java----------------------------
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;

public class Bookmark2 extends HttpServlet {

    Connection con = null;

String html_header = "<!doctype html public \"-//w3c//dtd html 4.0
transitional//en\">\n"
+ "<html>\n<head>\n"
+ "<title>Interest Servlet</title>\n"
+ "</head>\n"
+ "<body>\n";

String html_footer = "</body>\n</html>\n";

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws
ServletException,IOException {

String memberid = req.getParameter("memberid");
String password = req.getParameter("password");

    try {
      // ドライバクラスをロード
      Class.forName("com.postgresql.jdbc.Driver"); // PostgreSQLの場合


      // データベースへ接続
      con =
DriverManager.getConnection("jdbc:postgresql://localhost/bookmark"); //
      }catch ( ClassNotFoundException e) {
   e.printStackTrace();

      } // end of catch
      catch ( SQLException e) {
   e.printStackTrace();

      } // end of catch
resp.setContentType("text/html; charset=EUC-JP");
PrintWriter pw = resp.getWriter();

file://ヘッダーの出力
pw.println(html_header);

String searchword = req.getParameter("searchword");
      System.out.println(searchword);
pw.println("<table>");

      // ステートメントオブジェクトを生成
try {
      Statement stmt = con.createStatement();
      String sql = "SELECT * FROM bookmark4 " + "WHERE keyword = " + "'" +
searchword + "'" + ";";
      System.out.println(sql);

      // クエリーを実行して結果セットを取得
      ResultSet rs = stmt.executeQuery(sql);
      // 検索された行数分ループ
      while(rs.next()){
        // directoryを取得
        String directory = rs.getString("directory");
        // URLを取得
        String url = rs.getString("URL");
        // キーワードを取得
        String keyword = rs.getString("keyword");

        // 表示
        pw.println("<tr>");
        pw.println("<td>" + directory + "</td>");
        pw.println("<td>" + url + "</td>");
        pw.println("<td>" + keyword + "</td>");

        pw.println("</tr>");
      }
      // データベースから切断
      stmt.close();
      con.close();







pgsql-jp メーリングリストの案内