我在一个jsp页面上,我正在对一个servlet进行ajax调用,该servlet提供了完整的html代码以显示在页面上。它工作得很好,但在servlet文件中有多行包含html代码的printWriter.write(...)代码,看起来很混乱。它变得很难维护,因为我必须通过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。
发布于 2012-12-20 17:43:24
您应该使用某种形式的模板或转换技术。因为您使用的是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-20 13:18:10
你可以通过使用像STRUTS或SPRING这样的MVC框架来避免这种情况。
发布于 2012-12-20 15:05:57
在servlet上使用xml而不是html,在jsp上使用jquery的ajax调用的成功属性...在我的例子中,它是有效的,但我使用了type作为'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>");https://stackoverflow.com/questions/13965749
复制相似问题