Java Servlet中PrintWriter的println()无法输出换行问题修复咨询
问题根因
你当前设置的响应内容类型是text/html,浏览器渲染HTML页面时,会默认忽略普通的换行符(\n、\r\n)以及连续空白字符,PrintWriter.println()生成的换行只会作用于HTML源代码的格式,不会在页面展示效果上生效。
修复方案
方案1:使用HTML换行标签<br>
直接在每条错误信息末尾加HTML识别的换行标签即可,修改else代码块里的遍历逻辑:
errors.forEach((k,v) -> { out.println(k + ": " + v + "<br>"); });
该方案改动最小,适合简单的错误提示场景。
方案2:用<pre>标签包裹错误内容
如果你需要保留原始文本的换行、空格等格式,可以把所有错误内容放在预格式化标签<pre>中,修改后代码如下:
else{ response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html><head>"); out.println("<meta name=\"decorator\" content=\"atl.admin\" />"); out.println("<title>Bulk User Creation Tool</title></head>"); out.println("<body style=\"text-align: center;\">"); // 开启预格式化,会保留所有空白、换行 out.println("<pre>"); errors.forEach((k,v) -> { // 不需要额外加\r\n,println自带的换行就会被pre标签识别 out.println(k + ": " + v); }); out.println("</pre>"); out.println("</body></html>"); out.close(); }
内容的提问来源于stack exchange,提问作者worrier
相关产品推荐
相关产品推荐

