RESTful Web服务 - 从表单中获取数据并从MySQL数据库中获取信息

时间:2013-11-16 01:59:02

标签: java web-services rest

我有一个学生数据库,必须使用他们的电子邮件和密码登录课程顾问网站。我已经对数据库中的一些学生进行了硬编码以测试这一点,我让Facade做了它需要做的事情,但我对它的服务部分感到困惑,以及网页如何将数据发送到服务并调用我创建的门面方法。这是一些代码。

@Path("/Students/{email}")
@GET
@Produces("text/plain")
@Consumes("application/x-www-form-urlencoded")
public static Student getStudent(@FormParam("studentpass") String password, @FormParam("studentemail") String email)
{
    PlannerFacade pf = new PlannerFacade();
    Student x = pf.getStudent(email, password); //returns null if the password does not match the one in the Database.  Else returns the Student's toString();
    return x;
}

我对路径如何与{email}一起工作以及它们如何正常工作感到困惑。

这是我的javascript代码:

function getStud(responseType) {
    var status=0;
    var theEmail = document.getElementById("studform").studentmail.value;
    var url = "http://localhost:8080/CP/Students/"+theEmail;
    alert(url);
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("x").innerHTML=xmlhttp.responseText;
        }
      };
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
};

现在我只有一个空白的div设置为'x',我只是想看看我是否可以让脚本调用服务并更改id为'x'的div来显示学生的信息。我的同学们正在谈论使用JQuery和Ajax的组合,你们都知道有什么可以让你更容易理解吗?

1 个答案:

答案 0 :(得分:0)

好的,所以这里有很多事情发生。

首先,您的服务端点看起来应该更像这样:

@Path("/students/{username}")
@GET
@Produces("application/json")
public Student getStudent(@HeaderParam("password") String password, @PathParam("username") String username)

让我解释一下:

  • 我做到了,所以路径就像“/ students / bob”。具有特殊字符的实际电子邮件可能会增加您在学习阶段不想处理的奇怪现象。
  • 我将密码放在HTTP标头中。这也是不安全的,但我不忍心把它放在路上。
  • 这些参数的相应位置表明我@PathParam@HeaderParam的原因。
  • 无需static
  • 您生成JSON,因为显然您想要发回Student个对象。这意味着您需要使用从数据库中提取的数据填充Student对象,并将其序列化为REST客户端可以读取的JSON。

从MySQL获取数据后,您将执行类似的操作:

Student s = new Student("Bob Smith");
s.setStatus("Passing");
//just all the stuff you need to create a Student in Java.

然后,您需要配置REST框架以使用JSON序列化程序(如JacksonGSON等)将此Java对象转换为如下所示的JSON:

{'name':'Bob Smith', 'status': 'Passing'}

如果配置正确,转换将“正常工作”。然后,您的JavaScript REST客户端将知道如何处理生成的JSON。

对于JavaScript,你的学生是对的。使用抽象而不是摆弄DOM和XHR的低级细节。 JQuery和其他任何东西一样好。您可以找到有关如何使用JQuery的$.post here的信息。想想看,也许我们应该做一个关于这个主题的视频教程。

希望这有帮助。