Google Guiceでservlet
GuiceでServeletを利用するには、guice-servlet.jarが必要になります。
mavenのglobal repositoryにないので、ローカルリポジトリに登録します。
%maven install:install-file -Dfile=guice-servlet-3.0.jar -DgoupdId=com.google.guice -DartifactId=guice-servlet -Dversion=3.0 -Dpackaging=jar
webapp用のプロジェクトを作成する。
%mvn archetype:generate
maven3.0ですと対話型でできます。
最初のChoose a numberを112を指定します。
そして必要な項目をpom.xmlに設定します。
最低限だとこんな感じかな。
ポイントは、WEBコンテナがもっているjarは、scopeにprovidedを指定してdeployする対象から外す。
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>[2.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>[1.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>[0.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>[0.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>[4.,)</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>[3.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice-servlet</artifactId> <version>[3.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>[0.,)</version> <scope>runtime</scope> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils-core</artifactId> <version>[1.,)</version> <scope>runtime</scope> </dependency> </dependencies> <build> <finalName>pae-web</finalName> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.8</version> <configuration> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> </plugins> </pluginManagement> </build>
いつも通り、eclipseのプロジェクトに変換しますが、ついで、WTP対応にしておくと便利なので、WTPの指定をします。
% mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0
web.xmlにguiceのフィルターの設定をします。
guiceのサーブレットの動作は、listenerでinitializeしたservletやfilterのマッピングをGuiceFilterでキャッチしてDispatchしてくれるというものらしい。
<filter> <filter-name>GuiceFilter</filter-name> <filter-class> com.google.inject.servlet.GuiceFilter </filter-class> </filter> <filter-mapping> <filter-name>GuiceFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>jp.co.sandbox.GuiceServletConfig</listener-class> </listener>
public class GuiceServletConfig extends GuiceServletContextListener { @Override protected Injector getInjector() { return Guice.createInjector(new ServletModule() { @Override protected void configureServlets() { serve("*.do2").with(MyServlet.class); } }); } }
サンプルの何もしないサーブレット
public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("enter doGet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("enter d oPost"); } }