- PR -

サーブレットを使った検索システムについて

投稿者投稿内容
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-06-29 22:09
お願いです、誰か力を貸して下さい。 今新社会人として研修に取り組んでいて、検索システムを作ってます。発表が明日なのに出来てなくて絶望的です><
内容は、DBに格納されている顧客情報を、検索ページから3つの条件を入れて当てはまる情報を呼び出すというものです。

 ・eclipse ・Tomcat ・postgresql・JDBCも 使ってます。
用意したページは以下の5つで、他web.xmlやコンテキスト記述子の記入はしています。
・search.jsp
・result.jsp
・SupportDAO.java
・Support.java
・DaoSupprtServlet.java

今何に困っているかというと、HTTP500のステータスエラーの原因が分からないのです。「Notfound Beans list within this scope」という風に、ArrayListでlistにしたはずのデータが、スコープの中にないよ。 というものでした。スコープはrequestです。
☆エラー:result.jsp の上部☆
4行目でエラーと表示されます。やはりrequestが・・?

1: <%@ page language="java" contentType="text/html; charset=Windows-31J" %>
2: <%@ page import="java.util.ArrayList" %>
3: <%@ page import="chap11_database.sec01_.Support" %>
4: <jsp:useBean id="list" scope="request" type="java.util.ArrayList<Support>" />
5: <html>
6: <head>
7: <title>検索結果</title>
      ・
      ・
      ・



DAOとサーブレットのプログラムを載せます。



☆SupportDAO.java☆

package chap11_database.sec01_;

import java.sql.Connection;
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 java.util.Properties;

public class SupportDAO {


Connection con = null; //DB接続オブジェクト
Support support = null;
Statement stmt = null;
ResultSet rs = null; //問い合わせ結果オブジェクト


public ArrayList findSupportByreq(String item, String shiki, String text) {

String nonotarou3 = null;
String postgres = null;


/*データベース接続情報*/
String url = "jdbc:postgresql://localhost:5432/support_info";

//データベース上のユーザ名
String user = "postgres";
//データベース上のパスワード
String password = "nonotarou3";




try {

/* ドライバのロード*/
Class.forName("org.postgresql.Driver");
/*接続処理*/
Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/support_info", postgres, nonotarou3);

/*SQL実行*/
String query = "select * from support_info where "+item+" "+shiki+" '%'"+text+"'%'";

// データベースに接続
Statement stmt = con.createStatement();
ResultSet rs= ((Statement) stmt).executeQuery(query);

ArrayList<Support> arrayList = new ArrayList<Support>();

/*結果取り出し TOにセット*/
while (rs.next()) {
String user_id = rs.getString("user_id");
String certificate_num = rs.getString("certificate_num");
String cust_name = rs.getString("cust_name");
String licence = rs.getString("licence");
int users_count = rs.getInt("users_count");
String varsion = rs.getString("varsion");
String distribution = rs.getString("distribution");
String first_date = rs.getString("first_date");
String end_date = rs.getString("end_date");
String comment = rs.getString("comment");

Support support = new Support(user_id, certificate_num, cust_name,
licence, users_count, varsion, distribution, first_date, end_date, comment);

con.close();
stmt.close();
rs.close();

arrayList.add(support);
return arrayList;

}
}catch (SQLException e) {

e.printStackTrace();

}catch (Exception e) {

e.printStackTrace();
}

return null;


}

}

☆DaoSupportServlet.java☆
package chap11_database.sec01_;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import java.io.*;
import java.util.*;
import java.sql.*;


public class DaoSupportServlet extends HttpServlet {

private static final String nextPage = null;
private static final String distribution = null;
private static final String varsion = null;
private static final String end_date = null;
private static final String comment = null;
private static final String user_id = null;
private static final String users_count = null;
private static final String certificate_num = null;
private static final String licence = null;
private static final String first_date = null;
private static final Object support = null;


//リクエストを処理するメソッド
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

public void doPost (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {



//移動先のページ
String nextPage = null;

//検索処理
String item = request.getParameter("item");
String shiki = request.getParameter("shiki");
String text = request.getParameter("text");
if(text != null && shiki != null && item != null) {

try{


//DAOを使って情報を取得
SupportDAO dao = new SupportDAO();
ArrayList<Support> supportList = dao.findSupportByreq (item, shiki,text);


//情報をapplicationスコープにセット
request.setAttribute("list",supportList);

//検索結果表示画面へ
nextPage = "/view/chap11_database/sec01_/result.jsp";

}catch(Exception e) {
//数値以外が入力されたらもとの画面
nextPage = "/view/chap11_database/sec01_/searchForm.jsp";

}
}else{
//パラメータが与えられなければもとのページへ
nextPage = "/view/chap11_database/sec01_/searchForm.jsp";
}

//指定ページにフォワード
ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher(nextPage);
rd.forward(request, response);
}

}


どうもこれらのDAOとサーブレットの書き方にも誤りがあるような気がしてならないので載せました。何卒よろしくお願いいたします!!! どんな小さな情報でも構いません。お返事お待ちしております。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-06-29 23:36
引用:

ぽんたさんの書き込み (2006-06-29 22:09) より:

3: <%@ page import="chap11_database.sec01_.Support" %>
4: <jsp:useBean id="list" scope="request" type="java.util.ArrayList<Support>" />



素直に見る限り。
<Support>って何。

論理的には
<jsp:useBean id="list" scope="request" type="java.util.ArrayList<chap11_database.sec01_.Support>" />
になるかと。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-06-30 00:30
あれ?usebeanのtype属性にgenericsを書けましたっけ?
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-06-30 07:50
書き込み本当にありがとうございます
>加納正和さん
 <Support>とは、TransferObjectクラスのことで、アプリケーションとデータのやり取りのためのクラスです。流れとしてはまずサーブレットがDAOを見に行きます。DAOはDBを検索し、結果を受け取ります。しかしその時、このTransferObjectに結果がセットされアプリケーションとデータベースとのやり取りに使われるようです。

>かつのりさん
genericsとは・・?すみません調べます。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-06-30 09:10
引用:

かつのりさんの書き込み (2006-06-30 00:30) より:
あれ?usebeanのtype属性にgenericsを書けましたっけ?


 type属性に指定できるのは、
「request」、「session」、「page」、「application」です。

 個人的に、新人研修でJ2EEをやるのはお薦めできませんね・・・。
確かに、現場ではJ2SEをやることは希で、J2EEが主流なので、
会社としては、そうせざる終えないんでしょうが。
でもね、受け入れる側としては、至極迷惑ですね。
というか、Javaの開発ならJavaだけで3年以上の経験が無い日本人は、
不要と思ってる今日この頃です。

[ メッセージ編集済み 編集者: taku 編集日時 2006-06-30 09:16 ]
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-06-30 09:23
うう、加納さんのご指示を実践してみたのですが、だめです・・・
Penguin
常連さん
会議室デビュー日: 2006/06/29
投稿数: 34
投稿日時: 2006-06-30 09:36
こんなエラー分かる方いらっしゃいませんか・・?
    ↓

HTTPステータス 500 -

--------------------------------------------------------------------------------

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: Exception in JSP: /view/chap11_database/sec01_/result.jsp:4

1: <%@ page language="java" contentType="text/html; charset=Windows-31J" %>
2: <%@ page import="java.util.ArrayList" %>
3: <%@ page import="chap11_database.sec01_.Support" %>
4: <jsp:useBean id="list" scope="request" type="java.util.ArrayList<chap11_database.sec01_.Support>" />
5: <html>
6: <head>
7: <title>検索結果</title>


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
chap11_database.sec01_.DaoSupportServlet.doPost(DaoSupportServlet.java:78)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因

javax.servlet.ServletException: bean list not found within scope
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.view.chap11_005fdatabase.sec01_005f.result_jsp._jspService(result_jsp.java:122)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
chap11_database.sec01_.DaoSupportServlet.doPost(DaoSupportServlet.java:78)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因

java.lang.InstantiationException: bean list not found within scope
org.apache.jsp.view.chap11_005fdatabase.sec01_005f.result_jsp._jspService(result_jsp.java:51)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
chap11_database.sec01_.DaoSupportServlet.doPost(DaoSupportServlet.java:78)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

未記入
ベテラン
会議室デビュー日: 2005/06/03
投稿数: 50
投稿日時: 2006-06-30 10:28
専門外でしかも新人さんなら結構大変かもしれませんね。

ここに質問投げるよりももう一度、参考書を読み直し記述の仕方に
間違いがないか見直す事をお勧めします。
(その方が勉強になるはず)

スキルアップ/キャリアアップ(JOB@IT)