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 の場合appPropertiesConfig
2 つの文字列の配列を使用します。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 テンプレートによって明らかに示唆されています/*
。
サーブレットとフィルターについては、次の講義で詳しく説明します。
GO TO FULL VERSION