Java RESTful Web服务-从表单获取数据并从MySQL数据库获取信息
我有一个学生数据库,他们必须使用电子邮件和密码登录课程顾问网站。我在数据库中硬编码了一些学生来测试这一点,我让Facade做它需要做的事情,但我对它的服务部分以及网页如何将数据发送到服务并调用我创建的Facade方法感到非常困惑。这里有一些代码Java RESTful Web服务-从表单获取数据并从MySQL数据库获取信息,java,web-services,rest,Java,Web Services,Rest,我有一个学生数据库,他们必须使用电子邮件和密码登录课程顾问网站。我在数据库中硬编码了一些学生来测试这一点,我让Facade做它需要做的事情,但我对它的服务部分以及网页如何将数据发送到服务并调用我创建的Facade方法感到非常困惑。这里有一些代码 @Path("/Students/{email}") @GET @Produces("text/plain") @Consumes("application/x-www-form-urlencoded") public static Student ge
@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的组合,你们知道有什么可以让这更容易理解吗?好的,这里有很多内容 首先,您的服务端点应该更像这样:
@Path("/students/{username}")
@GET
@Produces("application/json")
public Student getStudent(@HeaderParam("password") String password, @PathParam("username") String username)
{'name':'Bob Smith', 'status': 'Passing'}
让我解释一下:
- 我这样做是为了使路径类似于“/students/bob”。一封带有特殊字符的实际电子邮件可能会增加您在学习的这一阶段不想处理的奇怪之处李>
- 我把密码放在HTTP头中。这也是不安全的,但我不忍心把它放在路上
- 这些参数各自的位置指示我使用
和@PathParam
的原因@HeaderParam
- 不需要
静态
- 生成JSON显然是因为您想发回
对象。这意味着您需要使用从数据库中获取的数据填充Student
对象,并将其序列化为JSON,以便REST客户端可以读取李>Student
Student s = new Student("Bob Smith");
s.setStatus("Passing");
//just all the stuff you need to create a Student in Java.
然后,您需要配置REST框架以使用JSON序列化程序(如等)将此Java对象转换为如下所示的JSON:
@Path("/students/{username}")
@GET
@Produces("application/json")
public Student getStudent(@HeaderParam("password") String password, @PathParam("username") String username)
{'name':'Bob Smith', 'status': 'Passing'}
如果配置正确,转换将“正常工作”,然后JavaScript REST客户端将知道如何处理生成的JSON
至于JavaScript,你的学生是对的。使用抽象,而不是处理DOM和XHR的低级细节。JQuery和其他任何查询一样好。您可以找到有关如何使用JQuery的$的信息。想一想,也许我们应该做一个关于这个主题的视频教程
希望这有帮助。发{email}的目的是什么?例如,您想通过电子邮件地址唯一地标识每个资源吗?是的,每个学生在数据库中都有一封电子邮件和密码。我将数据库中的密码与表单上应该传递的密码进行比较,如果不匹配,则返回null。如果它们匹配,我想返回学生的toString,只是为了调试。但是我试图从我的SQL数据库中获取学生的信息,为什么我要使用post呢?哦。我很困惑,因为你正在做很多看起来像帖子的事情。做了一个编辑。哦,好吧,如果我在这个方法生成JSON时创建一个新的Student对象,我不需要将它解析回getStudent()的JAVA变量吗?如果我不想将数据解析回JSON,我可以从服务中的getStudent返回一个字符串吗?当然可以。然后做@products(“text/plain”)公共字符串getStudent
如果我在YouTube频道上做一个关于这个的教程,你最好看一下,告诉你的朋友们哈哈。