从 JavaScript 中的 Servlet 引用 Java 列表

我有一个从 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 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 中的一个简单语法错误,但我不确定如何修复它。


慕容3067478
浏览 97回答 3
3回答

慕仙森

你应该使用 request.getAttribute():<% &nbsp;&nbsp;List<Employee>&nbsp;theEmployees&nbsp;=&nbsp;request.getAttribute("employees");%>但是如果你想在你的 javascript 中有效地使用它,建议将它转换为 json。

慕森王

尝试将您的 servlet 响应更改为 json 并使用 Ajax 获取数据这是一个示例!var ajax = new XMLHttpRequest();ajax.open("GET", "your_url_here", true);// send requestajax.send();// event to get responseajax.onreadystatechange = function() {&nbsp; // Case state is 4 e o http.status for 200, your request is OK.&nbsp; &nbsp; if (ajax.readyState == 4 && ajax.status == 200) {&nbsp; &nbsp; &nbsp; &nbsp; var data = ajax.responseText;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// the return&nbsp; &nbsp; &nbsp; &nbsp; console.log(data);&nbsp; &nbsp; }}

拉丁的传说

对于像我这样的其他菜鸟,我已经为这个问题编制了以下完整的解决方案:Servlet 应该看起来像这样:protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws&nbsp;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 requestajax.send();// event to get responseajax.onreadystatechange = function() {&nbsp; &nbsp; // Case state is 4 e o http.status for 200, your request is OK.&nbsp; &nbsp; if (ajax.readyState == 4 && ajax.status == 200) {&nbsp; &nbsp; &nbsp; &nbsp; var data = ajax.responseText;&nbsp; &nbsp; &nbsp; &nbsp; // the return&nbsp; &nbsp; &nbsp; &nbsp; console.log(JSON.parse(data));&nbsp; &nbsp; }}这将以可用格式获取对象列表,然后您可以使用 JavaScript 对其进行操作以执行任何您喜欢的操作。希望这会帮助别人!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java