The more I work with Jetty, the more I love it. It’s really amazing to have a web server in your hand that you can modify at will. I like being able to include a light web server in my application even on tiny programs.
Here is all you need : Jetty.
The objective of this example is to create a fully working web server in as few lines as possible..
The project structure :
The main :
package ceb.demo;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class WebServerWithJetty {
public static void main(String[] args) throws Exception {
WebAppContext context = new WebAppContext();
context.setDefaultsDescriptor("webapp/WEB-INF/webdefault.xml");
context.setDescriptor("webapp/WEB-INF/web.xml");
context.setResourceBase("webapp/");
context.setContextPath("/");
Server server = new Server(10000);
server.setHandler(context);
server.start();
server.join();
}
}
Some explanations :
- The default descriptor (
webdefault.xml
) is set because I want to be able to override the one which comes by default with Jetty. This file defines the configuration needed for a default web application. If you don’t specify yours then Jetty load his own from this location org.eclipse.jetty.webapp.webdefault.xml
. If you look inside, you find the configuration of the servlet which handle static content, the servlet for jsp files and few more parameters.
- The descriptor (
web.xml
) contains your own settings, your servlets, filters…
- The resource base defines the path to your webapp files (static content or jsp source files).
- The context path is the prefix of your application.
- The last lines are straightforward, they define the listening port of your application.
The content of the web.xml file (empty now) but it’s here you will insert your servlet settings :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
webdefault.xml reference.
The index.jsp file :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Hello world !
</body>
</html>
Now, you will be able to serve static and dynamic content locate in your webapp directory. Your application is accessible from url : http://localhost:10000/
In a future post, you will see how to add servlets, filters to change the default behavior of this application.