JSP:在response.setHeader中传递特殊字符?

时间:2014-10-09 06:43:56

标签: java jsp

我陷入了基本的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());

3 个答案:

答案 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我将所有问号替换为新行并完成了我的要求 希望它也有助于其他人。:)