使用servlet返回json对象

我有一个servlet。 它的工作原理是这样的 – 我发送action-name,servlet创建action-object,执行一些任务,然后返回字符串view作为结果 – 到我应该发送给用户的页面。 Servlet对doGETdoPost工作方式相同。

  String name = getActionName(req); Action action = (Action) pico.getComponentInstance(name); String view = action.exec(req, resp); // router if (view.startsWith("redirect:")) { resp.sendRedirect(view.substring("redirect:".length(), view.length())); } else { getServletContext().getRequestDispatcher( "/" + view + ".jsp").forward(req, resp); } 

我有AjaxAction,我从请求获取值,从数据库获取对象,将其转换为json字符串。 但是如何从行动中归还呢? Action返回string,表示应该发送用户的下一页。 我把他送到主页。

  String requestId = req.getParameter("requestId"); Long id = Long.valueOf(requestId); Request item = requestDao.read(id); String json = ""; json = new Gson().toJson(item); resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); try { resp.getWriter().write(json); } catch (IOException e) { e.printStackTrace(); } return "main"; 

每当我更改值( id = "re" )时,我都会发送JSON对象请求。

  $("#re").change(function() { var $id = $('#re').val(); $.get('AjaxAction.do', { requestId : $id }, function(respJSON) { alert(respJSON); $.each(respJson, function(key, value) { $('#' + key).val(value); }); }); }); 

但是#+键更改中既没有alert也没有值。 所以似乎function不起作用。 那么如何从Action中正确返回JSON对象? 我调试器AjaxAction创建对象并return "main";

  1. 改变return "main"; return null;
  2. 之后,您将能够在同一页面上获得ajax响应和alert();
  3. 如果需要,您可以通过执行document.location="anotherpage";而不是警报,现在可以将用户重定向到另一个页面document.location="anotherpage";