如何预防并移除JSP返回responseText中的多余空白字符(换行、空格)
解决JSP返回AJAX响应包含多余空白字符的问题
这个问题我之前踩过坑!JSP里的空白字符(换行、空格、制表符)经常悄悄混入响应内容里,尤其是页面指令、脚本块前后的空白,很容易导致前端的字符串判断逻辑失效——就像你遇到的返回" okay"或" not"这种情况,多了个空格就和预期的"okay""not"匹配不上了。
一、手动清理JSP中的多余空白
JSP会把脚本块<% ... %>和指令<%@ ... %>之外的所有文本(包括换行、空格)直接输出到响应里,所以要把这些无关的空白删掉:
比如你的checkName.jsp可以改成紧凑写法,把指令和脚本连在一起,去掉所有不必要的换行和空格:
<%@ page language="java" pageEncoding="UTF-8"%><% String username=request.getParameter("username"); System.out.println("Username:"+username); if(username!=null && !username.equals("")){ if(!username.equals("Raju")){ out.print("okay"); System.out.println("okay"); }else{ out.print("not"); System.out.println("not"); } } %>
重点注意:
- 把
<%@ page ...%>和后面的<%直接连起来,中间不要有换行或空格 - 脚本块
%>后面不要留任何换行或空格(很多人容易忽略这一点,最后一个%>后面的换行也会被输出) - 脚本内部的换行不影响,因为Java代码里的换行不会被输出到响应中
二、使用JSP的trimDirectiveWhitespaces属性(省心方案)
如果不想手动清理每一处空白,可以在page指令里添加trimDirectiveWhitespaces="true",它会自动移除指令、脚本块前后的空白字符:
<%@ page language="java" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%> <% String username=request.getParameter("username"); System.out.println("Username:"+username); if(username!=null && !username.equals("")){ if(!username.equals("Raju")){ out.print("okay"); System.out.println("okay"); }else{ out.print("not"); System.out.println("not"); } } %>
这个属性是Servlet 2.5及以上规范支持的,主流服务器(比如Tomcat 6+)都兼容,能省不少手动清理的功夫。
三、前端做兜底处理(双重保障)
虽然后端处理是根本,但前端可以对返回的响应文本做trim()处理,把首尾的空白字符(空格、换行、制表符)都去掉,避免万一后端还有漏网的空白:
修改valid.js里的showUsernameStatus函数:
function showUsernameStatus(){ if (request.readyState == 4) { if (request.status == 200) { var val=request.responseText.trim(); // 这里加trim() alert("Response: "+val); if (val == "okay") { // 你的处理逻辑 } else { // 你的处理逻辑 } } } }
这样哪怕后端不小心输出了多余空白,前端也能自动处理掉,双重保险更稳妥。
总结一下,推荐的做法是后端用trimDirectiveWhitespaces+ 前端trim(),既省心又能避免各种意外情况。
内容的提问来源于stack exchange,提问作者codenow123
相关产品推荐
相关产品推荐

