从 JavaScript 中的 Servlet 引用 Java 列表
Referencing a Java list from a Servlet in JavaScript
我有一个从 Postgres 数据库中提取的列表,我需要能够 reference/manipulate 它与 JavaScript。
我更新了代码如下:
这是Servlet的doGet方法:
protected void doGet(HttpServletRequest req, HttpServletResponse json)
throws ServletException, IOException {
List<Employee> employees = uds.findAll();
req.setAttribute("employees", employees);
json.setContentType("application/json");
json.getWriter().write(String.valueOf(employees));
}
这是我目前在 JavaScript 中的内容:
var ajax = new XMLHttpRequest();
ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(data);
}
}
}
我现在遇到的问题是客户端没有收到 JSON 格式的数据。如果我如上所示记录数据,日志将产生如下内容:
[Employee{, employee_id='123456', email='lt@gmail.com', firstName='Juan',
lastName='Terri'}, Employee{, employee_id='2', email='sstark@mail.com',
firstName='Sansa', lastName='Stark'}]
这是正确的数据,但不是有用的格式。
但是,如果我尝试执行 console.log(JSON.parse(data))
,那么我会收到 Uncaught SyntaxError: Unexpected token E in JSON at position 1
。
我认为这是我在 servlet 中的一个简单语法错误,但不确定如何修复它。
你应该使用 request.getAttribute():
<%
List<Employee> theEmployees = request.getAttribute("employees");
%>
但是如果你想在你的 javascript 中有效地使用它,建议将它转换为 json 。
尝试将您的 servlet 响应更改为 json 并使用 Ajax 获取数据
这是一个示例!
var ajax = new XMLHttpRequest();
ajax.open("GET", "your_url_here", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(data);
}
}
对于像我这样的其他菜鸟,我针对这个问题整理了以下完整的解决方案:
Servlet 应如下所示:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
resp.setContentType("application/json");
List<Employee> employees = uds.findAll();
String json = new ObjectMapper().writeValueAsString(employees);
resp.getWriter().write(json);
uds.findAll()
是一种方法,其中 returns 对象列表。 ObjectMapper 是 Jackson 实用程序(我相信 Gson 是另一种选择)。这会将列表放入 JSON 格式。
HTML 或 JSP 应如下所示:
var ajax = new XMLHttpRequest();
ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(JSON.parse(data));
}
}
这将获取可用格式的对象列表,然后您可以使用 JavaScript 对其进行操作以执行任何您喜欢的操作。希望这会对某人有所帮助!
我有一个从 Postgres 数据库中提取的列表,我需要能够 reference/manipulate 它与 JavaScript。
我更新了代码如下:
这是Servlet的doGet方法:
protected void doGet(HttpServletRequest req, HttpServletResponse json)
throws ServletException, IOException {
List<Employee> employees = uds.findAll();
req.setAttribute("employees", employees);
json.setContentType("application/json");
json.getWriter().write(String.valueOf(employees));
}
这是我目前在 JavaScript 中的内容:
var ajax = new XMLHttpRequest();
ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(data);
}
}
}
我现在遇到的问题是客户端没有收到 JSON 格式的数据。如果我如上所示记录数据,日志将产生如下内容:
[Employee{, employee_id='123456', email='lt@gmail.com', firstName='Juan',
lastName='Terri'}, Employee{, employee_id='2', email='sstark@mail.com',
firstName='Sansa', lastName='Stark'}]
这是正确的数据,但不是有用的格式。
但是,如果我尝试执行 console.log(JSON.parse(data))
,那么我会收到 Uncaught SyntaxError: Unexpected token E in JSON at position 1
。
我认为这是我在 servlet 中的一个简单语法错误,但不确定如何修复它。
你应该使用 request.getAttribute():
<%
List<Employee> theEmployees = request.getAttribute("employees");
%>
但是如果你想在你的 javascript 中有效地使用它,建议将它转换为 json 。
尝试将您的 servlet 响应更改为 json 并使用 Ajax 获取数据 这是一个示例!
var ajax = new XMLHttpRequest();
ajax.open("GET", "your_url_here", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(data);
}
}
对于像我这样的其他菜鸟,我针对这个问题整理了以下完整的解决方案:
Servlet 应如下所示:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
resp.setContentType("application/json");
List<Employee> employees = uds.findAll();
String json = new ObjectMapper().writeValueAsString(employees);
resp.getWriter().write(json);
uds.findAll()
是一种方法,其中 returns 对象列表。 ObjectMapper 是 Jackson 实用程序(我相信 Gson 是另一种选择)。这会将列表放入 JSON 格式。
HTML 或 JSP 应如下所示:
var ajax = new XMLHttpRequest();
ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);
// send request
ajax.send();
// event to get response
ajax.onreadystatechange = function() {
// Case state is 4 e o http.status for 200, your request is OK.
if (ajax.readyState == 4 && ajax.status == 200) {
var data = ajax.responseText;
// the return
console.log(JSON.parse(data));
}
}
这将获取可用格式的对象列表,然后您可以使用 JavaScript 对其进行操作以执行任何您喜欢的操作。希望这会对某人有所帮助!