如何在javascript和servlet之间发送和接收json数据? 问题
我无法使用html/javascript将表单数据作为json发送到servlet,然后servlet重放json的客户端之间的通信。我不知道我在哪里犯了错误 这个想法是:如何在javascript和servlet之间发送和接收json数据? 问题,javascript,java,json,servlets,fetch,Javascript,Java,Json,Servlets,Fetch,我无法使用html/javascript将表单数据作为json发送到servlet,然后servlet重放json的客户端之间的通信。我不知道我在哪里犯了错误 这个想法是: JavaScript从表单获取数据,将其解析为json,并将其发送到servlet 在服务器端,servlet读取发送的json,并采取一些措施。生成另一个json,并重播它 回到客户端,阅读json并在此基础上绘制一些html。(现在,我只是console.log()-ing它) 客户 从元素获取数据的javascri
- JavaScript从表单获取数据,将其解析为json,并将其发送到servlet
- 在服务器端,servlet读取发送的json,并采取一些措施。生成另一个json,并重播它
- 回到客户端,阅读json并在此基础上绘制一些html。(现在,我只是
-ing它)console.log()
//首先我添加侦听器
document.querySelector(“#login_form”).addEventListener('submit',(e)=>{
e、 预防默认值();
登录发送(如目标);
});
//然后在提交时运行函数
函数登录\发送(表单){
log(form2json(form));
//我得到的内容:{“电子邮件”:a@b.c“,“通过”:“aoeu”}
获取('登录'{
方法:'POST',
标题:{
“接受”:“应用程序/json,文本/plain,*/*”,
'内容类型':'application/json'},
正文:form2json(form)
})
.然后((res)=>res.json())
。然后((数据)=>{
log(“我得到:+数据);//现在,只打印数据
})
.catch((err)=>console.error(err));
}
//这是我手工制作的“form to json”字符串格式化程序,
//当然有更好的(正确的?)方法。
函数form2json(form){
让js=“{”;
设last=form.length-1;
对于(i=0;i构建json manulay是不合适的!
html中的每个表单都有一个名为onSubmit的函数。您可以使用它
我看到的第一个问题是异常:java.lang.ClassNotFoundException:javax.json.json
您需要将其包含在类路径中。
在我使用的javax.json-1.0.jar
中,包括您在YOUR_PROJECT/web/web-INF/lib
文件夹中使用的javax.json
jar
YOUR_PROJECT
|
|__web
|
|__WEB-INF
|
|__lib
| javax.json-1.0.jar
这样,当您导出war文件并将其部署到tomcat上时,jar将在类路径上可用
第二个问题是将JSON传递给服务器,并尝试使用req.getParameter
获取参数,但您真正需要的是解析JSON并获取如下值:
StringBuilder sb = new StringBuilder();
BufferedReader br = req.getReader();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
String json = sb.toString();
JsonReader jsonReader = Json.createReader(new StringReader(json));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
// an object with three fields.
User u = new User(jsonObject.getString("email"), "10010099", jsonObject.getString("pass"));
完整的代码:
public class Login extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("application/json;charset=UTF-8");
try (PrintWriter out = res.getWriter()) {
StringBuilder sb = new StringBuilder();
BufferedReader br = req.getReader();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
String json = sb.toString();
JsonReader jsonReader = Json.createReader(new StringReader(json));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
// an object with three fields.
User u = new User(jsonObject.getString("email"), "10010099", jsonObject.getString("pass"));
// construct json answer.
// based on https://www.youtube.com/watch?v=BPMVC999HTs
JsonObject root;
JsonObjectBuilder rootBuilder = Json.createObjectBuilder();
JsonObjectBuilder userBuilder = Json.createObjectBuilder();
userBuilder.add("name", u.getName()).add("email", u.getEmail()).add("sid", u.getSId());
root = rootBuilder.add("login", userBuilder).build();
// write response to out
out.println(root);
out.flush();
out.close();
}
}
}
请不要手动为表单构建json,还有其他方法可以避免很多错误:请粘贴System.out.println(root.toString())的输出;
?发布User
类。@vladwoguer,如果我将out.println(root)
替换为out.println(root.toString())
,再一次,我在客户端看不到任何东西。我在Tomcat中运行servlet,我只将.war
文件传递给Tomcat。我如何在不通过客户端的情况下看到标准输出?@Swati,在Edit 1I中添加。我正试图按照@vladwoguer的建议以正确的方式执行json。我想我正在使用属性 onsubmit
,添加事件侦听器。请您再详细说明一下。我不确定是否理解您的观点。谢谢,该类已添加。如果其他人遇到此问题,请在Netbeans中以以下方式添加:项目>您的项目>右键单击依赖项>添加依赖项…>选项卡搜索>字段查询“org.glassfish.javax”。选择一个版本,然后[Add]。有关详细信息,请参见此。现在我正在修复获取servlet中数据的方式。。。
StringBuilder sb = new StringBuilder();
BufferedReader br = req.getReader();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
String json = sb.toString();
JsonReader jsonReader = Json.createReader(new StringReader(json));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
// an object with three fields.
User u = new User(jsonObject.getString("email"), "10010099", jsonObject.getString("pass"));
public class Login extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("application/json;charset=UTF-8");
try (PrintWriter out = res.getWriter()) {
StringBuilder sb = new StringBuilder();
BufferedReader br = req.getReader();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
String json = sb.toString();
JsonReader jsonReader = Json.createReader(new StringReader(json));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
// an object with three fields.
User u = new User(jsonObject.getString("email"), "10010099", jsonObject.getString("pass"));
// construct json answer.
// based on https://www.youtube.com/watch?v=BPMVC999HTs
JsonObject root;
JsonObjectBuilder rootBuilder = Json.createObjectBuilder();
JsonObjectBuilder userBuilder = Json.createObjectBuilder();
userBuilder.add("name", u.getName()).add("email", u.getEmail()).add("sid", u.getSId());
root = rootBuilder.add("login", userBuilder).build();
// write response to out
out.println(root);
out.flush();
out.close();
}
}
}