Sep 01, 2008

[Misc] web.xml を分割する方法

久しぶりに Servlet を書くことになった。 Servlet ベースで Web アプリケーションを書くと web.xml がすぐにカオスになってしまうのが難点。 Servlet Specification 2.4 では XMLSchema が導入されたので、DTD を使用していた Servlet Specification 2.3 以前に比べると web.xml を分割し易くなっている。 というわけで、混沌としてくる前に web.xml を分割していくことにした。

web.xml の分割方法

web.xml の分割は非常に簡単。 web.xml 用の特別な方法があるわけではなく、XML の実体参照を使用するだけ。

web.xml はこんな感じ。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app [
<!ENTITY function0 SYSTEM "web-function0.xml">
<!ENTITY function1 SYSTEM "web-function1.xml">
]>

<web-app xmlns="​http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="​http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="​http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
	version="2.5">

	&function0;
	&function1;

</web-app>
web.xml 内で参照されている web-function0.xml はこんな感じ。 Servlet 2.3 までの <servlet> と <servlet-mapping> との順序の制約が無くなったので、web-funcion0.xml が読み易い。
<servlet>
	<servlet-name>jp.in_vitro.function0.FooServlet</servlet-name>
	<servlet-class>jp.in_vitro.function0.FooServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>jp.in_vitro.function0.FooServlet</servlet-name>
	<url-pattern>/function0/foo</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>jp.in_vitro.function0.BarServlet</servlet-name>
	<servlet-class>jp.in_vitro.function0.BarServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>jp.in_vitro.function0.BarServlet</servlet-name>
	<url-pattern>/function0/bar</url-pattern>
</servlet-mapping>

それにしても <url-pattern> の表現能力の貧弱さは何とかならないものか。 今時 Servlet ベースの開発はつらい。

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |