我有两个不同服务器上运行的相同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