{"id":21633756,"url":"https://github.com/dgroomes/tomcat-playground","last_synced_at":"2026-05-22T05:12:28.360Z","repository":{"id":181687974,"uuid":"667141000","full_name":"dgroomes/tomcat-playground","owner":"dgroomes","description":"📚 Learning and exploring Apache Tomcat","archived":false,"fork":false,"pushed_at":"2024-05-19T15:42:44.000Z","size":78,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T00:14:18.644Z","etag":null,"topics":["apache-tomcat"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dgroomes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-16T19:15:50.000Z","updated_at":"2024-05-19T15:42:47.000Z","dependencies_parsed_at":"2023-12-03T06:25:35.034Z","dependency_job_id":"c93df5a9-5190-43ca-898d-315b506b84d9","html_url":"https://github.com/dgroomes/tomcat-playground","commit_stats":null,"previous_names":["dgroomes/tomcat-playground"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Ftomcat-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Ftomcat-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Ftomcat-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Ftomcat-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgroomes","download_url":"https://codeload.github.com/dgroomes/tomcat-playground/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244320175,"owners_count":20434088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-tomcat"],"created_at":"2024-11-25T03:13:43.319Z","updated_at":"2026-05-22T05:12:23.312Z","avatar_url":"https://github.com/dgroomes.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tomcat-playground\n\n📚 Learning and exploring Apache Tomcat.\n\n\u003e ### Apache Tomcat\n\u003e\n\u003e The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta\n\u003e Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These\n\u003e specifications are part of the Jakarta EE platform.\n\u003e\n\u003e -- \u003ccite\u003ehttps://tomcat.apache.org\u003c/cite\u003e\n\n\n## Overview\n\nWhile Tomcat is old and certainly has a dated appearance, it is still widely used, actively maintained and is even on\nthe cutting edge of the Java ecosystem with its support for the latest versions of the Jakarta EE specifications and\nexperimental support for Java virtual threads. I'd like to learn it by directly using its API. The `tomcat-playground`\nproject is a place for me to do that.\n\nThis might turn into more of a servlet playground than a Tomcat playground. We'll see.\n\n**NOTE**: This project was developed on macOS. It is for my own personal use.\n\n\n## Instructions\n\nFollow these instructions to build and run the example program.\n\n1. Pre-requisite: Java\n    * I used Java 21\n2. Build the program distribution\n    * ```shell\n      ./gradlew installDist\n      ```\n3. Start the demo program and web server\n    * ```shell\n      ./build/install/tomcat-playground/bin/tomcat-playground\n      ```\n4. Open the browser\n    * Let's see the final effect by opening the browser to \u003chttp://[::1]:8080/message\u003e. You should see a special\n      message from the server.\n    * The program will log something that looks like the following.\n    * ```text\n      23:39:48 [main] INFO dgroomes.Main - Let's learn about Apache Tomcat by running an embedded server...\n      23:39:49 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler [\"http-nio-8080\"]\n      23:39:49 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]\n      23:39:49 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.11]\n      23:39:49 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler [\"http-nio-8080\"]\n      23:39:49 [main] INFO dgroomes.Main - Open http://[::1]:8080/message in your browser to see the message. Press Ctrl-C to stop the program and server.\n      23:40:02 [http-nio-8080-exec-1] DEBUG access-log - 0:0:0:0:0:0:0:1 - - [02/Dec/2023:23:40:02 -0600] \"GET /message HTTP/1.1\" 200 31\n      ```\n5. Stop the server\n    * When you're ready, stop the demo program and server with the `Ctrl+C` key combination.\n\n\n## Wish List\n\nGeneral clean-ups, TODOs and things I wish to implement for this project:\n\n* [x] DONE Implement the project. Do the minimum to run an embedded Tomcat server (I'm not very interested in\n  a non-embedded Tomcat server at this time. I'm not sure that I'm using the right words).\n* [x] DONE Clean up the logging. Is Tomcat logging via SLF4J?\n* [x] DONE Access logs?\n* [x] DONE What are connectors and why do we need to do `getConnector()`?\n* [ ] Consider exploring the servlet API just a little bit more\n* [ ] Consider exploring Tomcat's support for Java virtual threads\n* [ ] Serve a static file (we love static content, let's have a working example).\n* [x] DONE Set the file stuff to a temp directory or something. I'm seeing a `tomcat.8080` directory in the project root.\n* [ ] What is Tomcat's (or I guess the Servlet API's) support for routing? I know there isn't really support but the\n  paths to the servlets your register is a form of simple routing. Though these days we really expect a router to key\n  off of path variables, query parameters, headers, etc. Can we extend the routing code? Where is it?\n\n\n## Reference\n\n* [Tomcat website](https://tomcat.apache.org/)\n* [Tomcat on GitHub](https://github.com/apache/tomcat)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroomes%2Ftomcat-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgroomes%2Ftomcat-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroomes%2Ftomcat-playground/lists"}