0

我在一个jsp页面上,我正在对一个servlet进行ajax调用,作为回报,它提供了要在页面上显示的完整html代码。它工作正常,但在 servlet 文件中看起来杂乱无章,其中包含多printWriter.write(...)行带有 html 代码的行。由于我必须通过 servlet 创建大型 html 代码,因此很难维护。有没有其他合适/更好的方法来做到这一点?我在 servlet 中结合了编写 html 行和逻辑,很难将它们分开。

jsp页面中的ajax调用:

$.ajax({
    type: 'POST',
    url: 'myServlet',
    data: requestData,
    dataType: "text",
}).done(function(responseData) {
    $(divId).html(responseData);
});

来自 servlet 类的一些代码:

.....
String username = user.getName();
if (username != null && !username.trim().isEmpty())
    username = username.substring(0, username.indexOf(" "));
else
    username = "";
printWriter.write("<span id=\"username_"+i+"\" style=\"display: none;\">"+ username +"</span>");
printWriter.write("<form action=\"\" method=\"post\" name=\"userClickForm_"+i +"\" id=\"userClickForm_"+i +"\">");
printWriter.write(" <input type=\"hidden\" name=\"userId\" value=\""+userId +"\"/>");
printWriter.write("</form>");
......

混合html代码和业务逻辑的主要原因是我必须根据条件和循环结构提供div id。

4

4 回答 4

2

您应该使用某种形式的模板或转换技术。由于您使用的是 jQuery 和 JSP,这可以是服务器端 JSP 或客户端 jQuery 模板插件。

早期的 JSP MVC 模式采用这种形式:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    // read inputs
    String foo = request.getParameter("foo");
    // perform business logic
    SomeResults results = new SomeDataSource().lookupDatabase(foo);
    // place results into scope
    request.setAttribute("results", results);
    // dispatch to JSP to render results
    request.getRequestDispatcher("result.jsp")
           .forward(request, response);
}

这种方法可以与 AJAX 调用一起使用。

或者,您可以使用 JSON 或 XML 数据进行响应并在 JavaScript 中对其进行解析,然后使用 JavaScript 模板引擎执行类似于 JSP 中执行的逻辑的操作。

于 2012-12-20T09:43:24.033 回答
1

您可以通过使用诸如 STRUTS 或 SPRING 之类的 MVC 框架来避免这种情况。

于 2012-12-20T05:18:10.127 回答
1

在 servlet 和 jsp 上使用 xml 而不是 html 使用 jquery 的 ajax 调用的成功属性......在我的情况下,它的工作,bt 我使用类型作为'GET'。

  $.ajax({
            url: ,
            data: ,
            type: ,
            dataType: 'xml',
            async: true,
            success:function(xmlDoc) 
            {   
                var message = xmlDoc.getElementsByTagName("message");
                message = message[0].firstChild.data;

            }
    });

在 Servlet 中使用::

         res.getWriter().write("<response><message>abcdefg</message></response>");
于 2012-12-20T07:05:57.283 回答
0

您应该使用 JSP。它将针对不同的 servlet/jsp 请求,而不是发起 ajax 调用的请求。

于 2012-12-20T05:27:02.270 回答