我应该如何将Servlet中的响应发送到前端?

时间:2012-01-09 18:06:21

标签: java servlet-3.0

我写了一个像这样的Servlet

public class ServletUtil extends HttpServlet {

private static final long serialVersionUID = 1571172240732862415L;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String acInfo = request.getQueryString();
    someDao dao = new someDao();
     ArrayList<String> resultAutoComplete=dao.someResults(acInfo);
    out.close();
}

}

我在前端有一个自动完成的对象/向导,因为用户输入的是对后端进行Ajax调用以获取结果列表。所以我编写了一个Servlet,我正在提取用户输入并从DAO层获取结果。

我的问题是如何将此列表(resultAutoComplete)发送到Servlet中的前端?

4 个答案:

答案 0 :(得分:2)

我希望你能以某种方式将其序列化,以便客户理解它。例如也许使用JSON或类似的。

我注意到您的回复内容类型为text/html。那么为什么不简单地将列表中的每个元素写入Writer out ,由(例如)<li>元素分隔(使用相应的无序/订单列表实体)

答案 1 :(得分:0)

将其序列化为String并将其写入out ...

说真的,我不会在Servlet规范的低级代码。对于这种返回 - 这个pojo调用我会使用Spring 3's RESTful service libraries或类似的东西。

答案 2 :(得分:0)

试试这个,

for (String str : resultAutoComplete)
                {
            out.println(str);
        }

答案 3 :(得分:0)

没有json!而不是通过javascript中的列表,返回已完成的<li>列表并替换innerHTML <ul>。这样做的原因是为了提供更好的性能。除非你想做一些更灵活的事情,否则就把事情留给后端。

什么时候做json,你必须将字符串解析为json对象,然后循环并生成html,这只是一个额外的步骤。保持简单,加上解析字符串可能代价高昂。

如果您没有遍历列表而是执行out.println列表对象,则可能会看到该地址。另外,你需要生成html,所以:

StringBuilder sb = new StringBuilder();
for(String option: options){
sb.append("<li>").append(option).append("</li>");
}
out.println(sb);