新人研修で JSP&Servlet をやるっぽいので素振りをした。
前提
- Docker: Docker version 27.4.0, build bde2b89
- 使用コンテナ: maven:3, tomcat:11
compose.yaml の作成
services:
app:
image: maven:3
volumes:
- .:/workspaces
# tomcat11 との共有ディレクトリ
# ビルドした war ファイルをここに格納する
- firststep-webapps:/tomcat-webapps
command: "sleep infinity"
tomcat:
image: tomcat:11
volumes:
- firststep-webapps:/usr/local/tomcat/webapps
ports:
- 8080:8080
volumes:
firststep-webapps:
driver: local
開発環境の起動
docker compose up -d
開発環境へ接続
docker compose exec app bash
Maven プロジェクトの作成
ひな形の作成
mvn archetype:generate -DgroupId=dev.mikoto2000.study.servlet -DartifactId=firststep -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
ただし、このプロジェクトは依存が足りなかったり Servlet が jakarta
になる前のものだったりするので、 pom.xml
や
web.xml
を修正する。
pom.xml
の修正
${PROJECT_ROOT}/pom.xml
に以下依存を追加する。
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.2</version>
</dependency>
web.xml
の修正
${PROJECT_ROOT}/src/main/webapp/WEB-INF/web.xml
を修正。
before:
<!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>
</web-app>
after:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>MyApp</display-name>
</web-app>
開発
実装
${PROJECT_ROOT}/src/main/java/dev/mikoto2000/study/servlet/firststep/HelloServlet.java
に Servlet を実装する。
package dev.mikoto2000.study.servlet.firststep;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("<h1>Hello, Servlet!</h1>");
}
}
ビルド
mvn package
${PROJECT_ROOT}/target/firststep.war
が作成される。
デプロイ
/tomcat-webapps
が tomcat
のアプリデプロイディレクトリと共有されているので、 war
ファイルをそこにコピーする。
cp target/firststep.war /tomcat-webapps/
動作確認
http://localhost:8080/firststep/hello
へアクセスすると、
Hello, Servlet!
が表示される。
以上。