我在一个 jsp 页面上,正在对 servlet 进行 ajax 调用,而该 servlet 则提供要在页面上显示的完整 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。
最佳答案
您应该使用某种形式的模板或转换技术。由于您使用的是 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 中执行的逻辑的操作。
关于java - 避免在 servlet 中使用 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965749/