首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >404错误,Jersey2.x在tomcat 8上

404错误,Jersey2.x在tomcat 8上
EN

Stack Overflow用户
提问于 2014-06-10 14:59:04
回答 2查看 2.5K关注 0票数 1

我正在用Jersey 2.xtomcat 8编写我的第一个Jersey 2.x应用程序,但是当我试图访问我的参考资料时,我总是得到一个404错误。

这是我的web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" 
    version="3.1">

    <servlet>
        <servlet-name>com.pj.api.application.Application</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.pj.api.application.Application</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>

我的应用程序类:

代码语言:javascript
复制
@ApplicationPath ("api")
public class Application extends ResourceConfig {

    public Application () {
        packages ("com.pj.api.resources");
    }   
}

我的Resources类:

代码语言:javascript
复制
@Path ("value=/users")
public class UserResources extends ResourcesImpl {

    private UserDao user = new UserDao ();

    @Override
    public List<Data> getList () {
        return user.getList ();
    }

    @GET
    @Path ("value=/test")
    public String Test () {
        return "{'a':'hey'}";
    }

    @Override
    public Data get (String id) {
        return user.get (id);
    }

    @Override
    public void post (Data data) {
        user.post (data);
    }

    @Override
    public void put (Data data) {
        user.put (data);
    }

    @Override
    public void delete(Data data) {
        user.delete (data);
    }
}

当将项目部署到Tomcat上,并通过URL:http://localhost:8080/PJ/api/users/test添加到服务时,它会给我一个404错误和Cannot cast org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer to javax.servlet.ServletContainerInitializer

p.s:我不使用Maven

这里有什么问题吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-06-10 18:47:00

这看起来确实是一个类路径问题。您的服务器运行时是否包括一些默认的Jax-rs库?当我试图在一个包含jax-rs 1.1库的服务器上部署构建在泽西岛2.4上的应用程序时,我遇到了一个类似的问题,所以我不得不在泽西岛1.18上重新构建我的应用程序。检查Eclipse中的服务器运行时是否存在任何现有库

票数 1
EN

Stack Overflow用户

发布于 2014-06-10 15:15:33

你的应用程序和我的有很大不同。我建议您看看一个简单的hello world示例,您可以找到这里

正如您所看到的,一个简单的服务是:

代码语言:javascript
复制
@Path("/hello")
public class HelloWorldService {

    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String msg) {

         String output = "Jersey say : " + msg;
         return Response.status(200).entity(output).build();
    }
 }

web.xml应该如下所示:

代码语言:javascript
复制
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>

<servlet>
    <servlet-name>jersey-serlvet</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.mkyong.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

来自projectURL/rest/hello/的Web请求将通过@Path("/hello")HelloWorldService匹配,而来自projectURL/rest/hello/{any values}{any values}将匹配带有@PathParam注释的参数。

网址为http://localhost:8080/<your_project>/rest/hello/Mehdi

您可以使用此基本示例作为根基,并根据您的需要对其进行调整。

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24144289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档