我正在尝试部署嵌入式tomcat
服务器并实现一些jersey
Web 服务。我设法正确运行服务器并访问除 jersey 处理的那些 servlet 之外的任何其他 servlet。当我尝试通过网络浏览器访问球衣服务时,出现以下错误
Dec 02, 2014 6:21:41 PM org.apache.coyote.http11.AbstractHttp11Processor process
SEVERE: Error processing request
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getEffectiveSessionTrackingModes()Ljava/util/Set;
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:675)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
由于应用程序的初始化,打印了以下内容,表明球衣容器已正确加载servlets
Dec 02, 2014 6:21:11 PM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
controllerModule.servlet
Dec 02, 2014 6:21:11 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class controllerModule.servlet.HelloWorldService
Dec 02, 2014 6:21:11 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Dec 02, 2014 6:21:11 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.18.1 02/19/2014 03:28 AM'
我用来注册的代码resources
如下
Wrapper a = Tomcat.addServlet(rootCtx, "rest", "com.sun.jersey.spi.container.servlet.ServletContainer");
a.addInitParameter("com.sun.jersey.config.property.packages","controllerModule.servlet");
a.setLoadOnStartup(1);
rootCtx.addServletMapping("/*", "rest");
需要记住的一些事情
- 这HelloWorldService
是大多数 Jersey 教程中常见的测试 servlet
- 必须使用jersey 1.18.x
and tomcat
,任何其他建议都是可以接受的,但我不能将其视为解决方案,至少目前是这样。我看过很多教程,例如更大的球衣版本,使用码头,http-jersey-server 等
更新 03.12.2014
似乎问题是对我的 pom.xml 文件的依赖
我正在使用:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
我不得不改为:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
奇怪的是,泽西 Servlet 的工作方式是这样,但我拥有的另一个 servlet 却没有,它扩展了HttpServlet
类