WTPを使った開発においてJSP画面からServletが呼び出せない問題

このQ&Aのポイント
  • WTPを使用して開発している中で、JSP画面からServletを呼び出す際に問題が発生しています。HTTPステータス404エラーが表示され、正常にServletが呼び出されません。
  • 問題の原因として、JSP画面のformタグ内のaction属性が誤って指定されている可能性が考えられます。正しいパスを指定することで問題が解決する可能性があります。
  • また、Servletの他のJSPファイルに対しては正常に動作することから、問題はJSP画面からのServlet呼び出しに関連していると考えられます。情報が不足している場合は、追加情報を提供していただけると助かります。
回答を見る
  • ベストアンサー

WTP,JSP,Servlet

WTPを使って開発をしています。 設定まではうまくいきました。 一応環境をお知らせします。 ・WindowsVista ・WTP ・Tomcat6.0 ・Java6.0 ○実現したい事 JSP画面のフォームから送信ボタンでServletを呼ぶ。 ○困っていること JSP画面からServletが呼べない。 どうも <form method="post" action="com.Servlet"> のactionの指定が間違っているようです。 ○ソース環境 JSP : ルート/WebContent/JSP画面 Servlet : ルート/src/com/Servlet.java class : ルート/build/classes/com/Servlet.class ○エラー HTTPステータス 404 - /ルート/com.Servlet Actionの指定をいろいろと試したのですがダメでした。 Sevletの代わりにJSP画面と同じフォルダ内の他のJSPファイルを指定したらうまくいってます。 情報が足りなかったらすいません。 どうぞよろしくお願いします。

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

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

  • ベストアンサー
noname#94983
noname#94983
回答No.2

サーブレットを作成した際、web.xmlにサーブレットが自動登録される。その値がどうなっているか確認してみる。web.xmlには<servlet-mapping>というタグがあって、そこに<url-pattern>というのがある。これが、公開されるURIになる。これの値をactionに指定すればいい。 ちなみに、クラスファイルの配置場所は気にしなくていい。WTPはビルドされた生成物の配置場所が特殊で、一般的なサーブレットの作法とは異なっている。だから、これは逆に下手に触らないほうがいい。

sevenup56
質問者

お礼

ご回答ありがとうございます。 なるほど。クラスファイルの配置場所を気にしなくていいのはこのweb.xmlにマッピングされているからなのですね。 url-patternを見てみると、「/Servlet」と書かれていました。 どうやらパッケージが書かれていないのが原因かと。パッケージなしのクラスを作成してみると、動いたっぽいのでそれでやってみようかと思います。 ちなみにActionにはurl-patternに書かれている「/Servlet」ではなく「Servlet」と書いたら動いたっぽいです。

その他の回答 (1)

  • aoi2008
  • ベストアンサー率42% (6/14)
回答No.1

こんにちは コンパイルしたクラスファイルを置く場所がおかしいのと、 web.xmlにServletを登録してないんじゃないでしょうか?

sevenup56
質問者

お礼

ご回答ありがとうございます。 コンパイルしたクラスの置き場所は特に変えたわけでもなく、WTPそのままの設定なので問題ないかと思っています。 web.xmlを見てみます!

関連するQ&A

  • JSPからServletへの遷移

    今回、eclipseで開発をすることになりました。 しかしながら、動的Webプロジェクトという使い慣れないプロジェクトでの作成を しなくてはならなくなり、混乱しています。 tomcatとWTPのことについては、先の質問で教えて頂き解決したのですが、 もう一つ困ったことがあったので、再度質問させて頂きます。 --------------------------------------- 環境 Windows7 Ultimate eclipse Indigo tomcat 5.5 --------------------------------------- まずは、JSPを作成し、それを実行し、ブラウザ上に表示することは出来ました。 その後にServletに<form action ="/test" method = "POST">という形で投げるのですが、 それがうまくいかず、404エラーが出てしまいます。 階層としては、JSPはSample(プロジェクト名)/WebContent/NewFile.jspに配置しています。 そして、Servletについては、Sample(プロジェクト名)/src/test/Test.javaに配置しています。 web.xmlについては、Sample(プロジェクト名)/WebContent/WEB-INF/web.xmlにあります。 まず、JSPのソースは以下の様に書かれています。 ----------------------------------------------------- <%@ page contentType="text/html;charset=Windows-31J" language="java"%> <%@ page pageEncoding="Windows-31J"%> <html> <head><title>タイトル</title></head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <%request.setCharacterEncoding("Windows-31J");%> <body> <form method="POST" action="/test"> <%--ここに処理を記述 --%> <input type = "submit" name="submit" value = "送信"> </form> </body> </html> ----------------------------------------------------- Servletについては、以下の様に、型だけ記述しています。 ----------------------------------------------------- package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Test */ public class Test extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Test() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } ---------------------------------------------------- そして、web.xmlについては、以下の様に記述しています。 ---------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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"> <display-name>SampleWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>test</servlet-name> <servlet-class>test.Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> </web-app> ----------------------------------------------------- その状態で、JSPの中から <form action ="/test" method = "POST"> <input type ="submit" name = "submit" value="送信"> </form> とやっても、404が出てしまいます。 Java自体が久々で、根本的に間違っているかもしれませんが、 ご教授お願い致します。

    • ベストアンサー
    • Java
  • JSPからサーブレットを呼び出す際に404エラー

    現在、tomcatでサーブレット/JSPの勉強をしています。 参考書に載っている、jspの入力画面で入力した値をサーブレットで受け取り、そのまま表示させるようなサンプルを作成しています。 JSPの入力画面は表示できるのですが、値を入力してサーブレットに移動する際、404エラーが出てしまいます。 ・ファイルの配置 basic |-input |...|-echo.jsp |-WEB-INF |...|-src |......|-input |.........|-EchoServlet.java |...|-classes |......|-input |.........|-EchoServlet.class |...|-web.xml ・echo.jsp内のサーブレットのパスに関する記述 <FORM ACTION="../servlet/input.EchoServlet"> ・web.xmlの記述 <servlet> <servlet-name>EchoServlet</servlet-name> <servlet-class>input.EchoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EchoServlet</servlet-name> <url-pattern>/servlet/EchoServlet</url-pattern> </servlet-mapping> tomcatの/confのinvokerのコメントは外していません。 過去の質問も調べてみて、上記の記述の辺りがおかしいのではないかと 思うのですが、、お気付きの点がありましたら教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • jsp から servlet に

    パラメータをJSPからServlet に渡す所で、どうしても、null になってしまします‥。 主要な部分だけ書きます。 --jsp-- <jsp:useBean id="beanId" class="Bean" scope="request" /> <form method="POST" action="servlet"> <input type="submit" value="送信"> <input type="text" size="10" name="name"> --servlet-- import Bean; Bean bean = (Bean)request.getAttribute( "beanId" ); // ↑ここが、nullになってしまう。 --Bean-- public String getName() { return name; } public void setName( String name ) { this.name = name; } 考え方が違ってるかも知れないのですが‥。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JSPにおけるimportのパス?

    =========================== ■jakarta-tomcat-3.2.4 |_■webapps   |_■login     |_■bookmark     | |_□list.jsp ← 其の2     | |_■Web-inf     |   |_■classes     |   |_■atmakit     |     |_□MyDBAccess.class ← 其の3     |     |_□MyUtil.class ← 其の4     |_■Web-inf       |_■classes         |_□Servlet.class ← 其の1 =========================== 上記のようなディレクトリ構造のwebアプリケーションを作成中です。 其の1(Servlet.class)から其の2(list.jsp)を呼び出し、 その中で其の3(MyDBAccess.class)と其の4(MyUtil.class)をimportしたいのですが、 その場合の其の2(list.jsp)でのimportのパスはどのように指定したら良いのでしょうか? そもそもそんなこと可能なのでしょうか? 現在 import="java.sql.* ,atmarkit.MyDBAccess ,atmarkit.MyUtil" としてありますが、 ----------------------- org.apache.jasper.JasperException: Unable to compile class for JSPE:\jakarta-tomcat-3.2.4\work\localhost_8080%2Flogin\_0002fbookmark_0002flist_0002ejsplist_jsp_0.java:16: クラス atmarkit.MyDBAccess が import に見つかりません。 import atmarkit.MyDBAccess ; ^ E:\jakarta-tomcat-3.2.4\work\localhost_8080%2Flogin\_0002fbookmark_0002flist_0002ejsplist_jsp_0.java:17: クラス atmarkit.MyUtil が import に見つかりません。 import atmarkit.MyUtil; ^ ----------------------- というエラーが発生します。 これだけでは分からないかも知れませんが、必要な情報があれば仰ってください。 分かりにくい質問で申し訳ないですが、どなたかご教授下さい。

  • JSPとServletの連携

    JSPからServletを呼ぶ方法がわかりません。 例えばログインの一連の動きとしては、 一番初めにログイン画面があって、 それからユーザIDとパスワードが一致するか判断するためにservletを呼んでクラスで処理して、 一致したらメニュー画面、一致しなかったらもう一度ログイン画面に遷移するんですよね? 一番初めにJSPからservletを呼ぶにはどこでファイル名を指定したらいいのでしょうか?

    • ベストアンサー
    • Java
  • Servlet/JSPのアクセス制限

    Apache 2.2.x + Tomcat 5.5.xでサーバをたてています。 そこに、とあるサーブレット、ないしはJSPのファイルがあるとします。  www.somewhere.com/apps/servlet_or_jsp これを、通常は、同一サイト内にあるhtmlファイルのフォームから呼び出しています。  www.somewhere.com/foo.html   <form action="apps/servlet_or_jsp" ...> ここで、別サイトにあるhtmlファイルのフォームから、上記のファイルを呼び出そうとしてみます。  www.somewhereelse.com/bar.html   <form action="www.somewhere.com/apps/servlet_or_jsp" ...> すると、件のファイルを実行できてしまうのですが、これを外部サイトから実行できないようにするにはどうすれば良いのでしょうか? もしかしたら、とてつもなくくだらないことなのかもしれませんが、入門書を見たりWebで検索してみても答えが見つからなかったので、質問させてください。

  • JSPファイルのヘッダー部分に画像表示するには?

    調べても情報が見つからないため質問します 開発環境 Tomcatの現状のバージョン:Apache Tomcat/7.0.30 インストールされたServletの現状バージョン:3.0 インストールされたJSPの現状バージョン: 2.1 ServletとJSPを使ってJSPのヘッダーに画像を表示させたいんですがEclipse3.7内蔵ブラウザでは表示出来るのにIEなどのブラウザでは表示してくれないんです。 困ってる部分のヘッダーのソースだけ載せます <IMG src="D:\wokespace\mvcExample\WebContent\view\img/logo.jpg"> 絶対指定の画像をしているので表示するはずなんですが・・・ 何故でしょうか? 御指導御鞭撻ほどお願いします。

    • ベストアンサー
    • Java
  • Servletが動きません・・・

    自分で作成したServletを動かそうとしているのですが、あちこち設定してもどうも動きません。 どこかに設定ミスや漏れがあるのかよくわからないのですが、どなたか教えていただけないでしょうか? ☆環境 WindowsXP,Tomcat4.1,IE6.0 【Tomcatのインストール場所】 C:\Program Files\Apache Group\Tomcat 4.1 【開発物の起き場所】 C:\Program Files\Apache Group\eclipse\workspace\myapp 【myapp配下の構成】  myapp\WEB-INF\classes\jp\co\aaa\bbb\TestServlet.class  myapp\WEB-INF\lib  myapp\WEB-INF\src  myapp\doc  myapp\jsp  myapp\src  myapp\work

    • ベストアンサー
    • Java
  • 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
  • Servlet で404が返る

    Servlet で404が返る いつもお世話になっております。 本日jspの勉強をしてみました。 環境-------- java version 1.6.0_20 tomcat version 6.0 http://uguisu.skr.jp/html/servlet2.htmlや他のサイトを参考にして classまで生成してxmlを記述してURLを叩いたのですが、404エラーが返ってしまいます。 最終的にディレクトリ構成、ソースコードを全く同じ上記のサイトにしたので、間違いは無いと思いますが、他に疑うような点があったら教えてください。 一つイレギュラーなことをしていて、最初tomcatをダウンロードして、 tomcatが最初入っていたディレクトリをそのまま他のディレクトリへゴッソリ移動しました。 以上です。ご教授お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう