Languages
[Edit]
EN

Java - example HTTP Servlet (Embedded Tomcat Server run from source code)

5 points
Created by:
TheDalot
390

In this article, we want to show how to run pure HTTP Servlet (Embedded Tomcat Server) in Java.

Pure HTTP Servlet run under Embedded Tomcat Server.
Pure HTTP Servlet run under Embedded Tomcat Server.

Project structure

Pure HTTP Servlet project under Embedded Tomcat Server.
Pure HTTP Servlet project under Embedded Tomcat Server.

Project files

src/com/example/DemoApplication.java file:

package com.example;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Server;
import org.apache.catalina.Service;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class DemoApplication {

	public static void main(String[] args) throws LifecycleException {

		class MyServlet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                PrintWriter writer = response.getWriter();
                writer.println("<html>");
                writer.println("<title>Welcome</title>");
                writer.println("<body>Hi!</body>");
                writer.println("</html>");
				writer.flush();
            }
        }

		Tomcat tomcat = new Tomcat();
		Connector connector = tomcat.getConnector();
        Context context = tomcat.addContext("", getAbsolutePath("."));
		connector.setPort(8080);
        tomcat.addServlet("", "MyServlet", new MyServlet());
        context.addServletMappingDecoded("/path/to/my-servlet", "MyServlet");
        tomcat.start();
		Service service = tomcat.getService();
		Server server = tomcat.getServer();
        service.addConnector(connector);
        server.await();
	}

	private static String getAbsolutePath(String path) {
        File file = new File(path);
		return file.getAbsolutePath();
	}
}

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:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	
	<modelVersion>4.0.0</modelVersion>
	
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>

	<name>demo</name>
	<description>Demo project for Servlet</description>
	<version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

 	<properties>
        <java.version>17</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>

        <!-- #################### -->
        <!-- TOMCAT               -->
        <!-- #################### -->

        <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>10.1.13</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>10.1.13</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper</artifactId>
            <version>10.1.13</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper-el -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper-el</artifactId>
            <version>10.1.13</version>
        </dependency>
                
        <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
            <version>10.1.13</version>
        </dependency>

        <!-- #################### -->
        <!-- TESTING              -->
        <!-- #################### -->

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.6.2</version>
            <scope>test</scope>
        </dependency>

        <!-- #################### -->
        <!-- PREPROCESSORS        -->
        <!-- #################### -->

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.30</version>
                        </path>
                    </annotationProcessorPaths>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

See also

  1. VS Code - create Java Maven project

Alternative titles

  1. Java - create simple Embedded Tomcat Server from source code
  2. Java - example HTTP Servlet (Embedded Tomcat Server run from source code)
  3. Java - run simple Embedded Tomcat Server from source code
  4. Java - example HTTP Servlet using only Java
Donate to Dirask
Our content is created by volunteers - like Wikipedia. If you think, the things we do are good, donate us. Thanks!
Join to our subscribers to be up to date with content, news and offers.
Native Advertising
🚀
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - we help you to
solve coding problems.
Ask question.

❤️💻 🙂

Join