2012-01-30 11 views
10

Java EEとJetty 8.1用のEclipseをダウンロードしました。非常に単純なサーブレットを実装したいと考えています。Eclipseを使用して単純なサーブレットを作成するにはどうすればよいですか?

java -jar start.jarを使用して起動するとJettyが正常に動作します。私はこれをしたサーブレット開発するに

:Eclipseで

  1. を、私は "新しい動的Webプロジェクト" を選びました。

  2. 私はjetty\lib\servlet-api-3.0.jarをEclipseの "Build Path"に追加しました。そのプロジェクトで

  3. 、 "新しいサーブレット"、およびサーブレットが生成されたと私はいくつかのコードを追加:

    <?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"> 
    <servlet> 
        <servlet-name>My Servlet</servlet-name> 
    <servlet-class>MyServlet.class</servlet-class> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>My Servlet</servlet-name> 
        <url-pattern>/Servlet</url-pattern> 
    </servlet-mapping> 
    

    /** 
    * 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("<html><body><h1>My Servlet</h1></body></html>"); 
        } 
    
        /** 
        * @see HttpServlet#doPost(HttpServletRequest request, 
           HttpServletResponse response) 
        */ 
        protected void doPost(HttpServletRequest request, 
           HttpServletResponse response) 
         throws ServletException, IOException { 
         // TODO Auto-generated method stub 
        } 
    
    } 
    
  4. を私はこの内容でWebContent\WEB-INF\web.xmlでファイルweb.xmlを作成

  5. .class -filesをbuild\classesにコピーしました

  6. プロジェクトを.war-ファイルとしてエクスポートすると、jetty\webapps\MySite.warになります。

  7. 私はjava -jar start.jarで桟橋を開始し、localhost:8080/MySite/Servletを訪れるが、今、私はこのメッセージが表示されます。

    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) 
    

を、私はlocalhost:8080/MySite/を訪問する場合、私は2つのフォルダWEB-INF\とサイズ0 bytesMETA-INF\の両方を参照してください。

Eclipseの私の.war -exportのように見えません。

Eclipseを使用して単純なサーブレットをJettyにエクスポートするにはどうすればよいですか?


私は今、Eclipse用Jetty WTP pluginをインストールしたが、私はそれを使用してこのサーブレットを実行することはできません。

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) 

答えて

8

まず試してみてくださいとあり、あなたのweb.xmlが間違っています。

servlet-class要素には、サーブレットの完全修飾クラス名が含まれます。

ウェブから。xmlスキーマhttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdを923行目で使用しました。したがって、9行目のservlet-class要素の内容はではなくMyServletである必要があります。

第2に、サーブレット、フィルタ、またはリスナーを登録するための方法は1つだけ使用してください。アノテーションを使用して、サーブレットコンテナにアノテーションを登録したい場合。 web.xmlでサーブレットとサーブレットのマッピング要素を削除した方がよいでしょう。それ以外の場合は、Javaソースの注釈を削除する方がよいでしょう。またjetty run error for websockets project

+0

サーブレットクラスの要素を 'MyServlet.class'から' my.package.MyServlet'に変更し、 '@WebServlet'アノテーションをコメントアウトしました。ありがとう。 – Jonas

4

あなたがservetにアクセスしている方法が間違っている可能性があります。 我々が観察する場合は、展開している戦争はMySite.war であり、あなたが使用しているURLはlocalhost:8080\MyServlet\Servlet

localhost:8080\MySite\Servlet

+0

あなたがすることができます:あなたはweb.xmlのを使用する場合と、あなたはこれを試みることによって解決することができる最後に、あなたの第二の問題は、桟橋WTPのEclipseプラグインから来た3.0

に2.4からスキーマのバージョンを更新する必要がありますeclipseでプラグインを追加して、Eclipse自体を介してJettyサーバーに接続します。新しいサーバーを追加してみてください。その後、あなたは直接Eclipse内でアプリケーションを実行して戦争に輸出する必要はなく、別のJettyにパブリッシュすることができます –

+0

申し訳ありません、それは私のタイプミスです。私は 'localhost:8080 \ MySite \ Servlet'を訪れていました。 URI「localhost:8080 \ MyServlet \ Servlet」は '404 Not Found'を返します。私はプラグインを探しますが、warファイルもエクスポートする必要があります。 – Jonas

関連する問題