LoginSignup
3
1

More than 3 years have passed since last update.

Java Servlet と JSP で Hello World (Maven + Jetty で手軽に Web サーバ起動)

Posted at

概要

  • Java Servlet と JSP をローカル環境で動かす
  • サーブレットコンテナには Jetty を使用する
  • Maven のプラグインで Jetty を起動する

環境

  • macOS Mojave
  • OpenJDK 11.0.2
  • Apache Maven 3.6.1
  • Jetty 9.4.19.v20190610 (Servlet API 3.1, JSP 2.3)

ソースコード

ソースコード一覧

  • pom.xml: Maven 用ビルド設定ファイル
  • MyServlet.java: Java サーブレットのソースコード
  • index.jsp: JSP のソースコード
  • web.xml: Web アプリケーションの設定ファイル
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── MyServlet.java
        └── webapp
            ├── WEB-INF
            │   └── web.xml
            └── index.jsp

pom.xml: Maven 用ビルド設定ファイル

  • Java Servlet API 3.1 を使用するため dependency に javax.servlet-api を追加する。
  • Maven から手軽に Jetty を起動して動作確認できるよう jetty-maven-plugin を追加する。
<?xml version="1.0" encoding="UTF-8"?>

<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>com.example</groupId>
  <artifactId>my-servlet</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>my-servlet</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <jetty.version>9.4.19.v20190610</jetty.version>
  </properties>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- https://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html -->
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.version}</version>
      </plugin>
    </plugins>
  </build>

</project>

MyServlet.java: Java サーブレットのソースコード

package com.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

public class MyServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/html; charset=utf-8");
    PrintWriter out = resp.getWriter();
    out.println("<html><body>Hello, Servlet World!</body></html>");
    out.flush();
    out.close();
  }
}

index.jsp: JSP のソースコード

<html><body>Hello JSP World!</body></html>

web.xml: Web アプリケーションの設定ファイル

  • MyServlet.java のサーブレットに /my-servlet/* でアクセスできるようマッピングしている。
<!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>My Servlet Web Application</display-name>

  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/my-servlet/*</url-pattern>
  </servlet-mapping>
</web-app>

Jetty を起動して Web アプリケーションにアクセスする

mvn jetty:run で Jetty を起動できる。

$ mvn jetty:run

http://localhost:8080/my-servlet/ にアクセスすると MyServlet.java で出力したコンテンツが返ってくる。

$ curl http://localhost:8080/my-servlet/
<html><body>Hello, Servlet World!</body></html>

http://localhost:8080/ にアクセスすると index.jsp に書いたコンテンツが返ってくる。

$ curl http://localhost:8080/
<html><body>Hello JSP World!</body></html>

参考資料

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1