web-dev-qa-db-ja.com

HTMLフォームからサーブレットクラスを呼び出す方法

1つのWebアプリケーションプロジェクトを作成しました。サーブレットクラスとHTMLフォームが含まれています。 HTMLフォームからサーブレットクラスを呼び出すにはどうすればよいですか?

12
user246160

HttpServlet を拡張するクラスを作成し、特定のURLパターンで @WebServlet で注釈を付けるだけです。

@WebServlet("/login")
public class LoginServlet extends HttpServlet {}

または、まだサーブレット2.5以前の場合(アノテーションはサーブレット3.0以降で新しい)、サーブレットを<servlet>web.xmlとして登録し、<servlet-mapping>を介して特定のURLパターンにマッピングします。

<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

次に、HTMLリンクまたはフォームアクションがサーブレットのurl-patternに一致するURLを指すようにします。

<a href="${pageContext.request.contextPath}/login">Login</a>
<form action="${pageContext.request.contextPath}/login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit">
</form>

送信ボタンを使用するときは、type="submit"ではなくtype="button"を使用してください。 ${pageContext.request.contextPath}部分の説明は、この関連する質問と回答にあります: HTTP 404エラーを発生させずにHTMLフォームアクションでサーブレットURLパターンを使用する方法

method="get"を使用したリンクとフォームは、サーブレットのdoGet()メソッドを呼び出します。通常、このメソッドを使用して、「ページの読み込み時に」リクエストを前処理します。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
}

method="post"を含むフォームは、サーブレットのdoPost()メソッドを呼び出します。通常、このメソッドを使用して、ユーザーが送信したフォームデータで要求を後処理します(要求パラメーターを収集し、それらを変換して検証し、モデルを更新し、ビジネスアクションを呼び出し、最後に応答をレンダリングします)。

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
}

サーブレットの詳細と具体的な例を見つけるには、 サーブレットのwikiページ にアクセスしてください。プレーンHTMLファイルの代わりにJSPファイルを使用することもできます。 JSPを使用すると、HTML出力を生成しながらEL式を介してバックエンドとやり取りしたり、JSTLのようなtaglibsを使用してフローを制御したりできます。 JSP wikiページ も参照してください。

25
BalusC

たとえば、私はそのようなlogin.htmlを作成します

<div class="container">

    <form method = "post" class="form-signin" role="form" action="LoginServlet">
    <h2 class="form-signin-heading">Please sign in</h2>
    <input type="text" class="form-control" name = "username" placeholder="User Name" required autofocus>
    <input type="password" class="form-control" name = "password" placeholder="Password" required>
    <div class="checkbox">
      <label>
        <input type="checkbox" value="remember-me"> Remember me
      </label>
    </div>
    <input type="submit" class="btn btn-lg btn-primary btn-block" value="Sign in">
  </form>

</div> 

タグの間で、メソッドを「post」として定義することによってLoginServletを呼び出します。

0
user3228915