Jersey maven项目中的映射错误

Jersey maven项目中的映射错误,jersey,Jersey,我是restful应用程序和maven应用程序的新手。我曾尝试使用hibernate在maven中创建一个web动态项目应用程序。但我面临一个404错误问题。我想问题出在我的web.xml文件的某个地方。如果有人能帮忙,我将不胜感激。下面是我的完整代码 MyResource.java import com.crud.dao.EmployeeDAO; @Path("/employees") public class MyResource { @GET @Produces("a

我是restful应用程序和maven应用程序的新手。我曾尝试使用hibernate在maven中创建一个web动态项目应用程序。但我面临一个404错误问题。我想问题出在我的web.xml文件的某个地方。如果有人能帮忙,我将不胜感激。下面是我的完整代码

MyResource.java

import com.crud.dao.EmployeeDAO;


@Path("/employees")
public class MyResource {

    @GET
    @Produces("application/json")
    public List<Employee> getEmployee() {
        EmployeeDAO dao = new EmployeeDAO();
        List employees = dao.getEmployees();
        return employees;
    }


    @POST
    @Path("/create")
    @Consumes("application/json")
    public Response addEmployee(Employee emp){
        emp.setName(emp.getName());
        emp.setAge(emp.getAge());

        EmployeeDAO dao = new EmployeeDAO();
        dao.addEmployee(emp);

        return Response.ok().build();
    }

    @PUT
    @Path("/update/{id}")
    @Consumes("application/json")
    public Response updateEmployee(@PathParam("id") int id, Employee emp){
        EmployeeDAO dao = new EmployeeDAO();
        int count = dao.updateEmployee(id, emp);
        if(count==0){
            return Response.status(Response.Status.BAD_REQUEST).build();
        }
        return Response.ok().build();
    }

    @DELETE
    @Path("/delete/{id}")
    @Consumes("application/json")
    public Response deleteEmployee(@PathParam("id") int id){
        EmployeeDAO dao = new EmployeeDAO();
        int count = dao.deleteEmployee(id);
        if(count==0){
            return Response.status(Response.Status.BAD_REQUEST).build();
        }
        return Response.ok().build();
    }
}
EmployeeDAO.java

public class EmployeeDAO {

    public void addEmployee(Employee bean){
        Session session = SessionUtil.getSession();        
        Transaction tx = session.beginTransaction();
        addEmployee(session,bean);        
        tx.commit();
        session.close();

    }

    private void addEmployee(Session session, Employee bean){
        Employee employee = new Employee();

        employee.setName(bean.getName());
        employee.setAge(bean.getAge());

        session.save(employee);
    }

    public List<Employee> getEmployees(){
        Session session = SessionUtil.getSession();    
        Query query = session.createQuery("from Employee");
        List<Employee> employees =  query.list();
        session.close();
        return employees;
    }

    public int deleteEmployee(int id) {
        Session session = SessionUtil.getSession();
        Transaction tx = session.beginTransaction();
        String hql = "delete from Employee where id = :id";
        Query query = session.createQuery(hql);
        query.setInteger("id",id);
        int rowCount = query.executeUpdate();
        System.out.println("Rows affected: " + rowCount);
        tx.commit();
        session.close();
        return rowCount;
    }

    public int updateEmployee(int id, Employee emp){
         if(id <=0)  
               return 0;  
         Session session = SessionUtil.getSession();
            Transaction tx = session.beginTransaction();
            String hql = "update Employee set name = :name, age=:age where id = :id";
            Query query = session.createQuery(hql);
            query.setInteger("id",id);
            query.setString("name",emp.getName());
            query.setInteger("age",emp.getAge());
            int rowCount = query.executeUpdate();
            System.out.println("Rows affected: " + rowCount);
            tx.commit();
            session.close();
            return rowCount;
    }
}
web.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.22.1 2015-10-07 10:54:41"/>
    <doc xmlns:jersey="http://jersey.java.net/" jersey:hint="This is simplified WADL with user and core resources only. To get full WADL with extended resources use the query parameter detail. Link: http://localhost:8080/jersey-webapp/webapi/application.wadl?detail=true"/>
    <grammars/>
    <resources base="http://localhost:8080/jerseypro/webapi/">
        <resource path="/employees">
            <method id="getEmployee" name="GET">
                <response>
                    <representation mediaType="text/plain"/>
                </response>
            </method>
        </resource>
    </resources>
    <servlet>
        <servlet-name>jerseypro</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <!-- Define the ResourceConfig class -->
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.crud.jerseypro.MyResource</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Pro</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</application>

运动衫
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
com.crud.jerseypro.MyResource
1.
泽西职业队
/webapi/*
pom.xml

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>jersey</groupId>
  <artifactId>jerseypro</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>jerseypro</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.10.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
  </dependencies>
  <build>
  <plugins>
  <plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1.1</version>
  <executions>
  <execution>
  <phase>
  Employee
  </phase>
  <goals>
  <goal>java</goal>
  </goals>
  <configuration>
  <mainClass>com.crud.dao.Employee</mainClass>
  <arguments>
  <argument>
  myArg1
  </argument>
  <argument>myArg2</argument>
  </arguments>
  </configuration>
  </execution>
  </executions>
  </plugin>
  </plugins>
  </build>
</project>

4.0.0
运动衫
运动衫
0.0.1-快照
罐子
运动衫
http://maven.apache.org
UTF-8
朱尼特
朱尼特
3.8.1
测试
org.hibernate
冬眠核心
4.3.10.最终版本
mysql
mysql连接器java
5.1.34
org.codehaus.mojo
execmaven插件
1.1.1
雇员
JAVA
com.crud.dao.Employee
myArg1
myArg2

提前谢谢你

一个明显的问题是servlet映射不正确

<servlet>
        <servlet-name>jerseypro</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <!-- Define the ResourceConfig class -->
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.crud.jerseypro.MyResource</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Pro</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>

运动衫
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
com.crud.jerseypro.MyResource
1.
泽西职业队
/webapi/*
您的servlet名称为jerseypro,但servlet映射映射到jerseypro。这应该在启动时给您一个错误。检查java日志以了解发生了什么


此外,您的maven项目配置也无法正常工作。看起来它将尝试启动Employee类,但该类没有静态main方法。这也是行不通的。查看tomcat7 maven插件。它将启动一个http服务器来托管您的测试代码。您可以使用mvn
tomcat7:run
启动它。这应该能让你走了。

我不知道你改变了什么。你添加了tomcat插件了吗。这个
com.crud.dao.Employee
不是一个主类,不会做任何事情。在我看到的pom中,您没有启动任何类型的web服务器。你是怎么开始申请的?是的,这正是我的问题。非常感谢你。你帮了大忙
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>jersey</groupId>
  <artifactId>jerseypro</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>jerseypro</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.10.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
  </dependencies>
  <build>
  <plugins>
  <plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1.1</version>
  <executions>
  <execution>
  <phase>
  Employee
  </phase>
  <goals>
  <goal>java</goal>
  </goals>
  <configuration>
  <mainClass>com.crud.dao.Employee</mainClass>
  <arguments>
  <argument>
  myArg1
  </argument>
  <argument>myArg2</argument>
  </arguments>
  </configuration>
  </execution>
  </executions>
  </plugin>
  </plugins>
  </build>
</project>
<servlet>
        <servlet-name>jerseypro</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <!-- Define the ResourceConfig class -->
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.crud.jerseypro.MyResource</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Pro</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>