Javaサーブレットの概要

1。概要

この記事では、JavaでのWeb開発の中核となる側面であるサーブレットについて説明します。

2.サーブレットとコンテナ

簡単に言うと、サーブレットは、要求を処理し、それらを処理して、応答で応答するクラスです。

たとえば、サーブレットを使用して、HTMLフォームを介してユーザーからの入力を収集し、データベースからレコードをクエリし、Webページを動的に作成できます。

サーブレットは、サーブレットコンテナと呼ばれる別のJavaアプリケーションの制御下にありますWebサーバーで実行されているアプリケーションがリクエストを受信する、サーバーはリクエストをサーブレットコンテナに渡します。サーブレットコンテナはリクエストをターゲットサーブレットに渡します。

3. Mavenの依存関係

Webアプリでサーブレットサポートを追加するには、javaxを使用します。サーブレット-API依存関係が必要です:

 javax.servlet javax.servlet-api 3.1.0 

最新のMaven依存関係はここにあります。

もちろん、アプリをデプロイするサーブレットコンテナも設定する必要があります。これは、TomcatにWARをデプロイする方法を開始するのに適した場所です。

4.サーブレットのライフサイクル

サーブレットのライフサイクルを定義する一連のメソッドを見ていきましょう。

4.1。初期化()

initメソッドは、一度だけ呼ばれるように設計されています。サーブレットのインスタンスが存在しない場合、Webコンテナは次のようになります。

  1. サーブレットクラスをロードします
  2. サーブレットクラスのインスタンスを作成します
  3. initメソッドを呼び出して初期化します

初期化サーブレットは、すべての要求を受け取ることができます前に、メソッドが正常に完了する必要があります。initメソッドがServletExceptionをスローするか、Webサーバーによって定義された期間内に戻らない場合、サーブレットコンテナはサーブレットをサービスに配置できません。

public void init() throws ServletException { // Initialization code like set up database etc.... }

4.2。サービス()

このメソッドは、サーブレットのinit()メソッドが正常に完了した後にのみ呼び出されます

コンテナはservice()メソッドを呼び出してクライアントからのリクエストを処理し、HTTPリクエストタイプ(GETPOSTPUTDELETEなど)を解釈し、必要に応じてdoGetdoPostdoPutdoDeleteなどのメソッドを呼び出します。

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // ... }

4.3。破壊()

サーブレットをサービス停止にするためにサーブレットコンテナによって呼び出されます。

このメソッドは、サーブレットのサービスメソッド内のすべてのスレッドが終了したとき、またはタイムアウト期間が経過した後にのみ呼び出されます。コンテナがこのメソッドを呼び出した後、サーブレットでサービスメソッドを再度呼び出すことはありません。

public void destroy() { // }

5.サーブレットの例

フォームを使用して情報を処理する完全な例設定しましょう

まず、フォームによってPOSTされた情報をキャプチャし、RequestDispatcherを使用して結果を返すマッピング/ calculateServletを使用してサーブレットを定義しましょう。

@WebServlet(name = "FormServlet", urlPatterns = "/calculateServlet") public class FormServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String height = request.getParameter("height"); String weight = request.getParameter("weight"); try { double bmi = calculateBMI( Double.parseDouble(weight), Double.parseDouble(height)); request.setAttribute("bmi", bmi); response.setHeader("Test", "Success"); response.setHeader("BMI", String.valueOf(bmi)); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); } catch (Exception e) { response.sendRedirect("index.jsp"); } } private Double calculateBMI(Double weight, Double height) { return weight / (height * height); } }

上に示したように、@ WebServletアノテーションが付けられたクラスは、javax.servlet.http.HttpServletクラスを拡張する必要があります@WebServletアノテーションは、Java EE6以降でのみ使用可能であることに注意してください。

The @WebServlet annotation is processed by the container at deployment time, and the corresponding servlet made available at the specified URL patterns. It is worth noticing that by using the annotation to define URL patterns, we can avoid using XML deployment descriptor named web.xml for our Servlet mapping.

If we wish to map the Servlet without annotation, we can use the traditional web.xml instead:

  FormServlet com.root.FormServlet   FormServlet /calculateServlet  

Next, let's create a basic HTML form:


    
Your Weight (kg) :
Your Height (m) :

${bmi}

Finally – to make sure everything's working as expected, let's also write a quick test:

public class FormServletLiveTest { @Test public void whenPostRequestUsingHttpClient_thenCorrect() throws Exception { HttpClient client = new DefaultHttpClient(); HttpPost method = new HttpPost( "//localhost:8080/calculateServlet"); List nvps = new ArrayList(); nvps.add(new BasicNameValuePair("height", String.valueOf(2))); nvps.add(new BasicNameValuePair("weight", String.valueOf(80))); method.setEntity(new UrlEncodedFormEntity(nvps)); HttpResponse httpResponse = client.execute(method); assertEquals("Success", httpResponse .getHeaders("Test")[0].getValue()); assertEquals("20.0", httpResponse .getHeaders("BMI")[0].getValue()); } }

6. Servlet, HttpServlet and JSP

It's important to understand that the Servlet technology is not limited to the HTTP protocol.

実際にはほとんどの場合そうですが、サーブレットは汎用インターフェースであり、HttpServletはそのインターフェースの拡張であり、doGetdoPostなどのHTTP固有のサポートを追加します。

最後に、サーブレットテクノロジは、JSP(JavaServer Pages、Spring MVCなど)などの他の多くのWebテクノロジの主要な推進力でもあります。

7.結論

この簡単な記事では、JavaWebアプリケーションのサーブレットの基礎を紹介しました。

サンプルプロジェクトは、GitHubプロジェクトとしてダウンロードしてそのまま実行できます。