Java RESTWeb服务返回404错误

Java RESTWeb服务返回404错误,java,rest,web,service,jersey,Java,Rest,Web,Service,Jersey,我正在尝试学习简单的RESTfulWeb服务。因此,我查找了一个示例并一步一步地遵循它,但在尝试部署项目时遇到了错误404。知道为什么吗 文件: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"

我正在尝试学习简单的RESTfulWeb服务。因此,我查找了一个示例并一步一步地遵循它,但在尝试部署项目时遇到了错误404。知道为什么吗

文件: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>UserManagement</display-name>
      <servlet>
          <servlet-name>Jersey RESTful Application</servlet-name>
          <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
             <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.tutorialspoint</param-value>
             </init-param>
          </servlet>
       <servlet-mapping>
       <servlet-name>Jersey RESTful Application</servlet-name>
          <url-pattern>/rest/*</url-pattern>
       </servlet-mapping>  
    </web-app>
文件:UserDao.java

package com.tutorialspoint;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class UserDao {

    @SuppressWarnings("unchecked")
    public List<User> getAllUsers(){
        List<User> userList = null;
        try {
            File file = new File("Users.dat");
            if (!file.exists()) {
                User user = new User(1, "Mahesh", "Developer");
                userList = new ArrayList<User>();
                userList.add(user);
                saveUserList(userList);
            }
            else {
                FileInputStream fis = new FileInputStream(file);
                ObjectInputStream ois = new ObjectInputStream(fis);
                userList = (List<User>) ois.readObject();
                ois.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        return userList;
    }

    private void saveUserList(List<User> userList) {
        // TODO Auto-generated method stub
        try {
            File file = new File ("User.dat");

            FileOutputStream fos = new FileOutputStream (file);
            ObjectOutputStream oos = new ObjectOutputStream (fos);
            oos.writeObject(userList);
            oos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package com.tutorialspoint;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.ArrayList;
导入java.util.List;
公共类UserDao{
@抑制警告(“未选中”)
公共列表getAllUsers(){
List userList=null;
试一试{
File File=新文件(“Users.dat”);
如果(!file.exists()){
用户=新用户(1,“Mahesh”,“开发者”);
userList=newarraylist();
添加(用户);
保存用户列表(userList);
}
否则{
FileInputStream fis=新的FileInputStream(文件);
ObjectInputStream ois=新ObjectInputStream(fis);
userList=(List)ois.readObject();
ois.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}catch(classnotfounde异常){
e、 printStackTrace();
}
返回用户列表;
}
私有void saveUserList(List userList){
//TODO自动生成的方法存根
试一试{
File File=新文件(“User.dat”);
FileOutputStream fos=新的FileOutputStream(文件);
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(用户列表);
oos.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
文件:UserService.java

package com.tutorialspoint;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

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

    UserDao userDao = new UserDao();

    @GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getUsers() {
        return userDao.getAllUsers();
    }
}
package com.tutorialspoint;
导入java.util.List;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
导入javax.ws.rs.core.MediaType;
@路径(“/UserService”)
公共类用户服务{
UserDao UserDao=newuserdao();
@得到
@路径(“/users”)
@生成(MediaType.APPLICATION\u XML)
公共列表getUsers(){
返回userDao.getAllUsers();
}
}
这是我得到的

除了您的应用程序可能尚未部署(也可能是404)之外:

您将rest服务配置为应答的路径为

/rest/UserService/users

似乎是
/UserManagement

  • /rest
    在jersey servlet映射的
    web.xml
    中配置
  • /UserService
    是在
    @Path
    注释中的
    UserService.java
    文件中配置的
  • /users
    在方法的
    @Path
    注释上的
    UserService.java
    文件中配置。这应该是
    @Path(“用户”)

您的屏幕截图显示您正在调用
/UserManagement
,这可能是应用程序的上下文,但不是服务的路径。

您可以更改web.xml文件。webxml文件存在一些问题。使用此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>User Management</display-name>
  <servlet>
  <servlet-name>Jersey RESTful Application</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.tutorialspoint</param-value>
       </init-param>
   </servlet>
  <servlet-mapping>
 <servlet-name>Jersey RESTful Application</servlet-name>
  <url-pattern>/rest/*</url-pattern>
</servlet-mapping>  
</web-app>

用户管理
Jersey RESTful应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.tutorialspoint
Jersey RESTful应用程序
/休息/*

我在STS的服务器上运行了它。还有,尝试过/rest/UserService/users,但仍然没有运气什么是STS?Spring工具套件?您是否尝试了
/UserManagement/rest/UserService/users
?您应该查看日志文件。jersey引擎将告诉您找到的资源和分配的URI。这是我从文件:\UserManagement\WEB-INF\lib\javax.servlet-api-3.0.1.jar)-jar未加载中得到的。参见Servlet规范3.0,第10.7.2节。有问题的类:javax/servlet/servlet.class至少扫描了一个JAR以查找TLD,但没有包含TLD。为此记录器启用调试日志记录以获取已扫描的JAR的完整列表,但未找到TLD。在扫描过程中跳过不需要的JAR可以缩短启动时间和JSP编译时间。您能看到jersey在寻找服务吗?如果调用UserManagement/rest呢?
<?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>User Management</display-name>
  <servlet>
  <servlet-name>Jersey RESTful Application</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.tutorialspoint</param-value>
       </init-param>
   </servlet>
  <servlet-mapping>
 <servlet-name>Jersey RESTful Application</servlet-name>
  <url-pattern>/rest/*</url-pattern>
</servlet-mapping>  
</web-app>