7.1 web.xml の一般的なスキーマ

web.xml ファイルには、アプリケーション構成情報が保存されます。これは必須の部分ではありませんが、Web アプリケーションを構成するために非常に広く使用されています。

このファイルはWEB-INFフォルダーに存在する必要があります。Tomcat が起動すると、Tomcat の内容が読み取られ、そこに含まれる設定が使用されます。ファイルにエラーが含まれている場合、Tomcat もエラーを表示します。

web.xml の例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">

  <servlet>
       <servlet-name>HelloWorld</servlet-name>
       <servlet-class>HelloServlet</servlet-class>
   </servlet>

  <servlet-mapping>
      <servlet-name>HelloWorld</servlet-name>
      <url-pattern>/welcome</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>

</web-app>

"HelloWorld"サーブレット名とサーブレット クラスのマッピングは、ここでは緑色で書かれています"HelloServlet"サーブレット名と URL チャンクのマッピングは青で書かれています"HelloWorld""http://localhost/welcome"。したがって、ここでは /welcome パスにアクセスするときに servlet を呼び出す必要があると記載されていますHelloServlet.class

赤色は、要求に応じて提供する必要があるファイルを示しますhttp://localhost/。これはいわゆるウェルカム ページです。ユーザーが Web アプリケーションのルートに対応する名前をブラウザーに入力するだけの場合、index.html.

7.2 サーブレット、サーブレットマッピング

1 つのサーブレットが異なる URL でリクエストを処理できるため、web-xml では、サーブレットとその URL へのマッピングは別々に記述されます。まず、サーブレットを記述し、それぞれに一意の文字列名を付けます。次に、各サーブレットがどの URL にマップされるかを指定します。

web.xml の例:

<web-app>

  <servlet>
    <servlet-name>remoting</servlet-name>
    <servlet-class>com.codegym.RemotingServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>remoting</servlet-name>
    <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>restapi</servlet-name>
    <servlet-class>com.codegym.RestApiServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>restapi</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>

</web-app>

この例では、2 つのサーブレットが宣言されており、それぞれが異なる URL テンプレートにマップされています。サーブレットは、RemotingServletに送信されるすべてのリクエストを処理します/remoting/*サーブレットは、RestApiServletに送信されるすべてのリクエストを処理します/api/*。サーブレットにはロードからの順序 (load-on-startup パラメータ) もあります。

7.3 サーブレットのオプション

web.xml を使用すると、サーブレットの初期化中にパラメータをサーブレットに渡すことができ、インターフェースを通じてパラメータを使用できるようになりますServletConfig。Web アプリケーション全体のパラメータを設定することもできます。これらのパラメータは、 を通じて利用可能になりますServletContext

web.xml の例:

<web-app>
  <context-param>
     <description>Server production mode</description>
     <param-name>productionMode</param-name>
     <param-value>false</param-value>
  </context-param>

  <context-param>
     <param-name>appPropertiesConfig</param-name>
     <param-value>
        classpath:local-app.properties
        classpath:web-app.properties
     </param-value>
  </context-param>

  <servlet>
     <servlet-name>mainservlet</servlet-name>
     <servlet-class>com.codegym.ApplicationServlet</servlet-class>
     <init-param>
        <param-name>application</param-name>
        <param-value>com.codegym.App</param-value>
     </init-param>
     <init-param>
        <param-name>widgetset</param-name>
        <param-value>com.codegym.WidgetSet</param-value>
     </init-param>
     <init-param>
        <param-name>ui</param-name>
        <param-value>com.codegym.AppUI</param-value>
     </init-param>
  </servlet>
</web-app>

緑色で強調表示されているコードは、 のパラメータを設定する場所ですServletContext。そのうちの 2 つがあります。

  • productionMode値が false の場合
  • appPropertiesConfig2 つの文字列の配列を使用します。
    • classpath:local-app.properties
    • classpath:web-app.properties

サーブレットのパラメータは青色で示されておりApplicationServlet、次の方法で使用できますServletConfig

  • application値が com.codegym.App の場合
  • widgetset値が com.codegym.WidgetSet の場合
  • ui値が com.codegym.AppUI の場合

7.4 フィルタ、フィルタマッピング

Web アプリケーションには特別な .html が含まれる場合もありますutility servlets - filters。これらは、呼び出しのリダイレクト、承認の確認など、さまざまなサービス タスクを実行します。

web.xml の例:

<web-app>

  <servlet>
      <servlet-name>remoting</servlet-name>
      <servlet-class>RemotingServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
      <servlet-name>remoting </servlet-name>
      <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>

  <filter>
      <filter-name>total_filter</filter-name>
      <filter-class>com.javrush.TotalFilter</filter-class>
  </filter>

  <filter-mapping>
      <filter-name>total_filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

リクエストはサーブレットに到達する前にRemotingServlet、フィルタによって処理されますTotalFiler。このフィルターは、Web アプリケーションに送信されるすべてのリクエストをインターセプトするように構成されています。これは、マッピング先の URL テンプレートによって明らかに示唆されています/*

サーブレットとフィルターについては、次の講義で詳しく説明します。