【问题标题】:The requested resource is not available in REST请求的资源在 REST 中不可用
【发布时间】:2014-08-12 11:42:45
【问题描述】:

我的 REST 使用 @FormParam 时遇到问题,请帮帮我,我不知道为什么这个项目不能在 Eclipse Luna 上使用 tomcat 7 和 java 7 :(

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" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">

  <display-name>Archetype Created Web Application</display-name>

  <servlet>
        <servlet-name>resteasy-servlet</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>com.adam.core</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/core</url-pattern>
    </servlet-mapping>

</web-app>

POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.adam.core</groupId>
  <artifactId>RESTform</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>RESTform Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.17.1</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>RESTform</finalName>
  </build>
</project>

UserForm.html

<html>
<body>
    <h1>Suma REST @FormQuery </h1>

    <form action="core/user/add" method="post">
        <p>
            Number 1: <input type="text" name="number1" />
        </p>
        <p>
            Number 2: <input type="text" name="number2" />
        </p>
        <p>
            Number 3: <input type="text" name="number3" />
        </p>
        <p>
            Number 4: <input type="text" name="number4" />
        </p>
        <p>
            Number 5: <input type="text" name="number5" />
        </p>
        <input type="submit" value="Suma" />
    </form>

</body>
</html>

UserService.java

package com.adam.core;

import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;

import javax.ws.rs.core.Response;

@Path("/user")
public class UserService {

    @POST
    @Path("/add")
    public Response addUser(
        @FormParam("number1") int number1,
        @FormParam("number2") int number2,
        @FormParam("number3") int number3,
        @FormParam("number4") int number4,
        @FormParam("number5") int number5){

        return Response.status(200).entity("Suma : " + (number1+number2+number3+number4+number5)).build();
    }
}

我的控制台:

SEVERE: Servlet /RESTform threw load() exception
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1324)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:550)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:531)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4932)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5218)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • core 真的应该是 URL 的一部分吗?我觉得user/add 就够了。
  • 它只是核心:) 有或没有核心是同样的错误
  • 它显然是classnotfoundexception,你错过了它的一个罐子
  • 从 pom 中移除 jersey 核心依赖...jersey 服务器会自动下载相应的核心 jar。

标签: java rest maven tomcat


【解决方案1】:

显然问题是 ClassNotFoundException ,缺少它的依赖项之一..

我认为您需要将依赖项设置为 -

使用这个

       <dependency>    
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.18.1</version>
    </dependency>

同样去掉jersey core依赖,hersey服务器会自动下载剩下的依赖jars

【讨论】:

  • 检查 lib 是否在 tomcat 内的 webapp 中获取 jars
  • 是的,不幸的是同样的例外...... Tomcat 在没有项目的情况下运行良好
  • 不,去 tomcat/webapps/{your project directory}/lib ...检查进入 lib 目录的 jars
  • 在 tomcat/webapps 我只有 5 个文件夹:docs、examples、host-manager、manager 和 ROOT。我的文件夹名称是 RESTform
  • 是的,转到您的文件夹并在该文件夹下转到 WEB-INF ,检查 lib 文件夹并检查是否包含所有必需的 jar...可能 lib 文件夹可能无法从 maven 构建中获取 jar
【解决方案2】:

现在它正在工作。我将 asm.jar 添加到 tomcat 和项目中,这很好:D 谢谢你:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2014-05-25
    • 2015-05-26
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多