• ベストアンサー

a href="..." とServlet

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()が呼ばれてるということですよね。。? どうしてでしょうか?教えて下さい。

  • Java
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.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){ //処理記述 }

myrimyri
質問者

お礼

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

その他の回答 (1)

noname#99638
noname#99638
回答No.1

a href="..."でサーブレットを開くとdoGet()が呼ばれます。 また、アドレスでhttp://...と入力した場合もdoGet()が呼ばれます。 (のはずなんですが…呼ばれてないんですよね?何故でしょう) doPost()が呼ばれる時は、 <form method="POST" action="サーブレットのアドレス"> </form> でフォームがsubmitされた時です。 <form method="GET" action="サーブレットのアドレス"> もしくは、methodを省略して <form action="サーブレットのアドレス"> とした時は、doGet()が呼ばれます。 参考までに。

myrimyri
質問者

お礼

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

関連するQ&A

  • servletの開発(リンク先にとべません)

    質問失礼します。 非常に単純なプログラムなのですが詰まってしまいました。 public class Home extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=Shift_JIS"); request.setCharacterEncoding("Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<h1>メニュー</h1>"); out.println("<h1>ようこそ</h1>"); out.println("選択してください<BR>"); out.println("<p><a href= \"http://localhost:8080/servlet/test.html>サッカー</a></p>"); out.println("<p>野球</p>"); out.println("<p>バスケットボール</p>"); } } この中での out.println("<p><a href= \"http://localhost:8080/servlet/test.html>サッカー</a></p>"); の部分なのですが, 実際にlocalhostからアクセスしてみると <a href="http://localhost:8080/servlet/test.html>サッカー というようにそのまま表示されてしまいます。 解決方法がありましたらよろしくお願いします。

    • ベストアンサー
    • HTML
  • servlet (resin) について

    tomcatとresinって、そんなに違うのですか? resinでプログラムを動かしたいのですが、動いてくれません… tomcatの場合、webappsの下に自分の好きなディレクトリを作れば(test)その中のWEB-INF/classes にクラスファイル(TEST.class)を置けば、  http://localhost:8080/test/servlet/TEST で動きますが、resinも同じようにしようと思って、test/WEB-INF/classes/の下にTEST.java を置いて(コンパイルしてくれると聞いたのでJAVAファイルを置きました) http://localhost:8080/test/servlet/TEST を見ても、/test/servlet/TEST was not found on this server. と怒られました… どうすればいいのでしょう??

  • Servletが動かない

    下記のようなサーブレットを作成し、web.xmlも記述して動かしてみようとしたところ下記のようなエラーが発生して動きません。(Win2000、Tomcat4.1) ~~~HelloWorldServlet.java package test_servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println("<html>"); out.println("<head>"); out.println("</head>"); out.println("<body>"); for (int i = 1; i <= 10; i++) { out.println("Hello World" + Integer.toString(i)); } out.println("</body>"); out.println("</html>"); } } ~~~web.xml <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HellowWorld</servlet-name> <servlet-class>test_servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HellowWorld</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app> ~~~http://localhost:8080/hello接続時のスタック javax.servlet.ServletException: クラス test_servlet.HelloWorldServlet はサーブレットではありません

    • ベストアンサー
    • Java
  • JSPで<A HREF=

    こんにちは。 JSPで 『url』 というストリング変数に サイトURLを入れ、 『name』 というストリング変数に サイトネームを入れています。値はシッカリ入っています。 <A HREF="<%= url%>"><%= name %></A> としたんですが、リンクしてくれません。 HTMLタグの中に <%= ~ %>タグを使ってはいけないのでしょうか? リンクを動的に貼りたいと思っています。上記の方法ではできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • hrefについて教えて下さい。

    OS:Windows XP SP2です。 IEブラウザ6.02を使用しています。 HTMLで<a href="test.lnk">のようにショートカットを開く場合 「ファイルのダウンロード」ダイアログが表示されてしまいます。 これを回避する方法などはありませんでしょうか? JavaScriptでもやり方があれば教えて下さい。 宜しくお願い致します。

  • aタグのhrefにネットワークパスを指定するとエラーになる

    こんにちは。 Windows2003サーバA(IIS)上にあるHTML(charset=UTF-8)内に <a href="¥¥server-1¥フォルダ A¥テスト.ppt">PPT</a> というコードを埋めてクライアントからアクセスすると ・クライアントA WinXPSP2+ie6+SP2+最新パッチ →OK ・クライアントB WinXPSP2+ie6+SP2+最新パッチ →NG(ファイルが見つかりません) ・クライアントC WinXPSP2+ie7+最新パッチ →NG(ファイルが見つかりません) という三者三様の動きをしてしまいます。 このとき、いずれのクライアントのブラウザに表示されているリンク部分にマウスを乗せても、ステータスバーに file://server-1¥フォルダ%20A¥テスト.ppt と表示されます。 また、hrefに設定しているURLを各ブラウザのアドレスバーに直接入力すると、それぞれ、問題なくファイルを開くことができます。 お尋ねしたいのは次の2点です。 1.このようにaタグ内のhrefにネットワークパスを使ったファイル名(UNC)を利用してもよいのでしょうか? 2.ie6のクライアントでもできるものとできないものがあります。 どのような原因が考えられるでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • Tomcat Servletが動きません

    『Javaへの道:Tomcat』のページを参考に同じようにやってるのですが、 JSPはうまくいくのですがServletがうまくいきません。 (長文になります) 参考ページと私の環境で違う点 Windows XP Home → XP Pro Tomcat 6 → Tomcat 7 JDK6.0 → JDK6.23 ポート8080 → 8081 以下のファイル、フォルダを作りました(参考ページそのままです)。 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\jspdir\HelloJsp.jsp C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\classes\HelloServlet.class C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\web.xml C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\Catalina\localhost\javaroad.xml --↓↓HelloJsp.jspここから↓↓-- <HTML> <BODY> from JSP source<br> <%= new java.util.Date() %> </BODY> </HTML> --↑↑HelloJsp.jspここまで↑↑-- --↓↓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> --↑↑web.xmlここまで↑↑-- --↓↓javaroad.xmlここから↓↓-- <Context path="/javaroad" reloadable="false"/> --↑↑javaroad.xmlここまで↑↑-- JSPを起動 http://localhost:8081/javaroad/jspdir/HelloJsp.jsp → 正しく表示される Servletを起動 http://localhost:8081/javaroad/Hello → ステータス404 The requested resource (/javaroad/Hello) is not available. <気になる点> 1.Tomcatを起動するためStratボタン押しても1回では起動せず、2~3回で起動する。  1回目のときcommons-daemon.2011-01-15.logにこんなログが出る。  [2011-01-15 23:01:16] [error] Pid file 'C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs\tomcat7.pid' exists  [2011-01-15 23:01:16] [error] ServiceStart returned 1 2.servletクラスは正しくコンパイルできているのか 状況を詳しく説明しようとして長々と書いてしましたが Servletを表示するにはどうしたらいいでしょう? 足りない情報があれば追加します。

    • ベストアンサー
    • Java
  • <a href >タグのtarget属性について

    読込先のウィンドウを指定する、target属性なんですが、読込先をフレームにすると、ネットスケープ4.xで新しいウィンドウが開いてしまい、うまくいきません。 ちょっとわかりづらいかもしれませんが、たとえば、 フレームが上下に2分割してあるHTML、 <html> <frameset rows="50%,50%"> <frame src="up.html"name="ue"> <famae src="down.html"name="sita"> </frameset> </html> 上のHTMLに対して、name属性でつけた、「ue」というフレームを以下の HTMLファイル(他のウィンドウ)から読みこませると、IEではうまくいくんですが(ueという名前のフレームに、下のURLが読み込まれる)、 ネットスケープ(4.5x以上)でうまくいきません。 <html> <a href="http://www.xxx.co.jp"target="ue">ueに読み込む</a> </html> もう一度説明すると、他のウィンドウから、任意のフレームを指定して、 ページを読み込ませたいんですが、IEではうまくいきますが、ネットスケープでは新しく別ウィンドウが開いてしまいます。 ネットスケープの設定か、フレームの指定の仕方の違いかもしれません。 わかるかたがいらっしゃいまいしらお願いします。

  • eclipse servlet 404対処方法

    初めて質問させて頂く者です。宜しくお願いします。Java初心者です。 eclipse4.3のtomcatプロジェクトを使い、以下のServletコードを作成しました。 ブラウザアドレスバーに以下アドレスを入れて実行しましたが、HTTPステータス404が表示されます。 どのように改善したら良いかアドバイスをお願い致します。長文申し訳ございません。本当に困っています。 環境:windows8.1 eclipse4.3 ディレクトリ:jwapp(プロジェクト名) -test(パッケージ名) -First(ファイル名) 指定アドレス:localhost:8080/jwapp/servlet/test.First web.xmlファイルはWEB-INFの中に置いています。 記述は以下のとおりです。↓ <?xml version="1.0" encoding="ISO-8859-1"?> <web-app version="2.5" 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_5.xsd"> <servlet> <servlet-name>first</servlet-name> <servlet-class>test.First</servlet-class> </servlet> <servlet-mapping> <servlet-name>first</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> </web-app> Servletのコードは以下のとおりです。↓ package test; 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; public class First01 extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException{ res.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=res.getWriter(); out.println("<html)"); out.println("<head>"); out.println("<title>テスト</title>"); out.println("<h1>テスト</h1>"); out.println("</body>"); out.println("</heml>"); } }

    • ベストアンサー
    • Java
  • Javaについて

    JavaのjspやServlet、xmlで電たくを作りたいのですが、その際にprivate void main 〇〇 といったメインメソッドは使わずに、dopostやdoget、HttpServletRequestメソッドを使えば作れるという認識で合ってますかね?

    • ベストアンサー
    • Java

専門家に質問してみよう