我正在尝试编写我的第一个JSON servlet,如下所示:
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import org.json.JSONException;
public class Home extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{
res.setContentType("text/html; charset=UTF-8");
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
StringWriter sWriter = new StringWriter();
PrintWriter out = new PrintWriter(sWriter);
String jsonText = "{\"Name\":\"Vahid\",\"Nickname\":null,\"Salary\":\"15000.0\",\"isPermanent\":true,\"EmployeeId\":\"121\"}";
try{
JSONObject json = new JSONObject(jsonText);
String name = json.getString("Name");
out.println(json.toString()+"<br>"+"Name = "+name);
}catch(JSONException e){
e.printStackTrace();
}
res.getWriter().print(sWriter.toString());
out.flush();
out.close();
}//doGet
}//class
此代码工作正常并给我输出结果:
{"Name":"Vahid","Nickname":null,"Salary":"15000.0","EmployeeId":"121","isPermanent":true}
Name = Vahid
我的问题是如何从客户端浏览器中获取我的servlet中的JSON对象(作为POST请求),例如: request.getParameter("?????");
// JSON对象的参数名称是什么?或者我必须逐个获取JSON对象的所有元素作为request.getParameter(“name”);
更新
这是我的html文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script>
var form = $('#form1');
$(document).ready(function(){
$('body').hide().fadeIn(5000);
$(".submit").click(function (e) {
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
console.log(url);
data: $(form).serialize(),
success: function(msg){
var json = msg ;
$('#json').val(json);
}
});
});
});
</script>
<body><br>
<form name="input" action="/JSONServlet" method="POST" id="form1" enctype="text/plain">
First name: <input type="text" name="FirstName" id="Firstname" value=" "><br>
Last name: <input type="text" name="LastName" value=" "><br>
<br>
<input type="submit" value="Submit" class="submit">
</form>
</body>
当我写String name = request.getParameter("name");
时,输出为null
在这里尝试的是:
String name = request.getParameter("FirstName");
System.out.println(name);
PrintWriter out= response.getWriter();
try{
JSONObject json = new JSONObject(name);
out.println(json.get("name"));
}catch(JSONException e){
e.printStackTrace();
}
输出为null
答案 0 :(得分:2)
这取决于您使用哪种技术发送POST
请求。以下是发送json
数据的JavaScript示例:
var data = {
name : "Vahid"
};
var request = new XMLHttpRequest();
request.open("POST", <URL>, true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.send(JSON.stringify(data));
<强>更新强>
发送数据后,您可以使用服务器端的request.getParameter()
来检索数据,例如:
String data = request.getParameter("param_name");
这将为您String
提供json
的代表。然后,您可以将其转换为JSONObject
,就像您在相关示例中所做的那样。
答案 1 :(得分:0)
或者我必须逐个获取JSON对象的所有元素 的request.getParameter(&#34;名称&#34);
是的,如果将json对象传递给Servlet,则可以像通常那样获取各个字段名称。 一个接一个。
当我写String name = request.getParameter(&#34; name&#34;);然后输出 为空
这是因为您收到了错误的参数。
看看你的表格:
First name: <input type="text" name="FirstName" id="Firstname" value=" "><br>
Last name: <input type="text" name="LastName" value=" "><br>
要获取名字字段,您必须拨打&#39; FirstName &#39; (名称属性)。
这样做:
String name = request.getParameter("FirstName");
您也不需要
value=" "
或
id="FirstName"
只是做:
<form name="input" action="/JSONServlet" method="POST" id="form1">
First name: <input type="text" name="FirstName"/><br>
Last name: <input type="text" name="LastName"/><br>
<br>
<input type="submit" value="Submit" class="submit">
</form>
也从表单标记中删除它:
<强> enctype="text/plain"
强>