我有一个学生数据库,必须使用他们的电子邮件和密码登录课程顾问网站。我已经对数据库中的一些学生进行了硬编码以测试这一点,我让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的组合,你们都知道有什么可以让你更容易理解吗?
答案 0 :(得分:0)
好的,所以这里有很多事情发生。
首先,您的服务端点看起来应该更像这样:
@Path("/students/{username}")
@GET
@Produces("application/json")
public Student getStudent(@HeaderParam("password") String password, @PathParam("username") String username)
让我解释一下:
@PathParam
和@HeaderParam
的原因。static
。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序列化程序(如Jackson,GSON等)将此Java对象转换为如下所示的JSON:
{'name':'Bob Smith', 'status': 'Passing'}
如果配置正确,转换将“正常工作”。然后,您的JavaScript REST客户端将知道如何处理生成的JSON。
对于JavaScript,你的学生是对的。使用抽象而不是摆弄DOM和XHR的低级细节。 JQuery和其他任何东西一样好。您可以找到有关如何使用JQuery的$.post
here的信息。想想看,也许我们应该做一个关于这个主题的视频教程。
希望这有帮助。