プロが教えるわが家の防犯対策術!

こんにちわ。いつもありがとうございます。
サーブレットをコンパイル後、実行するとHTTPのPOSTメソッドは、このURLではサポートされていません。
と表示されます。

前のJSPからはmethod="POST"にて送信しているのですが・・・

すみませんが、ご教授下さい!

ソースは以下となります。
よろしくお願い致します!

import javax.servlet.http.*;
import java.sql.*;
import java.io.*;

public class EditingServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException {

/*フィールドの宣言*/
Connection conn = null;

res.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = res.getWriter();

out.println("<html><head></head><body>");

String Str = req.getParameter( "Str" );

try {
String user = "ID", pwd="PW";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://10.121.67.247:1433;DatabaseName=Name"; /*JDBC URL*/
conn = DriverManager.getConnection(url,user,pwd);
Statement stmt = conn.createStatement();
stmt.executeUpdate("UPDATE T_Strfer SET フラグ ='1' WHERE id='"+ Str +"'");

out.println("データを更新しました!<br>");
} catch (ClassNotFoundException e) {
out.println("クラスが見つかりません。");
} catch (SQLException e) {
out.println("データの更新に失敗しました。 ");
} finally {
try {
if (conn != null) { conn.close(); }
} catch (SQLException e) {}
}
out.println("</body></html>");
out.close();
}
}

A 回答 (5件)

えーと実はJSPならばOKなのですね。


とゆーことはJavaには問題はないと考えられます。
すると問題はSQLか
例えば存在しないカタチのIDを入力したとか。

もともと問題なかったので問題は違う状態で
発生してるのでは?

この回答への補足

fortranxpさま

ありがとうございます☆
IDは前のJSPから持ってきているので大丈夫かと思います。

明確な問題点が分からないので恐縮なのですが・・・

プロンプトで実行したら以下のメッセージが出ました。
Exception in thread "main" java.lang.NoSuchMethodError: main

関係ありますでしょうか?

補足日時:2007/04/24 20:12
    • good
    • 0
この回答へのお礼

fortranxpさま

普通に動くサーブレットでもコマンドで実行すると
Exception in thread "main" java.lang.NoSuchMethodError: mainが
表示されます。

なのでプログラムのせいではないと思います。
すみません。。。

お礼日時:2007/04/25 12:23

自宅のMySQLで実験したところ


もしかしたら、
String Str = request.getParameter("Str");

int Str=Integer.parseInt(request.getParameter("Str"));
かつ
stmt.executeUpdate("UPDATE T_Strfer SET フラグ ='1' WHERE id='"+ Str +"'");

stmt.executeUpdate("UPDATE T_Strfer SET フラグ ='1' WHERE id='+ Str +'");
でうまくいきました。
SQLの違いかも知れませんけど。

この回答への補足

fortranxpさま

ご自宅でまで試験して頂いてありがとうございます☆

試してみましたがデータの更新に失敗しました。と表示されます。

しかし、e.printStackTrace(); を足してもデータの更新に失敗しました。と表示されました。。。

お手数ですがご教授下さい。

補足日時:2007/04/24 19:25
    • good
    • 0
この回答へのお礼

fortranxpさま

本日、テストした所("UPDATE T_Strfer SET フラグ ='1' WHERE id="+Str);の記述で実行されました。

実行はされましたがテーブルに更新された様子がないのでSQLServlerの所でまた聞いてみます。

貴重なお時間頂きまして本当にありがとうございました☆

お礼日時:2007/04/25 22:32

>しかしデータの更新に失敗しましたと表示されました。



でしたらスタックトレースを出した方が良いでしょう。
原因が記述されているはずです。

} catch (SQLException e) {
e.printStackTrace(); ←←これ足す
out.println("データの更新に失敗しました。 ");
} finally {
    • good
    • 0

web.xmlはWEB-INF直下に配置します。


TOMCAT4.1.xではこのように記述します。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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>EditingServlet</servlet-name>
<servlet-class>EditingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EditingServlet</servlet-name>
<url-pattern>/EditingServlet</url-pattern>
</servlet-mapping>

</web-app>
TOMCATのバージョンによってはうまくいかないかもしれません。
またform actionは
<form action="/コンテキストルート/EditingServlet" method="post">
のようになっていますか?

この回答への補足

fortranxpさん

ありがとうございます。
Tomcatのバージョンは5xになります。

他のサーブレットは動くので記述は問題ないと思います。
またform actionもあっている様です。

doGetやdoPostを使うにあたって別の記述は必要なのでしょうか?

宜しくお願い致します☆

補足日時:2007/04/24 17:13
    • good
    • 0
この回答へのお礼

fortranxpさま

端末を再起動したら開きました!
すみません。

しかしデータの更新に失敗しましたと表示されました。
SQLでおかしい部分ありますでしょうか?

度々、すみませんが宜しくお願い致します!

お礼日時:2007/04/24 17:26

web.xmlは問題ありませんか?

この回答への補足

fortranxpさん

ありがとうございます。
web.xmlですか?

Servlet使用の記述以外が必要なのでしょうか?
すみません、ご教授下さい。

補足日時:2007/04/24 13:36
    • good
    • 0

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