0

私はサーブレットを初めて使用し、サーブレットをトリガーする送信ボタンを備えたhtmlページを開発しました。すべてが正常に機能していますが、htmlページが何も投稿していないため、GETメソッドを使用したいので、次の変更を加えました。 :1)page.htmlファイルで、method="POST"をmethod="GET"に置き換えました。2)サーブレットでdoGetを使用してdoPostを変更しました。しかし、「ここではGETは許可されていません」というエラーメッセージが表示されます。なぜそうなのですか?正しく機能する元のファイルは次のとおりです(変更を加える前)。

私のpage.htmlページ:

<html>
<head>
<title>A simple revision of servlets</title>
</head>
<body>
<form method="POST" action="Idiot">
    <input type="SUBMIT">
</form>
</body>
</html>

私のデプロイメント記述子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>TangoCharlie</servlet-name>
<servlet-class>Revise</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TangoCharlie</servlet-name>
<url-pattern>/Idiot</url-pattern>
</servlet-mapping>
</web-app>

そして最後に、Revise.javaという名前のサーブレットファイル

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

public class Revise extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("<html><body><h3>Hello India</h3></body></html>");
    out.println("Hello");
}
}
4

1 に答える 1

0

入力フィールドを追加したくありません.私の目的は、「POST」メソッドを使用して呼び出されたhtmlページにボタンを1つも付けずにサーブレットを実行することです。

メソッドでジョブを実行しdoGet()(サーブレット コードの編集後にプロジェクトを適切に再構築/再デプロイ/再起動することを忘れないでください。そうしないと、「HTTP 405: メソッドは許可されていません」というエラーが引き続き発生します)、代わりにサーブレットの URL を直接呼び出します。ブラウザのアドレス バーにある JSP の URL の

したがって、ブラウザのアドレスバーの URL は次のようになります。

http://example.com/contextname/ばか

それ以外の

http://example.com/contextname/page.html


具体的な問題とは関係ありませんが、サーブレットで HTML を発行するのは悪い設計です。これは JSP で行う必要があります。ビジネス ロジックRequestDispatcher#forward()の終了後に、リクエストを JSP に転送するために使用できます。doGet()さらに、パッケージレス クラスも悪い設計です。公に再利用可能な Java クラスは常にパッケージに入れる必要があります。パッケージレス サーブレットは、Tomcat + JVM バージョンの特定の組み合わせでのみ機能します。

以下も参照してください。

于 2012-10-22T15:05:04.460 に答える