Skip to content

Commit 0afacf3

Browse files
author
Mahdi
committed
add 05-apache-tomcat
1 parent ced309e commit 0afacf3

8 files changed

Lines changed: 180 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,5 @@ nbdist/
3838
nbactions.xml
3939
nb-configuration.xml
4040
*.log
41+
tomcat.*/
42+
temp/

04-simple-dependency/src/main/java/module-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module p03_http_server {
1+
module p04_simple_dependency {
22
requires jos.api;
33
requires org.slf4j;
44
requires p00_common;

05-apache-tomcat/pom.xml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xmlns="http://maven.apache.org/POM/4.0.0"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>ir.moke</groupId>
9+
<artifactId>example-modules</artifactId>
10+
<version>1.0-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>05-apache-tomcat</artifactId>
14+
<version>1.0-SNAPSHOT</version>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>ir.moke.jos</groupId>
19+
<artifactId>jos-api</artifactId>
20+
</dependency>
21+
<dependency>
22+
<groupId>org.slf4j</groupId>
23+
<artifactId>slf4j-api</artifactId>
24+
</dependency>
25+
26+
<!-- Tomcat -->
27+
<dependency>
28+
<groupId>org.apache.tomcat.embed</groupId>
29+
<artifactId>tomcat-embed-core</artifactId>
30+
<version>10.1.24</version>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.apache.tomcat.embed</groupId>
34+
<artifactId>tomcat-embed-jasper</artifactId>
35+
<version>10.1.24</version>
36+
</dependency>
37+
</dependencies>
38+
39+
<build>
40+
<plugins>
41+
<plugin>
42+
<groupId>ir.moke.jpkg</groupId>
43+
<artifactId>maven-jpkg</artifactId>
44+
<version>1.0</version>
45+
<configuration>
46+
<name>05-apache-tomcat</name>
47+
<version>0.1</version>
48+
<description>Apache tomcat module</description>
49+
<maintainer>Mahdi Sheikh Hosseini</maintainer>
50+
</configuration>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
55+
</project>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package ir.moke.module.tomcat;
2+
3+
import ir.moke.module.tomcat.servlet.HelloServlet;
4+
import org.apache.catalina.Context;
5+
import org.apache.catalina.startup.Tomcat;
6+
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.io.IOException;
11+
import java.nio.file.Files;
12+
import java.nio.file.Path;
13+
import java.util.Comparator;
14+
import java.util.Optional;
15+
import java.util.stream.Stream;
16+
17+
public class HttpContainer {
18+
public static final HttpContainer instance = new HttpContainer();
19+
private static final Logger logger = LoggerFactory.getLogger(HttpContainer.class);
20+
private static final String contextPath = "/app";
21+
private static final String host = System.getenv("HTTP_SERVER_HOST");
22+
private static final String port = System.getenv("HTTP_SERVER_PORT");
23+
private static final String appBase = "/tmp/tomcat";
24+
private static Tomcat tomcat;
25+
26+
private HttpContainer() {
27+
createAppBaseDirectory();
28+
TomcatURLStreamHandlerFactory.disable();
29+
tomcat = new Tomcat();
30+
tomcat.setHostname(Optional.ofNullable(host).orElse("0.0.0.0"));
31+
tomcat.setPort(Integer.parseInt(Optional.ofNullable(port).orElse("8080")));
32+
tomcat.setBaseDir(appBase);
33+
34+
Context context = tomcat.addWebapp(contextPath, appBase);
35+
36+
tomcat.addServlet(contextPath, "hello", new HelloServlet());
37+
context.addServletMappingDecoded("/hello", "hello");
38+
}
39+
40+
private static void createAppBaseDirectory() {
41+
try {
42+
Path appBasePath = Path.of(appBase);
43+
if (!Files.exists(appBasePath)) {
44+
Files.createDirectory(appBasePath);
45+
}
46+
} catch (IOException e) {
47+
throw new RuntimeException(e);
48+
}
49+
}
50+
51+
public void start() {
52+
try {
53+
tomcat.getConnector();
54+
tomcat.start();
55+
logger.info("Tomcat server started");
56+
tomcat.getServer().await();
57+
} catch (Exception e) {
58+
logger.error("Tomcat error", e);
59+
}
60+
}
61+
62+
public void stop() {
63+
try (Stream<Path> pathStream = Files.walk(Path.of(appBase))) {
64+
pathStream.sorted(Comparator.reverseOrder())
65+
.map(Path::toFile)
66+
.forEach(java.io.File::delete);
67+
68+
tomcat.stop();
69+
logger.info("Tomcat server stopped");
70+
} catch (Exception e) {
71+
logger.error("Tomcat error", e);
72+
}
73+
}
74+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ir.moke.module.tomcat;
2+
3+
import ir.moke.jos.api.JModule;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
public class ModuleRunner implements JModule {
8+
private static final Logger logger = LoggerFactory.getLogger(ModuleRunner.class);
9+
10+
@Override
11+
public void start() {
12+
logger.info("Start module");
13+
HttpContainer.instance.start();
14+
}
15+
16+
@Override
17+
public void stop() {
18+
logger.info("Stop module");
19+
HttpContainer.instance.stop();
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package ir.moke.module.tomcat.servlet;
2+
3+
import jakarta.servlet.ServletException;
4+
import jakarta.servlet.http.HttpServlet;
5+
import jakarta.servlet.http.HttpServletRequest;
6+
import jakarta.servlet.http.HttpServletResponse;
7+
8+
import java.io.IOException;
9+
import java.io.PrintWriter;
10+
11+
public class HelloServlet extends HttpServlet {
12+
@Override
13+
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
14+
PrintWriter writer = resp.getWriter();
15+
writer.println("Hello dear!");
16+
writer.flush();
17+
writer.close();
18+
}
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module p05_apache_tomcat {
2+
requires org.slf4j;
3+
requires org.apache.tomcat.embed.core;
4+
requires jos.api;
5+
6+
provides ir.moke.jos.api.JModule with ir.moke.module.tomcat.ModuleRunner;
7+
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<module>02-timer-task</module>
1616
<module>03-http-server</module>
1717
<module>04-simple-dependency</module>
18+
<module>05-apache-tomcat</module>
1819
</modules>
1920

2021
<dependencyManagement>

0 commit comments

Comments
 (0)