我有兩個不同服務器上運行的相同Servlet。這兩臺服務器都是Linux Red Hat。是什麼導致Java Servlet僅使用LF或CRLF打印字符串
這個Servlet由一些shell腳本調用,它接收Servlet響應並用它做出一些決定。
問題是:Shell腳本對不同類型的斷線(LF或CRLF)非常敏感。在一個服務器中,Servlet的輸出帶有CRLF,而在另一個服務器中運行的Servlet的輸出只帶有LF。外觀:
服務器1:
0 \r \n
31 0d 0a
服務器2:
0 \n
30 0a
這是打印出結果的servlet代碼的一部分:
Integer authorization = checkAuthorization(error_code, sat);
if(authorization != null){
out.println(authorization);
}
正如你所看到的,我從一個函數接收一個Integer,然後我打印它,僅此。
什麼可以證明不同服務器的不同輸出?有沒有任何環境變量來控制它?
有一個平臺相關行分隔符的概念。請參閱http://stackoverflow.com/questions/207947/how-do-i-get-a-platform-dependent-new-line-character,但這通常涵蓋Unix和Windows或Mac之間的區別。這會影響具體具有println()方法的打印作者類型類。但是一個servlet不必使用這些。這涉及到您的servlet如何創建輸出。即。從現有文件加載數據。 /使用JSON/XML庫。是隱含地輸出CR LF值的代碼? – slipperyseal
但您在回答中確實提到了println,請查看依賴於平臺的行分隔符屬性 – slipperyseal
您只是在尋找爲什麼發生這種情況,或者您想要一種方法來修改代碼以確保它不會發生(包括跨平臺) ? – Alex