いまさらの Java EE 6 について・
NetBeans の Java EE 6 サポートが充実していて楽ちんすぎる
ので、テキストエディタとコンソールでなるべく手動で JavaEE 6 を Step by Step する。
glassfish のインストールと起動手順
今回は glassfish 使う。
- http://glassfish.java.net/ から glassfish-3.1.2.2-ml.zip を落として適当なディレクトリに配備
- install-dir/bin/ ディレクトリを PATH 環境変数に追加
- 以下のコマンドでglassfish起動
asadmin start-domain
-
- ドメイン名は省略してるのでデフォルト(domain1)が使われる
- domain1 の構成ファイルは
/glassfish/domains/domain1 に作成される
- http://localhost:8080/ にアクセスしてデフォルトのウェルカムページを確認
- 管理コンソールは http://localhost:4848/
- 停止コマンドは以下
asadmin stop-domain
Mavenでプロジェクトを作成
なるべく手でやるので archetype:create しない。以下のフォルダ構成を作成。
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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>etc9</groupId> <artifactId>webapp001</artifactId> <version>0.1</version> <packaging>war</packaging> <name>webapp001</name> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
- JavaEE 6 は Java6 以上推奨なので、maven-compiler-plugin を利用(Java7指定にした)
Servlet3.0 は web.xml がオプション扱い。Maven で war 作製する時に web.xml が存在しないと怒られるため、以下のプラグイン設定を追加
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
ついでにソースファイルのEncoding指定をUTF-8に
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
最終的には以下の 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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>etc9</groupId> <artifactId>webapp001</artifactId> <version>0.1</version> <packaging>war</packaging> <name>webapp001</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
JSPファイルの作成
src/main/webapp 配下に index.jsp を新規で作成
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> </body> </html>
warを作ってデプロイ
以下のコマンドで war に固める
mvn package
target 配下に webapp001-0.1.war ができる
デプロイは glassfish の管理コマンドで作成された war を指定
asadmin deploy target/webapp001-0.1.war
http://localhost:8080/webapp001-0.1/index.jsp にアクセスすると以下が表示される
サーブレットの作成
src/main/java/etc9 配下に SampleServlet.java を作成
package etc9; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns={"/servlet/SampleServlet"}) public class SampleServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { PrintWriter pw = res.getWriter(); pw.println("This is Servlet3.0"); } }
- @WebServlet アノテーションでコンテナに Servlet として登録指示
- HttpServlet を継承して GET のハンドラ記載
- これだけで web.xml も無しでサーブレットとなる
mvn package
でwar作成。先ほどデプロイ済みなので、アンデプロイしてから再度デプロイ。
asadmin undeploy webapp001-0.1.war asadmin deploy target/webapp001-0.1.war
http://localhost:8080/webapp001-0.1/servlet/SampleServlet でアクセスすると