Javaプログラミングから離れて年月が経ってしまったそんな時、
急遽、Java演習の依頼を受けてしまいました。
下記のソースコードはブラウザのパラメータを受け取り、
その値をDB(MySQL)上で検索して画面上に表示する簡単なJavaサーブレットです。
【action.java】
=========================================================================
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class action extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Action!</title></head><body>");
out.println("<h1>Profuct name is " + getValue(request) + " </h1>" );
out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" );
out.println("<p><a href=\"./form.html\">Return to input form</a>");
out.println("</body></html>");
out.close();
}
private String getValue( HttpServletRequest request ) {
String values = request.getParameter( "name" ); // ブラウザから送られた値を受け取る
if( values != null ) {
return( values );
}
return( "error occured!" );
}
// Access sample_db and returns price
private int get_price( String values2, PrintWriter out ) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
values2 = getValue(request);
int price = 0;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/sample_db", // url form of db
"admin", // user name
"******" // password
);
stmt = conn.createStatement();
rs = stmt.executeQuery( "SELECT price FROM product WHERE name = '" + values2 +"'" );
rs.first();
price = rs.getInt( "price" ); // get the value of the first column
} catch ( SQLException ex ) {
out.println( "SQLException: " + ex.getMessage() + "<br>" );
out.println( "SQLState: " + ex.getSQLState() + "<br>");
out.println( "VendorError: " + ex.getErrorCode() + "<br>");
}
finally {
if( rs != null ) {
try { rs.close(); } catch (SQLException ex) {}
rs = null;
}
if( stmt != null ) {
try { stmt.close(); } catch (SQLException ex) {}
rs = null;
}
}
return( price );
}
}
=========================================================================
上記ソースコードをコンパイル(javac)しても
以下のエラーが発生してしまいます。
【エラーメッセージ】
=========================================================================
action.java:25: エラー: シンボルを見つけられません
out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" );
^
シンボル: 変数 values2
場所: クラス action
action.java:44: エラー: シンボルを見つけられません
values2 = getValue(request);
^
シンボル: 変数 request
場所: クラス action
エラー2個
=========================================================================
何度も修正するも自身では解決に至りませんでしたので
皆様のお力をお借りしたく投稿致しました。
ご確認の程、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
2 箇所のエラーはどちらも「シンボル: 変数」の所に書いてある変数がエラーの発生している文のある場所では定義されていないのが理由です。
最初の方はメソッドのその文の直前までである
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Action!</title></head><body>");
out.println("<h1>Profuct name is " + getValue(request) + " </h1>" );
で values2 が定義されていません。
2 番目の方はメソッドのその文の直前までである
private int get_price( String values2, PrintWriter out ) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
で request が定義されていません。
No.1 様の回答でも正常に動作しますが、get_price() の引数を変更したくないならば、
out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" );
を
out.println("<h1>Price of " + getValue(request) + " is " + get_price( getValue(request), out ) + " </h1>" );
にして、get_price() 内のほうのエラーが出ている行を削除してください。
なお、上記で言っている意味が分からないようであれば、まず変数のスコープについて復習してください。
hitomura様
ご返信ありがとうございます。
最初に投稿したJavaソースコードが若干誤っておりましたが、
ご指摘のとおり、主メソッド(service)にて変数を定義しておりませんでした。。
そこで改めて、今回の実装したい処理の流れをご説明させて頂きます。
下記に処理フローをご提示致しました。
ご確認願います。
1)
HTMLファイル:form.htmlにてフォーム欄に入力された値を
メソッド:getValueにて取得する
2)
取得した値:valuesをDB検索するメソッド:get_priceにて渡す
3)
受け渡された値:values2をDBでキーワード検索して一致した値の
price値:priceを引数として返す
4)
HTMLファイル:form.htmlの検索ボタン押下すると
次の画面にて「検索した値は【price値】です」と表示する
上記内容がそもそも実装したい一連のプログラムとなります。
その場合に最終的に表示させるメソッド:serviceへprice値を表示するには
以下の出力命令文では実装不可であることは認識しております。
out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" );
ここをどのように指定すればよいのか不明でございます。
上記内容をご理解頂きまして
ご指導の程、宜しくお願い致します。
以上
No.3
- 回答日時:
serviceメソッドには values2変数の宣言がないし
get_priceメソッドにはrequest変数の宣言がありません。
エラーメッセージの通りです。
しかし、エラーメッセージからソースを見れば
普通は充分分かる話だと思います。
どのようにエラーメッセージが理解出来ないでしょう?
No.1
- 回答日時:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class action extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Action!</title></head><body>");
out.println("<h1>Profuct name is " + getValue(request) + " </h1>" );
out.println("<h1>Price of " + getValue(request) + " is " + get_price( request, out ) + " </h1>" );
out.println("<p><a href=\"./form.html\">Return to input form</a>");
out.println("</body></html>");
out.close();
}
private String getValue( HttpServletRequest request ) {
String values = request.getParameter( "name" ); // ブラウザから送られた値を受け取る
if( values != null ) {
return( values );
}
return( "error occured!" );
}
// Access sample_db and returns price
private int get_price( HttpServletRequest request, PrintWriter out ) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String values2 = getValue(request);
int price = 0;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/sample_db", // url form of db
"admin", // user name
"******" // password
);
stmt = conn.createStatement();
rs = stmt.executeQuery( "SELECT price FROM product WHERE name = '" + values2 +"'" );
rs.first();
price = rs.getInt( "price" ); // get the value of the first column
} catch ( SQLException ex ) {
out.println( "SQLException: " + ex.getMessage() + "<br>" );
out.println( "SQLState: " + ex.getSQLState() + "<br>");
out.println( "VendorError: " + ex.getErrorCode() + "<br>");
}
finally {
if( rs != null ) {
try { rs.close(); } catch (SQLException ex) {}
rs = null;
}
if( stmt != null ) {
try { stmt.close(); } catch (SQLException ex) {}
rs = null;
}
}
return( price );
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
csv出力について
-
九九を横に表示する。
-
InputStream.read()でタイムア...
-
Javaの質問です。テキストファ...
-
テキストファイルから空白行をよむ
-
java連結
-
Javaの質問です。テキストファ...
-
テキストファイルをリソースか...
-
ファイルよりの文字列の取り込...
-
javaのファイル読み込み時の文...
-
javaのfor文が機能してないみた...
-
Java int sum = 0は必要ですか?
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
Java 入力した整数値の合計を、...
-
ORA-01858: 数値を指定する箇所...
-
実数からの小数部の取得
-
テキストボックスに入力された...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルから空白行をよむ
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
yyyymmddからyyyy/mm/d...
-
[JAVA]エラーが解決できません。
-
InputStream.read()でタイムア...
-
Inputstreamについて
-
テキストファイルにおいて任意...
-
Javaの質問です。テキストファ...
-
Java int sum = 0は必要ですか?
-
Java 読み込んだテキストファイ...
-
javaからffmpegの利用
-
java連結
-
javaでCSVの中身から最大値を表...
-
javaのfor文が機能してないみた...
-
Javaでデータに登録する度にID...
-
「javaに関して」エラーが解決...
-
プログラムのコードとLIBSVM形式
-
以下のJAVAプログラムでご質問...
おすすめ情報