http://docs.codehaus.org/display/JETTY/Downloading+Jetty
A servlet is the package defined by Sun to handle HTTP requests and to create web applications.
Jetty is a 100% Java HTTP Server and Servlet Container.
Jetty's home page is:
http://jetty.mortbay.org/jetty
You can download Jetty 6.0 at:
http://docs.codehaus.org/display/JETTY/Downloading+Jetty
A simple servlet environment can be created by copying the following jar files from jetty-6.0.1/lib/ to a directory in your CLASSPATH.
A simple server with one servlet is created with:
org.mortbay.jetty.Server server = new org.mortbay.jetty.Server( 8080 ); org.mortbay.jetty.servlet.Context context = new org.mortbay.jetty.servlet.Context( server, "/" ); context.addServlet( EchoServlet.class , "/*"); server.start(); server.join(); } }
The "/*" argument to context.addServlet
means that any path in the URL will activate the servlet.
The server.start() method call starts the server.
The server.join() method call waits for the
server to terminate.
The servlet echos its http request.
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log( "get" ); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println( request ); out.println( "date = " + (new Date()) ); out.flush(); }
The response.getWriter() call returns
a writer that transmits any content to the waiting HTTP client.
Assuming that the jar files are placed in the CLASSPATH,
the EchoServlet is compiled with:
javac EchoServlet.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class EchoServlet extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log( "get" ); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println( request ); out.println( "date = " + (new Date()) ); out.flush(); } public static void main(String[] args) throws Exception { org.mortbay.jetty.Server server = new org.mortbay.jetty.Server( 8080 ); org.mortbay.jetty.servlet.Context context = new org.mortbay.jetty.servlet.Context( server, "/" ); context.addServlet( EchoServlet.class , "/*"); server.start(); server.join(); } }
The server is run by the command:
java EchoServlet
A Jetty based web server that serves static web content (i.e., files) can be created with:
import org.mortbay.jetty.Handler; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.DefaultHandler; import org.mortbay.jetty.handler.HandlerList; import org.mortbay.jetty.handler.ResourceHandler; import org.mortbay.jetty.handler.ContextHandlerCollection; import org.mortbay.jetty.servlet.Context; public class SimpleServer { public static void main(String[] args) throws Exception { int port = 8880; String baseDir = "."; if (args.length >= 1 ) { port = Integer.parseInt(args[0]); if (args.length >= 2 ) { baseDir = args[1]; } } Server server = new Server(port); ResourceHandler resource = new ResourceHandler(); resource.setResourceBase( baseDir ); ContextHandlerCollection contexts = new ContextHandlerCollection(); Context servlets = new Context(contexts,"/servlet" ); servlets.addServlet( EchoServlet.class, "/echo/*" ); servlets.addServlet( CountServlet.class, "/count/*" ); server.addHandler( resource ); server.addHandler( contexts ); server.addHandler( new DefaultHandler() ); server.start(); server.join(); } }
In addition to serving any files, it also contains two servlets. These servlets are accessed with the URLs:
servlet/echo servlet/count
The SimpleServer is compiled with:
javac SimpleServer.java
The index.html file in the base directory is served with the, /, root path.
<html> <head> <title>Index for simple</title> </head> <body> <p> Served with Jetty </p> <p> <a href="SimpleServer.java">SimpleServer.java</a> <br> <a href="servlet/echo">echo</a> <br> <a href="servlet/count">count</a> <br> </p> </body> </html>
The count servlet is implemented with:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class CountServlet extends HttpServlet { private int count = 0; protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String pathInfo = request.getPathInfo(); out.println( "<h1>" ); out.println( "count = " + count + " " + (new Date()) ); out.println( "</h1>" ); log( "count = " + count ); count++; out.flush(); } }