我有两个不同服务器上运行的相同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,然后我打印它,仅此。
什么可以证明不同服务器的不同输出?有没有任何环境变量来控制它?
===========解决方案如下:
我假设您的代码示例中的out
是由ServletResponse.getWriter()
返回的作家,它是PrintWriter
。
除非使用编写器实现的servlet容器tinkers,它应该使用由System.getProperty("line.separator")
返回的平台相关行分隔符。在默认的unix系统上,这是\n
。
要解决您的问题,您可以首先检查受感染系统上的System.getProperty("line.separator")
的值,如果是Windows分隔符,则查找更改系统属性或检查启动服务器的命令是否覆盖系统的代码物业通过-D
parameter。