【问题标题】:Getting data from servlet to ajax?将数据从 servlet 获取到 ajax?
【发布时间】:2025-12-05 07:50:02
【问题描述】:

Jsp / servlets 似乎比我预期的要乏味得多。我正在尝试通过 ajax 调用一个 servlet 函数,实际上让它将一些数据反馈给我的前端,这是一个 jsp 文件。

此代码将我的响应返回为 null。

这是我的 servlet 的一部分。我正在尝试(拼命地从代码中很明显)让它发送一些东西 - 任何东西都返回给 ajax。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = (String) request.getParameter("action");
if (action.equalsIgnoreCase("selectedhotel"))
    {

        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        System.out.println("test");
        String attribute = (String) request.getParameter("hotel_id");
        System.out.println(attribute);
        List<Room> aRooms;
        aRooms = model.getRoomByHotel(Integer.valueOf(attribute));
        request.setAttribute("aRooms", aRooms);
        request.setAttribute("list", list);
        PrintWriter outPrintWriter = response.getWriter();
        outPrintWriter.write("ASDSADA");
            outPrintWriter.println("test");
    }   

还有来自我的 JSP 的 ajax:

$(function(){
$("#hotelSelector li").click(function(){        
    var hid = $(this).attr('id');

    $.ajax({ type: "GET",   
         url: "AppController?action=selectedhotel&hotel_id=1",   
         success : function(text)
         {
            alert(text);
             // This will show the values. Change "alert" for $('div#mydiv').html(value) or so
         }
    });
});
});</script>

Riiight...所以,请修复?

【问题讨论】:

  • 将 ajax 请求视为与普通的 http 请求没有什么不同,就像您在浏览器中导航到服务一样,因为这就是它的全部内容。
  • 哎呀?这并不能真正解决我的问题。
  • 我的意思是构建您的 servlet,就好像它是一个简单的 hello world 网页,然后从那里开始。如果您只是想让它输出某些内容,请删除除输出某些内容的代码之外的所有内容。一旦你弄清楚它是如何工作的,就开始一点一点地添加,直到你找到失败的地方。是否有任何错误日志可供您查看服务器错误?我对 java 不太熟悉,所以对于可能的代码语法问题我帮不上什么忙。
  • 您可以尝试关闭响应输出流。
  • 是的,我刚刚看到我没有这样做。改了,还是不行。

标签: java jquery ajax jsp servlets


【解决方案1】:

如前所述,您确实需要从小处着手,然后一路向上。获得一个简单的“hello world”ajax 响应,然后处理更复杂的响应。对于更复杂的数据响应,我建议查看 json(请参阅gson)来序列化 java 对象,以便在响应编写器中发回。

您应该考虑的第一件事是使用 jQuery post 并获取包装器以使您的生活更轻松。

例如,您的 html 将如下所示:

<h1>Hello: <span style="color:red" id="showMyName"></span></h1>
<form method="post" action="AjaxServlet" id="myForm">
    <input type="text" name="myName" />            
</form>
<button id="ajaxSubmit" type="submit">SEND</button>
<script type="text/javascript">
     $(document).ready(function() {
        $('#ajaxSubmit').on('click', function() {
        // To simplify things, wrap what you can in a form and serialize                      
        // it to send to the server.
            var myForm = $('#myForm');
            $.get(myForm.attr('action'), myForm.serialize(), function(data) {
                $('#showMyName').text(data);
            });
        });
    });
</script>

在 servlet 方面,您应该从一个普通的 jane servlet 开始,一旦您确定它可以工作,就开始添加额外的范围。基本 servlet 应该是这样的:

// For this example, get and post will use the same base procedures.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        /* TODO output your response here.*/
        out.println(request.getParameter("myName"));
    } finally {
        out.close();
    }
}

发送复杂响应的一种方法是将所有数据放入某种集合中,然后使用 gson 或其他一些 JsonObjectMapper 将其转换为字符串。然后,您可以将此字符串放入响应编写器中并将其发送回以由 jQuery 解析。

编辑:

我忘了提到您需要确保您的 servlet 也被您的 servlet 容器识别。如果您尚未将描述符添加到 web.xml,它应该具有如下条目:

<servlet>
    <servlet-name>AjaxServlet</servlet-name>
    <servlet-class>org.test.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AjaxServlet</servlet-name>
    <url-pattern>/AjaxServlet</url-pattern>
</servlet-mapping>

【讨论】:

    【解决方案2】:

    xmlhttp.responseText 在 javascript 中用于从 servlet 获取响应。 您如何在 jquery 中获得响应。 我认为问题在于检索响应

    【讨论】:

    • 我没有发送空参数,因为在 ajax 代码的 url 中我给了它一个实际参数。 if 基本上是比较 if ( action = "selectedhotel" ) ,它是。我也尝试添加一个 else ,仍然没有。
    • 我明白你所说的。而不是行动使用任何其他变量