EN
Java - example HTTP Servlet (Embedded Tomcat Server run from source code)
5 points
In this article, we want to show how to run pure HTTP Servlet (Embedded Tomcat Server) in Java.


src/com/example/DemoApplication.java
file:
xxxxxxxxxx
1
package com.example;
2
3
import java.io.File;
4
import java.io.IOException;
5
import java.io.PrintWriter;
6
7
import org.apache.catalina.Context;
8
import org.apache.catalina.LifecycleException;
9
import org.apache.catalina.Server;
10
import org.apache.catalina.Service;
11
import org.apache.catalina.connector.Connector;
12
import org.apache.catalina.startup.Tomcat;
13
14
import jakarta.servlet.ServletException;
15
import jakarta.servlet.http.HttpServlet;
16
import jakarta.servlet.http.HttpServletRequest;
17
import jakarta.servlet.http.HttpServletResponse;
18
19
public class DemoApplication {
20
21
public static void main(String[] args) throws LifecycleException {
22
23
class MyServlet extends HttpServlet {
24
25
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
26
PrintWriter writer = response.getWriter();
27
writer.println("<html>");
28
writer.println("<title>Welcome</title>");
29
writer.println("<body>Hi!</body>");
30
writer.println("</html>");
31
writer.flush();
32
}
33
}
34
35
Tomcat tomcat = new Tomcat();
36
Connector connector = tomcat.getConnector();
37
Context context = tomcat.addContext("", getAbsolutePath("."));
38
connector.setPort(8080);
39
tomcat.addServlet("", "MyServlet", new MyServlet());
40
context.addServletMappingDecoded("/path/to/my-servlet", "MyServlet");
41
tomcat.start();
42
Service service = tomcat.getService();
43
Server server = tomcat.getServer();
44
service.addConnector(connector);
45
server.await();
46
}
47
48
private static String getAbsolutePath(String path) {
49
File file = new File(path);
50
return file.getAbsolutePath();
51
}
52
}
Warning: it is important to keep operations order in presented source code when Tomcat Server is run - in other case it won't work.
pom.xml
file:
xxxxxxxxxx
1
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4
5
<modelVersion>4.0.0</modelVersion>
6
7
<groupId>com.example</groupId>
8
<artifactId>demo</artifactId>
9
10
<name>demo</name>
11
<description>Demo project for Servlet</description>
12
<version>0.0.1-SNAPSHOT</version>
13
<packaging>jar</packaging>
14
15
<properties>
16
<java.version>17</java.version>
17
<maven.compiler.source>${java.version}</maven.compiler.source>
18
<maven.compiler.target>${java.version}</maven.compiler.target>
19
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21
</properties>
22
23
<dependencies>
24
25
<!-- #################### -->
26
<!-- TOMCAT -->
27
<!-- #################### -->
28
29
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
30
<dependency>
31
<groupId>jakarta.servlet</groupId>
32
<artifactId>jakarta.servlet-api</artifactId>
33
<version>6.0.0</version>
34
<scope>provided</scope>
35
</dependency>
36
37
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
38
<dependency>
39
<groupId>org.apache.tomcat.embed</groupId>
40
<artifactId>tomcat-embed-core</artifactId>
41
<version>10.1.13</version>
42
</dependency>
43
44
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
45
<dependency>
46
<groupId>org.apache.tomcat.embed</groupId>
47
<artifactId>tomcat-embed-jasper</artifactId>
48
<version>10.1.13</version>
49
</dependency>
50
51
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
52
<dependency>
53
<groupId>org.apache.tomcat</groupId>
54
<artifactId>tomcat-jasper</artifactId>
55
<version>10.1.13</version>
56
</dependency>
57
58
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper-el -->
59
<dependency>
60
<groupId>org.apache.tomcat</groupId>
61
<artifactId>tomcat-jasper-el</artifactId>
62
<version>10.1.13</version>
63
</dependency>
64
65
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
66
<dependency>
67
<groupId>org.apache.tomcat</groupId>
68
<artifactId>tomcat-jsp-api</artifactId>
69
<version>10.1.13</version>
70
</dependency>
71
72
<!-- #################### -->
73
<!-- TESTING -->
74
<!-- #################### -->
75
76
<!-- https://mvnrepository.com/artifact/junit/junit -->
77
<dependency>
78
<groupId>junit</groupId>
79
<artifactId>junit</artifactId>
80
<version>4.13.2</version>
81
<scope>test</scope>
82
</dependency>
83
84
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
85
<dependency>
86
<groupId>org.assertj</groupId>
87
<artifactId>assertj-core</artifactId>
88
<version>3.6.2</version>
89
<scope>test</scope>
90
</dependency>
91
92
<!-- #################### -->
93
<!-- PREPROCESSORS -->
94
<!-- #################### -->
95
96
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
97
<dependency>
98
<groupId>org.projectlombok</groupId>
99
<artifactId>lombok</artifactId>
100
<version>1.18.30</version>
101
<scope>provided</scope>
102
</dependency>
103
104
</dependencies>
105
106
<build>
107
<finalName>${project.artifactId}</finalName>
108
<sourceDirectory>src</sourceDirectory>
109
<testSourceDirectory>test</testSourceDirectory>
110
<plugins>
111
<plugin>
112
<groupId>org.apache.maven.plugins</groupId>
113
<artifactId>maven-compiler-plugin</artifactId>
114
<version>3.7.0</version>
115
<configuration>
116
<annotationProcessorPaths>
117
<path>
118
<groupId>org.projectlombok</groupId>
119
<artifactId>lombok</artifactId>
120
<version>1.18.30</version>
121
</path>
122
</annotationProcessorPaths>
123
<source>${maven.compiler.source}</source>
124
<target>${maven.compiler.target}</target>
125
<verbose>true</verbose>
126
</configuration>
127
</plugin>
128
</plugins>
129
</build>
130
131
</project>