0

我无法在 tomcat8 服务器上启动我的测试应用程序。当我输入时 http://localhost:8080/loginService/rest/auth,错误消息是“HTTP 状态 404 - 类型状态报告。消息:描述请求的资源不可用。” 并且起始页http://localhost:8080/工作正常。我把所有的jar文件(jersey-client, jersey-common, jersey-container-servlet,jersey-container-servlet-core, jersey-server, javax.ws.rs-api-2.0 ....)放在WEB下-INF/库。而loginService由服务器部署。

WEB-INF下的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" 
     version="2.5">
    <display-name>loginService</display-name>
   <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
     <init-param>
       <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>loginTest</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>
 </web-app> 

我的测试应用程序:

package loginTest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
 @Path("/auth")
 public class Authenticate {
// This method is called if TEXT_PLAIN is request
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String test() {
          return "succes";
      }
}

这是控制台消息的一部分,这似乎是一个问题:

七月 10, 2014 3:06:20 下午 org.apache.catalina.core.StandardContext reload
严重: Exception starting Context with name [/loginService]
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/loginService]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3780)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:293)
    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5539)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1365)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1345)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: jersey/repackaged/com/google/common/base/Function
    at org.glassfish.jersey.internal.ServiceFinder.<clinit>(ServiceFinder.java:165)
    at org.glassfish.jersey.servlet.internal.ServletContainerProviderFactory.getAllServletContainerProviders(ServletContainerProviderFactory.java:66)
    at org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer.onStartup(JerseyServletContainerInitializer.java:132)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: jersey.repackaged.com.google.common.base.Function
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1324)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177)
    ... 13 more

七月 10, 2014 3:06:20 下午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/loginService] is completed

我正在使用tomcat8和jersey2.10.1。

我刚刚将我的 web.xml 文件更改为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee      
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" 
         version="2.5">
  <display-name>loginService</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>loginTest</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
      <param-value>true</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>
</web-app>
4

3 回答 3

2

您的应用程序似乎缺少一些必需的库,或者(因为您已经拥有 jercy-common.jar)类路径中已有的库不兼容。

因此,我想在下面的链接中指出一个完美工作(使用 Tomcat 8 测试)的示例。

Jersey-HelloWorld-示例

希望这可以帮助。

于 2014-07-13T11:09:29.723 回答
0

我有这个问题。我刚刚通过删除所有 web.xml 文件(在“目标”文件夹和“主”文件夹内)解决了这个问题。然后在 Project Explorer 和 java EE 工具中右键单击该项目 -> Generate Deployment Descriptor Stub。之后,只需再次右键单击项目-> 运行方式-> Maven 构建...然后在“目标”字段中写入:“干净安装”(不带引号)。点击应用,点击运行。然后转到您的 Tomcat 管理器,取消部署旧的 .war 文件并再次部署它。然后运行它!它对我有用。

于 2015-06-28T14:56:30.327 回答
0

根据这个链接https://www3.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_HowTo.html#TomcatDebug,出现这种问题的原因有很多。另外,我之前也遇到过这个问题。我通过以下方式解决了它。查看 tomcat/webapps/ROOT/WEB-INF/web.xml 中的 web.xml 标题。并确保您的 web.xml 看起来像这样。特别尝试比较版本。例如:我的是:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 ........
..........
</web-app>

你安装的tomcat版本可以是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="4.0"
  metadata-complete="true"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd">
 ........
..........
</web-app>

如果您同时查看它们,它们具有版本差异和元数据属性差异。因此,您的 web.xml 和 tomcat/webapps/ROOT/WEB-INF/web.xml 的标头必须相同。通过将我的 web.xml 标题中的版本号更改为 4 解决了我的问题。无论您拥有什么版本,请确保它与 ROOT 的 web.xml 版本相同。希望能帮助到你

于 2017-02-23T01:57:40.153 回答