如何显示jsp以响应对servlet的ajax调用

时间:2011-03-17 09:00:43

标签: java ajax jsp search servlets

我使用ajax将搜索参数发送到搜索servlet,并且该servlet正在搜索数据库。现在我将请求发送到SearchResults.jsp,我在那里显示结果。

String nextJSP = "/s/SearchResults.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);

问题是我在响应ajax调用时获得了完整的jsp,但是我希望在ajax调用之后用结果打开SearchResults.jsp页面。

2 个答案:

答案 0 :(得分:1)

有一个类似的问题:best practice to render JSON data in JSPs? 这是json返回json数据的示例:http://code.google.com/p/json-simple/wiki/JSPAndAJAXExamples 还有一些jsp标签库,如:http://json-taglib.sourceforge.net/

简而言之,您可以通过juding请求接受类型来控制在jsp中输出的内容。

答案 1 :(得分:1)

不要为此使用JSP。它只适用于HTML内容。只需让servlet返回JSON或XML并在JS端处理它。这是一个启动示例,假设您要搜索产品,并且Product类具有您希望在表格中显示的属性namedescriptionprice

products.jsp

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 5336889</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#search').submit(function() {
                    $.get(this.action, $(this).serialize(), function(products) {
                        var $table = $('<table>').appendTo($('#results'));
                        $.each(products, function(index, product) {
                            var $tr = $('<tr>').appendTo($table);
                            $('<td>').text(product.name).appendTo($tr);
                            $('<td>').text(product.description).appendTo($tr);
                            $('<td>').text(product.price).appendTo($tr);
                        });
                    });
                });
            });
        </script>
    </head>
    <body>
        <form id="search" action="products">
            Search products:
            <input name="query" />
            <input type="submit" />
        </form>
        <div id="results"></div>
    </body>
</html>

与监听/products

的网址格式的servlet结合使用
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<Product> products = productDAO.find(request.getParameter("query"));
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(new Gson().toJson(products));
}

(其中GsonGoogle Gson

另见: