尝试POST到servlet会导致HTTP状态404 - 无法找到相对的资源

时间:2015-12-02 11:25:23

标签: rest servlets jax-rs

我是一个HTML表单:

<form action="rest/ws/addNote" method="post">

我试图POST到这个servlet:

@WebServlet("/ws")
public class AddNote extends HttpServlet {

    @POST
    @Path("/addNote")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // ...
    }
}

但我一直在

  

HTTP状态404 - 无法找到相对的资源:/ ws / addNote of full path:http://localhost:8080/project/rest/ws/addNote

1 个答案:

答案 0 :(得分:0)

您正在发送一个帖子请求,您应该在servlet中有一个post请求处理程序方法。我假设你没有使用任何REST框架。那么你的servlet应该是:

@WebServlet("/rest/ws/addNote")
public class AddNote extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
........

或者,如果您已经在使用任何REST框架,例如 Jersy ,请不要在这里使用servlet。尝试一些examples

<强>更新

因为你使用REST尝试跟随而不是servlet:

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

@Path("/ws")
public class AddNote {

    @POST
    @Path("/addNote")
    public Response addUser(
        @FormParam("name") String name,
        @FormParam("age") int age) {
   .........

我在web.xml中假设REST控制器servlet映射为/rest/*,而html <form>包含<input>个标记为name,age的标记,将被传递到上面相应的方法参数中。

您可以看到here

的完整示例