web.xmlにマッピングせずにサーブレットを呼び出すことはできますか?[複製]

Dec 12 2020

サーブレットへのアクションがある場合は、XMLでのマッピングを使用することをお勧めします。したがって、次のようになります。

HTMLインデックス:

<!DOCTYPE html>

</head><body>
    <form action="go" method="POST">
        Enter name: <input type="text" name="name">
        <button>Submit form :)</button>
    </form>
</body></html>

XMLマッピング:

<web-app..........
  
  <servlet>
  <servlet-name>servlet</servlet-name>
  <servlet-class>ServletOne</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>servlet</servlet-name>
  <url-pattern>/go</url-pattern>
  </servlet-mapping>
  
</web-app>

サーブレットクラス

public class ServletOne extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String s = req.getParameter("name");
        PrintWriter pw = resp.getWriter();
        pw.println("Welcome " + s);

    }
}

そしてそれはうまくいきます。しかし、私の質問は、マッピングを作成したくない場合はどうなるかということです。サーブレットクラスを直接呼び出したいのです。XMLファイルを削除し、次のすべての行を実行しました。

<form action="ServletOne" method="POST">
<form action="ServletOne.class" method="POST">
<form action="ServletOne.java" method="POST">

そして..それらのどれも動作しません。マッピングせずにサーブレットを直接呼び出すことはできますか?はいの場合、どのように?テストの目的で、すべてのサーブレットのマッピングに時間を無駄にする必要がない場合もあります。

回答

1 LiveandLetLive Dec 12 2020 at 05:07

注釈を使用できます。

@WebServlet("/go")
public class ServletOne extends HttpServlet {
    //...
}

実際、サーブレット3.0以降、ほとんどの開発者はXML構成よりもこれを好みます。

サーブレット仕様では、マッピングを/。で始める必要があることに注意してください。詳細については、これを確認してください。