为了账号安全,请及时绑定邮箱和手机立即绑定

从 JavaScript 中的 Servlet 引用 Java 列表

从 JavaScript 中的 Servlet 引用 Java 列表

慕容3067478 2023-03-09 16:49:18
我有一个从 Postgres 数据库中提取的列表,我需要能够使用 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 requestajax.send();// event to get responseajax.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 中的一个简单语法错误,但我不确定如何修复它。
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

你应该使用 request.getAttribute():

<%
  List<Employee> theEmployees = request.getAttribute("employees");%>

但是如果你想在你的 javascript 中有效地使用它,建议将它转换为 json。


查看完整回答
反对 回复 2023-03-09
?
慕森王

TA贡献1777条经验 获得超3个赞

尝试将您的 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);

    }

}


查看完整回答
反对 回复 2023-03-09
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

对于像我这样的其他菜鸟,我已经为这个问题编制了以下完整的解决方案:


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()是一个返回对象列表的方法。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 对其进行操作以执行任何您喜欢的操作。希望这会帮助别人!


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信