title: How do I write a simple Servlet for Jetty using Eclipse?
body: <p>I downloaded Eclipse for Java EE and Jetty 8.1 and would like to implement a very simple Servlet.</p>
  
  <p>Jetty works fine when I start it using <code>java -jar start.jar</code>.</p>
  
  <p>To develop the Servlet I did this:</p>
  
  <ol>
  <li><p>In Eclipse, I choosed "New Dynamic Web Project".</p></li>
  <li><p>I added <code>jetty\lib\servlet-api-3.0.jar</code> to the "Build Path" in Eclipse.</p></li>
  <li><p>In that project, "New Servlet", and a Servlet was generated and I added some code:</p>
  
  <pre><code>/**
   * Servlet implementation class MyServlet
   */
  @WebServlet("/MyServlet")
  public class MyServlet extends HttpServlet {
      private static final long serialVersionUID = 1L;
  
      /**
       * @see HttpServlet#doGet(HttpServletRequest request, 
                  HttpServletResponse response)
       */
      protected void doGet(HttpServletRequest request, 
                  HttpServletResponse response)
          throws ServletException, IOException {
          PrintWriter out = response.getWriter();
          out.println("&lt;html&gt;&lt;body&gt;&lt;h1&gt;My Servlet&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;");
      }
  
      /**
       * @see HttpServlet#doPost(HttpServletRequest request, 
                  HttpServletResponse response)
       */
      protected void doPost(HttpServletRequest request, 
                  HttpServletResponse response)
          throws ServletException, IOException {
          // TODO Auto-generated method stub
      }
  
  }
  </code></pre></li>
  <li><p>I created a file <code>web.xml</code> in <code>WebContent\WEB-INF\web.xml</code> with this content:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  &lt;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"&gt;
  &lt;servlet&gt;
      &lt;servlet-name&gt;My Servlet&lt;/servlet-name&gt;
  &lt;servlet-class&gt;MyServlet.class&lt;/servlet-class&gt;
  &lt;/servlet&gt;
  
  &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;My Servlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/Servlet&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
  </code></pre>
  
  <p></p></li>
  <li><p>I copied the compiled <code>.class</code>-files in <code>build\classes</code> to <code>WebContent\WEB-INF\classes</code></p></li>
  <li><p>Now I choose to Export the project as a <code>.war</code>-file to <code>jetty\webapps\MySite.war</code>.</p></li>
  <li><p>I start Jetty with <code>java -jar start.jar</code> and visit <code>localhost:8080/MySite/Servlet</code> but now I get this message:</p>
  
  <pre><code>Servlet Not Initialized
  
  javax.servlet.UnavailableException: Servlet Not Initialized
  at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:546)
  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:485)
  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
  at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
  at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
  at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:412)
  at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
  at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
  at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
  at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
  at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
  at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
  at org.eclipse.jetty.server.Server.handle(Server.java:351)
  at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:451)
  at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:916)
  at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:647)
  at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:233)
  at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
  at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:615)
  at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
  at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
  at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
  at java.lang.Thread.run(Thread.java:722)
  </code></pre></li>
  </ol>
  
  <p>and if I visit <code>localhost:8080/MySite/</code> I see two folders <code>WEB-INF\</code> and <code>META-INF\</code> both with size <code>0 bytes</code>.</p>
  
  <p>So it doesn't look like my <code>.war</code>-export in Eclipse worked.</p>
  
  <p>How do I export my simple Servlet for Jetty using Eclipse?</p>
  
  <hr>
  
  <p>I have now installed the <a href="http://wiki.eclipse.org/Jetty_WTP_Plugin" rel="noreferrer">Jetty WTP plugin</a> for Eclipse, but I can't run this servlet using it:</p>
  
  <pre><code>2012-01-30 10:06:50.322:INFO:oejs.Server:jetty-8.1.0.RC4
  2012-01-30 10:06:50.353:INFO:oejdp.ScanningAppProvider:Deployment monitor C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps at interval 1
  2012-01-30 10:06:50.353:INFO:oejdp.ScanningAppProvider:Deployment monitor C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\contexts at interval 1
  2012-01-30 10:06:50.353:INFO:oejd.DeploymentManager:Deployable added: C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\contexts\MySite.xml
  2012-01-30 10:06:50.650:WARN:oejuc.AbstractLifeCycle:FAILED o.e.j.w.WebAppContext{/MySite,file:/C:/Users/Jonas/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MySite/},C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0/wtpwebapps/MySite: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
  java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
      at org.eclipse.jetty.annotations.AnnotationConfiguration.createAnnotationParser(AnnotationConfiguration.java:111)
      at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:73)
      at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:428)
      at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208)
      at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
      at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
      at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:183)
      at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:491)
      at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:138)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:142)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:53)
      at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604)
      at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535)
      at org.eclipse.jetty.util.Scanner.scan(Scanner.java:398)
      at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:332)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:118)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:552)
      at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:227)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:58)
      at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53)
      at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91)
      at org.eclipse.jetty.server.Server.doStart(Server.java:263)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1214)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1137)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.eclipse.jetty.start.Main.invokeMain(Main.java:457)
      at org.eclipse.jetty.start.Main.start(Main.java:600)
      at org.eclipse.jetty.start.Main.main(Main.java:82)
  Caused by: 
  java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
      at java.net.URLClassLoader$1.run(Unknown Source)
      at java.net.URLClassLoader$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at org.eclipse.jetty.annotations.AnnotationConfiguration.createAnnotationParser(AnnotationConfiguration.java:111)
      at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:73)
      at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:428)
      at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208)
      at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
      at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
      at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:183)
      at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:491)
      at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:138)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:142)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:53)
      at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604)
      at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535)
      at org.eclipse.jetty.util.Scanner.scan(Scanner.java:398)
      at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:332)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:118)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:552)
      at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:227)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:58)
      at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53)
      at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91)
      at org.eclipse.jetty.server.Server.doStart(Server.java:263)
      at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
      at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1214)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1137)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.eclipse.jetty.start.Main.invokeMain(Main.java:457)
      at org.eclipse.jetty.start.Main.start(Main.java:600)
      at org.eclipse.jetty.start.Main.main(Main.java:82)
  </code></pre>