ママのスキンケアのお悩みにおすすめアイテム

HTMLファイルに以下のタグを書きました。
<A HREF="http://localhost:8080/.../servlet/test">ここ</A>

上記の「ここ」を押すと、test.javaのdoPost()ではなく、doGet()が
呼ばれるんですか?よく分からなくなってきました(x_x;)
わたしの作ったプログラムはdoPost()しか再定義していませんので、動きませんでした。(後でdoGet()を再定義したら動いたんですが)
ちなみに、IEでアドレスとして"http://localhost:8080/.../servlet/test"
を指定したら、doGet()なしで動きました。ここではdoPost()が呼ばれてるということですよね。。?
どうしてでしょうか?教えて下さい。

A 回答 (2件)

私はいつも、全てのサーブレットの親クラスにこんな定義をしておきます。


いちいち、これはGetかPostか?って考えるの大変ですもんね。
こうすると、親クラスのperfomTask()で、セッション関連の共通処理とかを書いておけるし、親クラスにlog排出処理のメソッド作っておけば、全サーブレットで使えますし。

//親クラスの定義
public void doGet(HttpServletRequest req,HttpServletResponse){
performTask(req,res);
}
public void doPost(HttpServletRequest req,HttpServletResponse){
performTask(req,res);
}
protected void performTask(HttpServletRequest req,HttpServletResponse){
perfomTask0(req,res);
}

子クラスの定義
protected void performTask0(HttpServletRequest req,HttpServletResponse){
//処理記述
}
    • good
    • 1
この回答へのお礼

おぉ~(◎0◎)!!頭いいですね!って、私が頭悪いだけなんですけど…(^^;
わざわざ、ありがとうございました!やってみます。

お礼日時:2001/12/21 15:50

a href="..."でサーブレットを開くとdoGet()が呼ばれます。


また、アドレスでhttp://...と入力した場合もdoGet()が呼ばれます。
(のはずなんですが…呼ばれてないんですよね?何故でしょう)

doPost()が呼ばれる時は、
<form method="POST" action="サーブレットのアドレス">
</form>
でフォームがsubmitされた時です。

<form method="GET" action="サーブレットのアドレス">
もしくは、methodを省略して
<form action="サーブレットのアドレス">
とした時は、doGet()が呼ばれます。

参考までに。
    • good
    • 0
この回答へのお礼

どうもありがとうございました!!
>アドレスでhttp://...と入力した場合もdoGet()が呼ばれます。
>(のはずなんですが…呼ばれてないんですよね?何故でしょう)
すみません…私のミスでしたm(_ _)m doGet()の中でdoPost()を呼んでました。
汗汗)
つまり、methodで指定しない限り、doGetなんですね。
わかりました。

お礼日時:2001/12/21 15:52

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

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

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

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

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

QJSPからクラス(サーブレット)を呼び出す方法

JSPからクラス(サーブレット)を呼び出そうとしてるんですが
以下のエラーになってしまいます。
The requested resource (/Hello) is not available.

ネットで調べてみたら、パスの指定の仕方が悪いんじゃないかって感じがするので
色々パスを弄ってみましたが、ずっとavailableになります。
わかる方いらっしゃったらアドバイスよろしくお願いします。

※usebeanはこのエラーの前の段階で、getとset両方動くのを確認しています。
※「http://localhost:8080/javaroad/Hello」を直接WEBブラウザのURLに入れたら動きました。

【フォルダ構成 (Tomcat 6.0\webappsの直下) 】

javaroad
---------- index.jsp
---------- WEB-INF
-------------------- web.xml
-------------------- classes
---------------------------- HelloServlet.class

【index.jsp】
<%@ page contentType="text/html;charset=Shift_JIS" %>
<jsp:useBean id="GSBean" class="Testaaa.GetSetBean" />
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<form method="post" action="/Hello">
<input type="text" name="name1" maxlength="10" style="ime-mode: disabled">
<jsp:setProperty name="GSBean" property="userID" param="name1" />
<br><br>
<input type="submit" value="submit">
</form>
</body>
</html>

【web.xml】
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>

</web-app>

【HelloServlet.class】
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println(new java.util.Date());
out.println("</BODY>");
out.println("</HTML>");
}

以下試して駄目だったパスの一覧です。
<form method="post" action="Hello">
<form method="post" action="/Hello">
<form method="post" action="../servlet/Hello">
<form method="post" action="HelloServlet">
<form method="post" action="/HelloServlet">
<form method="post" action="../servlet/HelloServlet">
<form method="post" action="WEB-INF\classes/HelloServlet">
<form method="post" action="http://localhost:8080/javaroad/Hello">

JSPからクラス(サーブレット)を呼び出そうとしてるんですが
以下のエラーになってしまいます。
The requested resource (/Hello) is not available.

ネットで調べてみたら、パスの指定の仕方が悪いんじゃないかって感じがするので
色々パスを弄ってみましたが、ずっとavailableになります。
わかる方いらっしゃったらアドバイスよろしくお願いします。

※usebeanはこのエラーの前の段階で、getとset両方動くのを確認しています。
※「http://localhost:8080/javaroad/Hello」を直接WEBブラウザのURLに入れたら動...続きを読む

Aベストアンサー

<form method="get" action="Hello">

ではないでしょうか。

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 コンテナ)の実装に
よってきます。

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

QPOSTで

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return false">hoge</a>
<form action="./sample.cgi" method="POST" name="post2">
<input type="hidden" name="md" value="bb">
<input type="hidden" name="tx" value="yy">
          :
<a href='#' onClick="document.post2.submit();return false">hoge2</a>

このような手法が見つかりました
これだと行数が多くなり、なんとなくすっきりしません
どなたかいい解決方法を教えてください
よろしくお願いします

POSTで
<a href=sample.cgi?md=aa&tx=zz~>hoge</a>
<a href=sample.cgi?md=bb&tx=yy~>hoge2</a>
<a href=sample.cgi?md=cc&tx=xx~>hoge3</a>
<a href=sample.cgi?md=dd&tx=ww~>hoge4</a>

を送る方法でjavascriptとの組み合わせで出来るのかな?
と思い検索したら

<form action="./sample.cgi" method="POST" name="post">
<input type="hidden" name="md" value="aa">
<input type="hidden" name="tx" value="zz">
          :
<a href='#' onClick="document.post.submit();return...
続きを読む

Aベストアンサー

JavaScriptオフの場合を考えないなら、このように書けます。


<!-- フォーム -->
<form action="sample.cgi" method="post" name="form1">
<input type="hidden" name="md">
<input type="hidden" name="tx">
</form>


<!-- スクリプト -->
<script type="text/javascript"><!--
function Post(md, tx) {
  form1.md.value = md;
  form1.tx.value = tx;
  form1.submit();
}
//--></script>


<!-- リンク -->
<a href="javascript:Post('aa', 'zz')">hoge</a>
<a href="javascript:Post('bb', 'yy')">hoge2</a>

QjspからServletを呼び、元のjspページに戻るにはどうしたらよいですか?

・jspページにあるボタンを押すとServletに値を渡す。
・Servletで処理をする。
・処理の結果を元のjspページに表示する。

というプログラムを作りたいと考えています。
jspページ→Servletで処理をする、という所までは出来たのですが
その後元のページに戻すというところで困っています。

jspページは複数(十数ページ)あり、Servletは1つです。
a.jsp→Servlet→a.jsp
b.jsp→Servlet→b.jsp
このように、どのjspページから呼ばれても、元のjspページに
戻したいのですが、どのようにすれば実現できるでしょうか?

Aベストアンサー

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳しく書いたほうがいいですよ^^!ロジック自体はもっといいものがあるかどうか検討してみてください。sendRedirectメソッドはリクエスト属性を保持しないので、必要な場合はRequestDispatcher#forwardメソッドの使用も考えられます。その場合はパスの記述が/アプリ名/ファイル名ではなく/ファイル名 になりますが(余談))

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳し...続きを読む

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。


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

人気Q&Aランキング