今回はmavenを使ってサーバサイドだけでWebアプリ開発ができないか頑張ってみました
■環境
CentOS release 5.10 (Final)
JDK 1.7.0_05
Maven 3.1.1
Tomcat 7.0.27
Servlet API 3.0.1
JDK 1.7.0_05
Maven 3.1.1
Tomcat 7.0.27
Servlet API 3.0.1
■プロジェクトの作成
mvn archetype:generate -DgroupId=com.sample.webapp -DartifactId=webapp-quick-start -DarchetypeArtifactId=maven-archetype-webapp
※versionとGroupIdの入力は特に指定しませんでした
webapp-quick-start というフォルダが作成されていることを確認します
ついでにパッケージ用のディレクトリも作成します
ls -ltr webapp-quick-start/
mkdir -p webapp-quick-start/src/main/java/com/sample/webapp
※versionとGroupIdの入力は特に指定しませんでした
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] Using property: groupId = com.sample.webapp [INFO] Using property: artifactId = webapp-quick-start Define value for property 'version': 1.0-SNAPSHOT: : [INFO] Using property: package = com.sample.webapp Confirm properties configuration: groupId: com.sample.webapp artifactId: webapp-quick-start version: 1.0-SNAPSHOT package: com.sample.webapp Y: : [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.sample.webapp [INFO] Parameter: packageName, Value: com.sample.webapp [INFO] Parameter: package, Value: com.sample.webapp [INFO] Parameter: artifactId, Value: webapp-quick-start [INFO] Parameter: basedir, Value: /var/tmp/maven [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /var/tmp/maven/webapp-quick-start [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.472s [INFO] Finished at: Tue Jun 17 19:53:57 JST 2014 [INFO] Final Memory: 12M/30M [INFO] ------------------------------------------------------------------------
webapp-quick-start というフォルダが作成されていることを確認します
ついでにパッケージ用のディレクトリも作成します
ls -ltr webapp-quick-start/
合計 8 drwxr-xr-x 3 root root 4096 6月 17 19:53 src -rw-r--r-- 1 root root 746 6月 17 19:53 pom.xml
mkdir -p webapp-quick-start/src/main/java/com/sample/webapp
■サンプルアプリ作成
dependencies 内にservlet-apiを使うためのライブラリの定義を記載します
emacs webapp-quick-start/pom.xml
メインとなるクラスを作成します
emacs webapp-quick-start/src/main/java/com/sample/webapp/TestWebApp.java
Webコンテナの定義を記載します
emacs webapp-quick-start/src/main/webapp/WEB-INF/web.xml
emacs webapp-quick-start/pom.xml
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>compile</scope> </dependency>
メインとなるクラスを作成します
emacs webapp-quick-start/src/main/java/com/sample/webapp/TestWebApp.java
package com.sample.webapp; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestWebApp extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println( "Hello World!!!" ); out.flush(); out.close(); } }
Webコンテナの定義を記載します
emacs webapp-quick-start/src/main/webapp/WEB-INF/web.xml
<!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>Archetype Created Web Application</display-name> <servlet> <servlet-name>TestWebApp</servlet-name> <servlet-class>com.sample.webapp.TestWebApp</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestWebApp</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
■ビルド
cd webapp-quick-start
mvn clean compile package
mvn clean compile package
■デプロイ
cp target/webapp-quick-start.war /usr/local/tomcat/webapps/
service tomcat restart
tomcatのデプロイ先のディレクトリは各自の環境に合わせてください
tomcatの再起動コマンドも各自の環境に合わせてください
再起動はtomcatのオートデプロイがONになっていれば再起動不要です
service tomcat restart
tomcatのデプロイ先のディレクトリは各自の環境に合わせてください
tomcatの再起動コマンドも各自の環境に合わせてください
再起動はtomcatのオートデプロイがONになっていれば再起動不要です
■動作確認
http://localhost:8080/webapp-quick-start/hello
にアクセスして「Hello World!!!」が表示されることを確認してください
Tomcat ManagerにアクセスするとデプロイしたWebコンテナ情報が登録されていることもわかるかと思います
にアクセスして「Hello World!!!」が表示されることを確認してください
Tomcat ManagerにアクセスするとデプロイしたWebコンテナ情報が登録されていることもわかるかと思います
何とかサーバサイドだけで開発できる環境ができました
Javaを書き換えたり、pom.xmlを書き換えたりした場合は
「mvn clean compile package」->「cpでデプロイ」の流れを実施すれば変更を確認することができます
以下、やったみた感想です
- MavenのXMLを記述するところがJavaらしいとというか、RubyやPHPみたいにモダン開発できない(慣れればできる?)
- HelloWorldのサンプルを作成するだけなのにコード量が多すぎるのが残念
- scaffold的な感じをJavaでもやりたかったのが動機
- 今回は通常のWebアプリ(サーブレットコンテナ)でのやり方でだったが spring.io や PlayFramework を使えばもっと簡単にできるはず
■参考サイト
http://search.maven.org/#browse
http://stones333.blogspot.jp/2013/01/quick-start-maven-archetype-for-simple.html
http://stones333.blogspot.jp/2013/01/quick-start-maven-archetype-for-simple.html
■Tips
http://localhost:8080/webapp-quick-start/
にアクセスするとsrc/main/webapp/index.jspの情報が表示されます
web.xmlのurl-mappingに「/」のみ記載するとwebapp-quick-start/aaa, webapp-quick-start/bbbと/配下の何にアクセスしてもサンプルの内容が表示されます
どうしてもEclipseで開発したい場合は「maven eclipse:eclipse」するとEclipseにインポートできるようになります
にアクセスするとsrc/main/webapp/index.jspの情報が表示されます
web.xmlのurl-mappingに「/」のみ記載するとwebapp-quick-start/aaa, webapp-quick-start/bbbと/配下の何にアクセスしてもサンプルの内容が表示されます
どうしてもEclipseで開発したい場合は「maven eclipse:eclipse」するとEclipseにインポートできるようになります
こんにちは。
返信削除やはり土台の分が含まれる以上、少ないコーディングは難しいですね。