Jython Servlets
A servlet is a Java class that handles HTTP requests in a web container (Tomcat, Jetty). Jython can write servlets in Python: your class extends javax.servlet.http.HttpServlet and overrides doGet/doPost - the container treats it like any Java servlet. This was a classic Jython use case: dynamic web handlers with Python's brevity on a Java server.
A Minimal Servlet
from javax.servlet.http import HttpServlet, HttpServletRequest, HttpServletResponse
import java.io
class HelloServlet(HttpServlet):
def doGet(self, request, response):
response.setContentType("text/html")
out = response.getWriter()
try:
out.write("<html><body><h1>Hello from Jython</h1></body></html>")
finally:
out.flush()
def doPost(self, request, response):
name = request.getParameter("name") or "world"
response.setContentType("text/plain")
out = response.getWriter()
try:
out.write("Hello, " + name)
finally:
out.flush()
Registration in web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.python.util.PyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
The Jython distribution provides a PyServlet bridge that locates your Python servlet class by name, so the container can instantiate your Python class.
Deploying to Tomcat
- Put jython.jar (and any dependencies) in WEB-INF/lib of your webapp.
- Put your servlet .py file in WEB-INF (or a package directory it can import).
- Register the mapping in web.xml as above and redeploy.
- Curl the endpoint: curl "http://localhost:8080/myapp/hello?name=Ada".
Parameters, Cookies, Sessions
def doGet(self, request, response):
q = request.getParameter("q") # query string
page = request.getParameter("page") or "1"
session = request.getSession(True)
visits = session.getAttribute("visits") or 0
session.setAttribute("visits", int(visits) + 1)
cookie = javax.servlet.http.Cookie("theme", "dark")
cookie.setMaxAge(60 * 60 * 24)
response.addCookie(cookie)
response.setContentType("text/plain")
response.getWriter().write(
f"q={q} page={page} visits={visits + 1}")
A Modern Note
Newer projects more often run FastAPI, Spring Boot, or similar, and Jython servlets are a legacy pattern - but for existing Tomcat/Jetty deployments they remain a way to add Python handlers without rewriting in Java.
Summary
Write a Jython servlet by subclassing HttpServlet and implementing doGet/doPost in Python, register it through the PyServlet bridge in web.xml, and deploy jython.jar plus your .py file into the webapp's WEB-INF. You get full servlet API access (parameters, sessions, cookies) from concise Python on a standard Java container.