Tutoriel de création de service Web RESTful avec Java, Eclipse. Apache Tomcat, ne fonctionne pas
J'aimerais créer et exécuter un simple Reposant application sur mon pc.
Je suis en utilisant le langage de programmation Java sur Eclipse Helios IDE, avec Apache Tomcat 7 serveur, sur un Microsoft Windows Xp système d'exploitation.
J'ai essayé de reproduire la même procédure de ce tutoriel (à partir de 3 à 3,4 étapes) sur mon pc, mais il ne fonctionne pas.
Voici ce que j'ai fait:
- créé une Dynamique de projet sur Eclipse, Apache Tomcat 7 paramètres
- mettre mon Maillot et jsr311-api-1.0 les fichiers jar dans le projet
\WEB-INF\lib\
répertoire - copié les parties de code à partir de la page web pour mon projet
- cliqué avec le bouton droit sur le projet, cliqué sur "Exécuter en tant qu' -> Exécuter sur le serveur"
- essayé d'atteindre la
http://localhost:8080/de.vogella.jersey.first/rest/hello
Mais il y a ce que je vois:
Pourquoi n'est-il pas de travail?
Qu'ai-je fait de mal?
Pourquoi?
Merci beaucoup!
Edit:
Voici ce que la console dit:
25-set-2012 9.35.07 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Programmi\Java\jdk1.6.0_21\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Programmi/Java/jre6/bin/client;C:/Programmi/Java/jre6/bin;C:/Programmi/Java/jre6/lib/i386;C:\WINDOWS\;C:\WINDOWS\System32;"C:\ApacheMaven\apache-maven-3.0.4\bin";C:\WINDOWS\;C:\WINDOWS\System32;"C:\ApacheMaven\apache-maven-3.0.4\bin";C:\WINDOWS\;C:\WINDOWS\System32;"C:\ApacheMaven\apache-maven-3.0.4\bin";C:\WINDOWS\System32;C:\WINDOWS\;C:\WINDOWS\System32; C:\Programmi\R-Language\R-2.13.1\bin\;C:\Programmi\OpenVPN\bin\; C:\Programmi\Java\jdk1.6.0_21\bin\; "C:\ApacheMaven\apache-maven-3.0.4\bin";;C:\Programmi\eclipseEC;
25-set-2012 9.35.08 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVVERTENZA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:de.vogella.jersey.first' did not find a matching property.
25-set-2012 9.35.10 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
25-set-2012 9.35.10 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
25-set-2012 9.35.10 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3459 ms
25-set-2012 9.35.10 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
25-set-2012 9.35.10 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.6
25-set-2012 9.35.11 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: urn:com:sun:jersey:api:view is already defined
25-set-2012 9.35.12 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: urn:com:sun:jersey:api:view is already defined
25-set-2012 9.35.12 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: urn:com:sun:jersey:api:view is already defined
25-set-2012 9.35.12 org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Jersey REST Service as unavailable
25-set-2012 9.35.12 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: Servlet /de.vogella.jersey.first threw load() exception
java.lang.ClassNotFoundException: javax.servlet.Filter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1488)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:996)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4741)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5062)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5057)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
25-set-2012 9.35.12 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
25-set-2012 9.35.12 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
25-set-2012 9.35.12 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1790 ms
Peut-être il ya une certaine classe manquante?
source d'informationauteur DavideChicco.it
Vous devez vous connecter pour publier un commentaire.
Pour résoudre votre problème, sans l'aide de Maven, vous devez ajouter de JAX-RS facette de votre projet. Ce qui se passe ici est que l'Éclipse n'est pas le déploiement de la droite libs pour le serveur. Cette configuration peut être consulté par le biais de Propriétés de votre projet | Projet Facettes.
Pour être honnête, je ne sais pas lesquelles des pots à ajouter pour faire de Jersey de travail, parce que j'utilise Maven pour gérer les dépendances. Ainsi, au lieu de le fichier zip, j'ai téléchargé le Maillot bundleet configuré le JAX-RS facette avec elle. L'effet de ceci peut être vu sur les Propriétés du projet | Déploiement de l'Assemblée, où Jersey libs sont déjà configurés pour être déployé. Par la façon dont est là, vous pouvez configurer manuellement le déploiement de l'libs pour le serveur.
Mais je me suis rappelé pourquoi j'utilise Maven pour gérer les dépendances. Le paquet ne contient pas tout ce dont il a besoin pour fonctionner Jersey. Il manque l'asm pot (présent dans le fichier zip). J'ai donc dû l'ajouter à des projets de build path, et de reconfigurer de déploiement de l'assemblée manuellement....
Donc, voici une tutoriel avec Maven, Jersey et Eclipse. Essayez-le et tirez vos conclusions.
Je suis passé par le même tutoriel pour développer mon premier service RESTFUL. Au début, j'ai aussi eu des erreurs 404 quelques fois, donc je ne cessait de changer quelques choses, enfin il a travaillé pour moi. C'est ce que j'ai fait-
1) a enlevé le reste de l'URL-Pattern onglet; je pense que c'est par erreur.
2) la racine de contexte dans l'URL plutôt que le nom du package.
mon url est,
"http://mylocalhost:8080/contextroot/classname
qui est défini dans le @chemin d'annotation.espère que cela aide.
La servlet.jar ne devrait pas être à l'résultant de la guerre de fichier (ou dans WEB-INF/lib). Il doit être fourni par le serveur d'application lui-même. (voir Tomcat FAQ)
Si vous utilisez Maven pour la construction du projet, vous pouvez définir la portée de la servlet api comme
provided
(lien).Une autre question similaire ici sur StackOverflow.
Je reprends votre exemple, et il fonctionne hors de la boîte sur ma machine. J'ai téléchargé jersey-archive-1.14.zip et de mettre tout le contenu du répertoire lib dans WEB-INF/lib, et pas seulement
Jersey
etjsr311-api-1.0 jar
comme vous l'avez fait.Les pots sont:
Certains d'entre eux pourraient inutile, vous pourriez essayer de les réduire. Mais commencer avec eux tous.
Le message d'erreur est étrange, bien. Il est dit que
javax.servlet.Filter
est manquant, qui doit vivre dans<your tomcat dir>/lib/servlet-api.jar
. Ce fichier est toujours sur le chemin de la classe lorsque vous exécutez tomcat.Vous devez supprimer servlet.jar ou tout autre récipient contenant de l'javax.servlet.Filtre à partir de votre WEB-INF/lib du répertoire.
Tandis que vous aurez besoin de la classe javax.servlet.Filtre sur votre compilation classpath pour l'exemple de code pour compiler, vous devez vous assurer que vous ne comprennent pas cette classe dans votre webapp. À partir du Tomcat chargeur de classe HOWTO:
Fondamentalement, l' (probablement) servlet.jar dans la webapp est probablement de ne pas être trouvé correctement d/t la sécurité configuré dans le conteneur Tomcat.
Vous pouvez voir si javax.servlet.Le filtre est chargé à partir d'un étrange endroit en tournant des commentaires de chargement de classe
verbose:class
. Recherche de la classe, si cela ne vient pas de l'Tomcat libs, qui est probablement votre problème.Peut-être que vous êtes absent servlet-api.jar. Ajouter plus tard jar dans votre /WEB-INF/lib ou classpath et voir cela fonctionne ou pas.
Il semble qu'il ne trouve pas la servlet jersey pots dans le classpath. Assurez-vous d'inclure. Je suppose que vous paquet dans une guerre et de déployer avant de tester ce droit. Il suffit donc de vérifier si la guerre comprend tous les pots qui ont été disponibles pour votre application au moment de la compilation.
Comme les réponses ci-dessus mentionné. Il vous manque quelques pots. Vous pouvez soit ajouter les fichiers jar dans Projet>WebContent>WEB-INF>lib> dossier ou dans votre serveur dossier lib (par exemple, \apache-tomcat\lib )
Essayer de coller de la liste ou de la capture d'écran de votre deux lib, si vous souhaitez que nous vous dire exactement quoi jar que vous êtes absent.
Espère que cette aide
Aussi loin que je peux dire, de l'exécution de Tomcat depuis Eclipse. Il est possible que vous n'utilisez pas le répertoire d'installation dans votre ordinateur (c'est à dire celui où vous avez copié les Pots), mais sont en fait à l'aide de la copie temporaire qui Éclipse crée localement (désolé, je ne suis pas sur mon dev ordinateur atm ne peut donc pas vérifier les détails)?
À partir de la mémoire, vous avez 2 options:
Vous avez besoin de changer le (travail) répertoire Eclipse pour le Tomcat celui où vous avez réellement le Tomcat fichiers.
Vous devez ajouter les Pots pour le Tomcat dans Eclipse avec l'interface graphique au sein d'Eclipse.
Sinon, j'ai peut être tout faux 😉
EDIT: y Compris une capture d'écran de l'bits, je suis en train de parler.
Pour mes options ci-dessus:
Vous devez ajouter tous les pots, que vous trouverez en jersey de 1,6 archive, téléchargez cette d'archive et ajoutez tous les bocaux à WebContent/WEB-INF/lib dossier de votre projet.
J'ai eu cette erreur pendant plus d'une journée! Il s'avère que le problème vient de l'utilisation de différentes versions de Jersey. Si vous remplacez votre web.xml contenu par le contenu que je présente ci-dessous, il fera beau!
Espérons-le, ma réponse sera de gagner beaucoup de temps pour quelqu'un d'autre qui décide également de suivre le même tutoriel!
Supprimer l'servlet.jar de WEB-INF/lib du dossier. Servlet.jar ne devrait pas être là le problème est résolu pour moi.
J'ai eu le code d'État HTTP 404 question aussi, en suivant le tutoriel.
D'abord j'ai tenté de JAX-RS Projet Facette dans Eclipse soit avec Jersey bibliothèques 1.18 et 2,15 mais il ne fonctionne pas.
Finalement j'ai résolu le problème en remplaçant le nom du package (de.vogella.jersey.en) dans l'URL de la racine de contexte (c'est à dire le projet eclipse nom).
Ce tutoriel par mkyong.com m'a donné l'astuce pour trouver la solution. De toute façon je ne sais pas si le nom du package dans l'URL est certainement une erreur ou si il ya quelques détails de la configuration qui pourrait le faire fonctionner ainsi.