ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

久しぶりにJAVAをいじり始めたのですが、早速かべにぶつかってしまいました。

あるサイトの問合せフォームは必須項目を入力し、確認ボタンを押すと
確認画面になり、送信を押すと確定されます。(いづれもpostでパラメータが連携される。)
このときにサーブレットからパラメータ値を確認画面のURLに連携し、さらに送信ボタンを押させるところも
パラメータ値を連携することで対応させたいです。

たまたま画面イメージとしては
https://www.janpara.co.jp/buy/assessment/
の画面のようなものを想定しております。(実際は違う画面ですが、似たものを探してきました。)
必須項目入力後、確認画面に遷移し、登録ボタンを押すことで確定する。


以下のソースを参考にしたのですが、うまくいきません。
http://www.atmarkit.co.jp/fjava/javatips/069java …

どのように
http://www.atmarkit.co.jp/fjava/javatips/069java …
のソースに手を加えればよいのでしょうか?
おおざっぱにでも構いませんので、ご教授下さい。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

このサンプルはサーバーから指定したURLへデータをPOSTしているだけなので、質問者さんの意図したような。



入力画面に入力したデータをサーバー側で受け取るようなことはできません。(POSTしてその内容を標準出力しただけでプログラムが終了している)

もし、質問者さんがやりたいようなことをするのであればAPサーバー上にjavax.servlet.http.HttpServletクラスを継承したクラスを作成し、doPostメソッド内で入力画面からのデータを受け取り、確認画面に画面遷移(同時に受け取ったデータを送信)といったことをする必要があります。

サーブレットについて基本的なことが理解されていないように思えます。

参考サイト
http://www.javadrive.jp/servlet/index.html

この回答への補足

質問内容がよくなかったようです。

>入力画面に入力したデータをサーバー側で受け取るようなことはできません。
この部分についてはすでにプログラムを作成し、問題なく動作することを確認しております。

>このサンプルはサーバーから指定したURLへデータをPOSTしているだけ
この部分で指定したURLへデータがうまくPOST連携されず困っておりました。

非常に分かり辛い質問のお相手をして頂き、ありがとうございました。
質問のしかたを考え直します。

補足日時:2009/05/25 23:50
    • good
    • 0

http://www.atmarkit.co.jp/fjava/javatips/069java …
のソースはJavaからGET、POSTを行うサンプルです。

画面の作成等を行うには
http://www.javaroad.jp/servletjsp/sj_servlet1.htm
http://www.javaroad.jp/servletjsp/sj_jsp1.htm
を参考にしてください。

この回答への補足

回答ありがとうございます。
まさにJavaからPOSTを行おうとしています。
詳細は下の方の質問で補足説明しています。
よろしくお願いいたします。

補足日時:2009/05/22 21:45
    • good
    • 0

どのあたりが「うまくいきません」なのでしょうか?



1.サンプルが実行できない。
2.サンプルは実行できたが、サンプルを元に自作したプログラムの実行結果が正しくない。
3.それ以外

この回答への補足

2番です。説明不足で失礼いたしました。試しに
https://www.janpara.co.jp/buy/assessment/
のサイトの必須項目(メーカー名、商品名、状態、詳細、名前、電話番号)をjavaからpost送信し、
結果として確認画面を受信できるようにしたいです。
以下のように修正してみましたが、確認画面でなく、もとの入力画面を結果として受け取っています。

import (省略)

public class WWWGet {
public static void getWWW() {

String urlString = "https://www.janpara.co.jp/buy/assessment/confirm … //アドレスを変更しています
try {
URL url = new URL(urlString);
URLConnection uc = url.openConnection();
uc.setDoOutput(true);//POST可能にする

uc.setRequestProperty("User-Agent", "@IT java-tips URLConnection");// ヘッダを設定。どう設定していいのか分からないので元のまま
uc.setRequestProperty("Accept-Language", "ja");// ヘッダを設定
OutputStream os = uc.getOutputStream();//POST用のOutputStreamを取得

String postStr = "REQUEST=confirm&INP_MKRNAME[1]=1&INP_ITMNAME[1]=2&INP_CONDITION[1]=0&NAME=a&TEL=08012345678&SHPCODE=1";//POSTするデータ 必須項目の設定 入力画面のform部分のソースから拾いました。[]のところは怪しい…
PrintStream ps = new PrintStream(os);
ps.print(postStr);//データをPOSTする
ps.close();

InputStream is = uc.getInputStream();//POSTした結果を取得
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));//文字コード変換しています。
String s;
while ((s = reader.readLine()) != null) {
System.out.println(s);
}
reader.close();
} catch (MalformedURLException e) {
System.err.println("Invalid URL format: " + urlString);
System.exit(-1);
} catch (IOException e) {
System.err.println("Can't connect to " + urlString);
System.exit(-1);
}
}
}

きっと初歩的な間違いだと思いますが、よろしければご教授下さい。

補足日時:2009/05/22 21:44
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QサーブレットからパラメータをPOST形式で送信するには。

現在JavaでWEBアプリケーションを開発しています。

技術的な事で、皆様にご質問がございます。

サーブレットから、他のWEBアプリケーションのサイトへ
POST形式でパラメータを送信するには、どうすれば
良いのでしょうか?
GET形式で送信するなら、
response.sendRedirect("http:aaa.com?key1=aaa&key2=bbb")
ってな具合で、URLの後ろに送信したいパラメータを
つければ、GET形式で送信できますが、
POST形式で送る事はできないのでしょうか?

どなたか、ご存知の方がおられましたら、
ご教授よろしくお願い致します。

Aベストアンサー

いんちき方法になってしまいますが、
HTMLもしくはJSPを作ってしまって
スクリプトかなにかで自動で画面遷移するというのはだめでしょうか?
この場合渡したいパラメータはhiddenで持たせたりすればよいとおもいますが。

QServletからHTMLページへの遷移について

初めまして。

JDK:1.5.0_10
Apache Tomcat:/5.5.15
の環境で、Java Servletを組んでいます。

実現したい処理があるのですが、いろいろ調べても見つからないので質問させて頂きます。

1.クライアントがボタンを押す(.htmlのページ)
2.1から命令を受け取ってサーブレットが処理する
3.1のページを更新して再表示してあげる
というようなものです。

わからないのが、3の サーブレットからHTMLへページ遷移する方法です。

すみませんが、何か方法があったら教えて下さい。

Aベストアンサー

処理が終わった後にサーブレットのページを表示させずに、パッと元のHTMLに戻るということですよね?
でしたら、
response.sendRedirect("XXX.html");←これをサーブレットの最後に入れればhtmlに遷移します。
responseですが、HttpServletResponseクラスの名前が、resとかならば
res.sendRedirect("XXX.html");という感じになります。

■サンプルページ
Java 入門 | Servlet/JSP/Java Bean | リダイレクト:http://www.nextindex.net/java/servlet/sendRedirect.html
リダイレクト(redirect) - サーブレット間の連携 - サーブレット入門:http://www.javadrive.jp/servlet/dispatch/index4.html

QServletからServletへの値渡し

最近、A-ServletからB-Servletへの遷移は

response.sendRedirect("B-Servlet");

で可能だと教えて頂きました。

ですがもうひとつわからないことがあります。
このときに、B-Servletへ変数を渡したいのですがやり方がわかりません。
わかる方教えてください><

Aベストアンサー

こんにちは。world99です。 sin-da4のご認識の通りでした。
 doGet()で呼び出されたサーブレットから次のサーブレットに遷移する時は、doGet()が実行されます。同じように、doPost()で呼び出されたサーブレットは、doPost()で次のサーブレットを呼び出します。
 実は、私が試したサンプルは、doGet()とdoPost()のどちらが呼び出されても、doProcess()というメソッドを実行するように、実装しています。文章を短くするための、それを端折っていました。という訳で、この事に気がつきませんでした。
 教えているつもりだった私が逆に、教えて頂きましたねありがとうございます。orz
 あるServletから別のServeltに遷移する時に、値を引き渡すという本題の質問は、これで解決ですね♪

QサーバーAからサーバーBへPOSTする方法

お世話になっております。
WEBアプリケーションを作成しているのですが、
問題が解消されずに困っております。
どなたかわかる方、ご教授いただけないでしょうか。

【質問】
サーバーAからサーバーBへデータをPOSTする方法を教えてください。

【詳細】
現在サーバーAのサーブレットより、サーバーBのサーブレットへデータをPOSTで渡そうとしています。
そして、サーバーBのサーブレットが持つdoPostメソッドにて、渡したデータ処理を実施したいです。
forwardとsendRedirectを考えたのですが、
forwardだと他サーバーへデータを渡すことができないようです。
また、sendRedirectだとdoGetメソッドが実行されるため、おそらくGetが行われていると考えられます。
現在、Javaだけでコーディングを実施しているため、Javaでの実現方法を教えていただけると非常に助かります。

大変困っておりますので、わかる方はぜひご教授ください。

Aベストアンサー

方法は幾つかありますが、以前HttpURLConnectionを使った方法を。

--- サーバーAのサーブレット ---
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletA extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 下のURL部分はサーバーBのサーブレットを指定します
URL url = new URL( "http://192.168.0.100/hoge/HogeServlet" );
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod( "POST" );
con.setRequestProperty( "Accept-Language", "ja" );
con.setDoOutput( true );

PrintWriter pw;
pw = new PrintWriter( con.getOutputStream() );
pw.print( "para1=ABC&para2=123" ); // 複数パラメータは「&」で区切って送ります
pw.close();

// 一応、受信するフリをしないとダメっす
BufferedReader br = new BufferedReader( new InputStreamReader( con.getInputStream() ) );
br.close();

con.disconnect();
}
}


--- サーバーBのサーブレット ---
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str1 = request.getParameter( "para1" );
String str2 = request.getParameter( "para2" );
System.out.println( str1 );
System.out.println( str2 );
// 一応、レスポンスするフリをしないとダメっす
PrintWriter pw = response.getWriter();
pw.close();
}
}


あとはjakarta commonsを使う手かもです。
http://jakarta.jp/commons/httpclient/

方法は幾つかありますが、以前HttpURLConnectionを使った方法を。

--- サーバーAのサーブレット ---
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletA extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 下のURL部分はサーバーBのサーブレットを指定します
URL url = new URL( "htt...続きを読む

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



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

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

QdoGetとdoPostの違い

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブラウザ:Servletのメソッドで対応してれば
いいだけで、結局は送信量の違いだけですか?
そのへんがよくわかってないので教えてください。

ちなみに、doGetでやってる処理は、

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

//Bean(workBean)のインスタンス作成
wk = new work_Bean();
//Bean処理実行
wk.Work();





//BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
request.setAttribute("wk",wk) ;

//ViewであるJSPを呼び出す
RequestDispatcher rDispatcher =
request.getRequestDispatcher("/kanri_JSP.jsp");
rDispatcher.forward(request,response);

こんなかんじでしてます。
あとは、ネットで、人のサンプルとかみると
doGetメソッドに処理をかいており、doPostでは
doGet(request,response);として
doGetをよんでたりするんですが、
これは、PostでもGetと同様の処理ができると
いうことですか?
基本的な質問過ぎるかとおもいますがおしえてください。

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブ...続きを読む

Aベストアンサー

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。
仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。

ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて
いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が
違う、と。

普通は、html や JSP の方も、Servlet を意識して書くでしょうから、
どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet
を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。


ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは
ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり
ません。

GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、
POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に
よってきます。

Qラジオボタンの選択肢をサーブレットで取得するには?

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="radiobutton">
割引手形 
<input type="radio" name="radiobutton" value="radiobutton">
手形貸付 
<input type="radio" name="radiobutton" value="radiobutton">
証書貸付
</p>

ブラウザー側からは
<form action="http://localhost/servlet/yuushi" method=post>
の指定を行っています。
サーブレットでの受け取り方を、
String p2=request.getParameter("radiobutton");
 とすると、p2=radiobuttonとデータがセットされました。

サーブレットの開発を行っていますが、ブラウザー側で
ラジオボタンを選択した際に何を選択したかのデータを取得したいのです。
(下記のHTMLで言えば、割引手形か、手形貸付か、証書貸付というのを取得したいのです)
パラメーターをサーブレットで受け取りたいのですが
うまくいきません
HTMLでHIDDENを使用するとか聞いたことはあるのですがどのようにコーディングすればいいんでしょうか?
よろしくお願いいたします。

<p>
<input type="radio" name="radiobutton" value="...続きを読む

Aベストアンサー

それぞれの項目の value を、ユニークにして下さい。例えば、

<input type="radio" name="radiobutton" value="1"> 割引手形 
<input type="radio" name="radiobutton" value="2"> 手形貸付 
<input type="radio" name="radiobutton" value="3"> 証書貸付

そうすれば、「手形貸付」を選択したときに

String p2 = request.getParameter("radiobutton");

とすれば、p2 は "2" になります。

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング