Maven で Tomcat で動作する Web アプリの作り方をメモ。
単純な Servlet だけのやつと、 JAX-RS(Jersey) を使ったやつの2つを作成する。
#環境
##OS
Windows7 64bit
##Java
1.7.0_25
##Tomcat
7.0.42
##Jersey
2.2
#単純な Servlet だけの Web アプリ
##プロジェクトのひな形を作成する
コマンドプロンプトから任意のフォルダで以下のコマンドを実行する。
>mvn archetype:create -DgroupId=com.example.servlet -DartifactId=servlet-sample -DarchetypeArtifactId=maven-archetype-webapp
以下のようなひな形が出力される。
servlet-sample>tree /f
│ pom.xml
│
└─src
└─main
├─resources
└─webapp
│ index.jsp
│
└─WEB-INF
web.xml
##Servlet を実装する
src/main/java/com/example/servlet
フォルダを作成して、 SampleServlet.java
を作成する。
package com.example.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/sample")
public class SampleServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
ServletOutputStream os = res.getOutputStream();
os.println("Sample Page");
}
}
###web.xml を削除する
サーブレットのマッピングは @WebServlet
アノテーションで指定しているので、 sample-servlet/src/main/webapp/WEB-INF/web.xml
を削除する。
##pom.xml を編集する
pom.xml
を以下の内容に編集する。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.servlet</groupId>
<artifactId>sample-servlet</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>Sample Maven Webapp</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>sample-servlet</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
###failOnMissingWebXml について
この設定をしないと、 war
を作るときに web.xml
が無くてエラーになる。
web.xml
は削除しているので、 failOnMissingWebXml
に false
を指定している。
##war を作成する
以下のコマンドを実行する。
sample-servlet>mvn package
target
フォルダの下に sample-servlet.war
という war
ファイルが出力される。
##動作確認
sample-servlet.war
を Tomcat に配備して、 Tomcat を起動。
http://localhost:8080/sample-servlet/sample
にブラウザからアクセスする(ポート番号は適宜読み替え)。
#JAX-RS を使用した Web アプリ
##ひな形の作成
コマンドプロンプトから任意のフォルダで以下のコマンドを実行する。
>mvn archetype:create -DgroupId=com.example.jaxrs -DartifactId=jaxrs-sample -DarchetypeArtifactId=maven-archetype-webapp
##JAX-RS のサービスクラスを作成する
src/main/java/com/example/jaxrs
フォルダを作成して、 SampleResource.java
を作成する。
package com.example.jaxrs;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("sample")
public class SampleResource {
@GET
public String sample() {
return "Sample Resource";
}
}
##web.xml に Jersey のサーブレットを登録する
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>JAX-RS Sample Application</display-name>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example.jaxrs</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
###説明
init-param
で指定している jersey.config.server.provider.packages
には、 JAX-RS のサービスクラスを検索するパッケージを指定する。
サービスクラスの検索はサブパッケージも再帰的に実行される。
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.example.jaxrs</param-value>
</init-param>
複数のパッケージを指定したい場合は、セミコロン(;
)区切りで列挙できる。
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.hoge.jaxrs;com.fuga.jaxrs</param-value>
</init-param>
##pom.xml の編集
pom.xml
を以下のように編集する。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.jaxrs</groupId>
<artifactId>jaxrs-sample</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>JAX-RS Maven Webapp</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<!-- Servlet コンテナのバージョンが 3.0 より古い場合は "jersey-container-servlet-core" を指定する -->
<artifactId>jersey-container-servlet</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
<build>
<finalName>jaxrs-sample</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
##war の作成
以下のコマンドを実行する。
jaxrs-servlet>mvn package
target
フォルダの下に jaxrs-servlet.war
という war
ファイルが出力される。
##動作確認
jaxrs-servlet.war
を Tomcat に配備して、 Tomcat を起動。
http://localhost:8080/jaxrs-servlet/rest/sample
にブラウザからアクセスする(ポート番号は適宜読み替え)。
#参考