使用Ajax的RESTFul Web服务

时间:2016-10-13 01:48:44

标签: java ajax web-services rest

我是Web服务的新手,我正在尝试使用RESTFul webservices。 我试图从ajax将参数传递给Java中的RESTFul Web服务器。 这就是我做的事情

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div id="add">
        Add : <input type="text" name="name" id="name">
        <input type="submit" id="submitAdd">
    </div>
</body>
<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
<script>

$(document).ready(function ()) {

$("#submitAdd").click(function() {
  var data = { name : $("#name").val() };
  $.ajax({
        type: "GET",
        url: "http://localhost:8080/Example/Rest/controller/return",
        data: data,
        dataType : "json",
        success : function(rdata) {

        }
  });
})
})
</script>
</html>

Controller.java

package com.controller;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/controller")
public class Controller {

    @GET
    @Path("/return")
    @Consumes("application/json")
    public void add(String msg) {
        System.out.println("name "+ msg);
    }
}

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>StockMonitor</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 <servlet>
<servlet-name>Example</servlet-name>
<servlet-class>com.sun.jersey.server.impl.container.servlet.ServletAdaptor</servlet-class>
<init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.controller</param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/Rest/*</url-pattern>
</servlet-mapping>
</web-app>

这是文件结构

  Example 
     src
        ->com.controller
                        ->Controller.java
     WebContent
        ->META_INF
        ->WEB-INF
        ->index.html

我正在使用的罐子是 -

来自Jersey JAX-RS 2.0 RI bundle的所有广告       https://jersey.java.net/download.html

当我在浏览器中输入此内容时     http://localhost:8080/Example/Rest/controller/return 我得到HTTP Status 404 Error。 我无法解决它。谁能告诉我这是什么错误?

2 个答案:

答案 0 :(得分:0)

您收到404因为/Rest没有在任何路径中注册

  1. 您的上下文路径为/Example
  2. 然后您的控制器被映射到/controller
  3. 所以你没有映射来解析/Rest因为你的控制器绑定了/controller URI路径

    删除URL的/Rest并更新web.xml中的servlet映射

    <servlet-mapping>
     <servlet-name>Example</servlet-name>
     <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    /Rest添加到控制器路径映射

    @Path("/Rest/controller")
    public class Controller {
    

答案 1 :(得分:0)

删除add(String msg)方法上的@Path(&#34; / return&#34;)注释。您只需要从路径/ Rest / controller返回,并且是资源的终点。 @Path(&#34; / controller)注释将在资源类中搜索@GET。

 package com.controller;

 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;

 @Path("/controller")
 @Consumes("application/json")
 public class Controller {

    @GET 
     public void add(String msg) {
         System.out.println("name "+ msg);
    } 
}