この記事について
- Servletって大学のときに聞いたことあるけど、実際よくわかってない
- そもそもJavaとか触ったことがない
- が、突如Javaでアプリケーションを作るチームに入ったのでお勉強
- とりあえず簡単なものを動かしてみて、裏側の実装とかまで覗けたらいいなという気持ち
- たぶん今回は動かすだけ
まずは動かしてみる
環境
プロジェクトの作成
$ mvn archetype:generate -DgroupId=com.github.nkiri -DartifactId=servletapp -DarchetypeArtifactId=maven-archetype-webapp
$ # インタラクションは全部デフォルト
$ cd servletapp
$ tree .
.
├── pom.xml
└── src
└── main
├── resources
└── webapp
├── WEB-INF
│ └── web.xml
└── index.jsp
- javax.servelt.http.HttpServletを継承したクラスを作成する
- src/main/java/com/github/nkiri/servletapp/HelloServlet.java として保存
- doGetはHTTPのGETメソッドの処理をするためのメソッドで、他のHTTPメソッドはdoPostとかdoDeleteとかを作るらしい
- writerにprintlnで文字列を書き込むとクライアントに返される
package com.github.nkiri.servletapp;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("<html><head></head><body>hello<body></html>");
}
}
web.xmlを作成
- Webアプリケーションの設定を記載する
- プロジェクト作成時に作られたものを編集
- /hi にマッチするリクエストはHelloServletが処理するように設定
@@ -3,5 +3,12 @@
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
- <display-name>Archetype Created Web Application</display-name>
-</web-app>
+ <servlet>
+ <servlet-name>Hello</servlet-name>
+ <servlet-class>com.github.nkiri.servletapp.HelloServlet</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Hello</servlet-name>
+ <url-pattern>/hi</url-pattern>
+ </servlet-mapping>
+</web-app>
ビルド
- 今回はwarファイルとして生成する
- pom.xmlを以下のように編集
@@ -9,6 +9,11 @@
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>4.0.1</version>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
@@ -17,5 +22,12 @@
</dependencies>
<build>
<finalName>servletapp</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>3.2.3</version>
+ </plugin>
+ </plugins>
</build>
</project>
- mvnコマンドでビルド
- target/servletapp.warが作られる
mvn clean package
docker run -it --name servletapp -v `pwd`/target/servletapp.war:/usr/local/tomcat/webapps/servletapp.war -p 8080:8080 --rm tomcat:9.0.35-jdk8-openjdk