使用Java的RESTful web服务创建教程,Eclipse。Apache Tomcat,不工作
我想在我的电脑上创建并运行一个简单的RESTful应用程序。 我在EclipseHeliosIDE上使用Java编程语言,在MicrosoftWindowsXP操作系统上使用ApacheTomcat7服务器 我一直试图在我的电脑上复制相同的过程,但它不起作用 以下是我所做的:使用Java的RESTful web服务创建教程,Eclipse。Apache Tomcat,不工作,java,eclipse,rest,tomcat,web-applications,Java,Eclipse,Rest,Tomcat,Web Applications,我想在我的电脑上创建并运行一个简单的RESTful应用程序。 我在EclipseHeliosIDE上使用Java编程语言,在MicrosoftWindowsXP操作系统上使用ApacheTomcat7服务器 我一直试图在我的电脑上复制相同的过程,但它不起作用 以下是我所做的: 使用ApacheTomcat7设置在Eclipse上创建了一个动态项目 将我的Jersey和jsr311-api-1.0 jar文件放入项目\WEB-INF\lib\目录 已将网页中的代码部分复制到我的项目中 右键单击项
- 使用ApacheTomcat7设置在Eclipse上创建了一个动态项目
- 将我的Jersey和jsr311-api-1.0 jar文件放入项目
目录\WEB-INF\lib\
- 已将网页中的代码部分复制到我的项目中
- 右键单击项目,单击“运行方式->在服务器上运行”
- 试图访问
http://localhost:8080/de.vogella.jersey.first/rest/hello
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
可能缺少某些类?可能缺少servlet-api.jar。在您的/WEB-INF/lib或类路径中添加最新的jar,看看它是否有效。似乎在类路径中找不到servlet jar。确保包括它们。我假设您在测试这项权利之前,将其打包并部署到一场战争中。因此,只需检查war是否包括应用程序在编译时可用的所有JAR 就像前面提到的答案一样。你少了一些罐子。您可以将这些jar文件添加到Project>WebContent>WEB-INF>lib>文件夹或WEB服务器的lib文件夹中(例如,\apache tomcat\lib) 如果您想让我们告诉您缺少的确切jar,请尝试粘贴两个lib文件夹的列表或屏幕截图
希望这有帮助您需要从WEB-INF/lib目录中删除servlet.jar或任何其他包含javax.servlet.Filter的jar 虽然您需要在编译类路径上使用javax.servlet.Filter类来编译示例代码,但您需要确保您的webapp中不包含此类。从Tomcat类加载器HOWTO: 启动Tomcat时,它会创建一组 组织成以下父子关系,其中 父类加载器位于子类加载器之上:
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2
基本上,webapp中的(可能)servlet.jar可能找不到正确的d/t,即Tomcat容器中配置的安全性
通过启用详细类加载
verbose:class
,可以查看javax.servlet.Filter是否从一个奇怪的位置加载。如果类不是来自Tomcat libs,则搜索该类,这可能是您的问题。servlet.jar不应位于生成的war文件中(或WEB-INF/lib中)。它应该由应用服务器本身提供。(见Tomcat的)
如果您正在使用Maven构建项目,则可以将ServletAPI的范围设置为提供的
()
这里还有一个类似的问题。据我所知,您正在Eclipse中运行Tomcat。您可能没有使用计算机中的安装目录(即您将JAR复制到的安装目录),但实际上正在使用Eclipse在本地创建的临时副本(抱歉,我不在我的开发计算机atm上,因此无法检查详细信息) 从内存中,您有两个选项:
要解决您的问题,在不使用Maven的情况下,您需要将JAX-RS方面添加到您的项目中。这里发生的事情是Eclipse没有将正确的libs部署到服务器上。可以通过项目的属性|项目的面访问此配置 老实说,我不知道要添加哪些特定的jar使Jersey工作,因为我使用Maven来管理依赖项。因此,我下载了,并用它配置了JAX-RS方面,而不是zip文件。这可以在项目的属性部署程序集上看到,Jersey的libs已经配置为部署。顺便说一下,您可以手动将已部署的libs设置到服务器 但后来我想起了为什么我使用Maven来管理依赖关系。捆绑包并不包含运行Jersey所需的所有内容。它缺少asm jar(存在于zip文件中)。所以我不得不将其添加到项目构建路径中,并手动重新配置反部署程序集
这是一个关于Maven、Jersey和Eclipse的例子。尝试一下并得出结论:)我重复了你的例子,它在我的机器上是现成的。我下载了包含的lib目录的全部内容,并将其放入WEB-INF/lib中,而不仅仅像您那样下载了
Jersey
和jsr311-api-1.0jar
这些罐子是:
- asm-3.1.jar
- jackson-core-asl-1.9.2.jar
- jackson-jaxrs-1.9.2.jar
- jackson-mapper-asl-1.9.2.jar
- jackson-xc-1.9.2.jar
- jersey-client-1.14.jar
- jersey-core-1.14.jar
- jersey-json-1.14.jar
- jersey-server-1.14.jar
- jersey-servlet-1.14.jar
- 抛弃-1.1.jar
- jsr311 ap
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>de.vogella.jersey.first</param-value> </init-param> <init-param> <param-name>unit:WidgetPU</param-name> <param-value>persistence/widget</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>