我陷入了基本的JSP操作。我想要一个新的行,所以我最后添加了\ n但是它抛出了一个例外。如果我删除 \ n 一切正常
异常
java.lang.IllegalArgumentException: Invalid LF not followed by whitespace
类文件
StringBuilder junitLog = new StringBuilder();
junitLog.append("The class that is being executed : " + description.getClassName() +"\n");
junitLog.append("Number of testcases to execute : " + description.testCount()+"\n");
/**
* @return the junitLog
*/
public StringBuilder getJunitLog() {
return junitLog;
}
/**
* @param junitLog the junitLog to set
*/
public void setJunitLog(StringBuilder junitLog) {
this.junitLog = junitLog;
}
JSP: -
response.setHeader("finalJUNITReport",""+ junitListener.getJunitLog());
答案 0 :(得分:1)
在设置头文件之前尝试对它们进行Base64编码,并在想要阅读它们时对其进行解码。
答案 1 :(得分:1)
只要您以OO的方式考虑它,您就会想知道为什么不能在标题中添加新行。
但是一旦你认为它将使用HTTP协议传输,它就变得很明显:HTTP消息(请求或响应)只不过是一个连续的字节串。对于HTTP,标题部分首先出现,由以下行组成:
HEADER_NAME: header value
如果在标题值中添加新行,则后面的任何内容都将被视为新标题。如果你连续2个新行表示标题部分的结尾。
你所能做的只是使用"\n "
,因为如果一个空格以一个空格开头,那么它应该是一个延续线。
这就是错误消息的原因 Invalid LF后面没有空格,并且希望它在那里,因为你会发送一个不正确的标题部分,这可能更难检测......
答案 2 :(得分:0)
我在我的要求中失败了。 :) 正如Serge Ballesta所阐明的那样。
如果您在标头值中添加了新行,那么后面的任何内容都将被视为新标题。。
以下是根据我的要求应用的逻辑。
以下是我的代码更改:
junitLog.append("The class that is being executed : " + description.getClassName() +"?");
junitLog.append("Number of testcases to execute : " + description.testCount()+"?");
我在字符串的末尾添加了一个问号。字符串变成了下面提到的东西。
The class that is being executed : testCreateHaulier? Number of testcases to execute : 39?
我使用response.setHeader Code从JSP传递了String,如下所示:
response.setHeader("finalJUNITReport",""+ junitListener.getJunitLog());
在我的java类文件中我做了类似的事情:
junitReportString=yc.getHeaderField("finalJUNITReport").toString();
System.out.println(junitReportString);
junitReportString=junitReportString.replaceAll("\\?", "\n");
System.out.println("Report Details ==============>"+junitReportString);
使用replaceAll我将所有问号替换为新行并完成了我的要求 希望它也有助于其他人。:)