【问题标题】:How to have line breaks in text/plain servlet response如何在文本/纯 servlet 响应中换行
【发布时间】:2023-04-06 09:04:01
【问题描述】:

我有一个生成一些文本的 servlet。这样做的目的是为一个可以轻松解析的应用程序提供一个简单的状态页面,因此我想避免使用 html。

一切正常,除了换行符在过程中的某个地方被吞没。

我尝试了\r\r\n\n,但在浏览器中的结果看起来总是一样的:看起来像换行符的所有内容都消失了,所有内容都在一行中。这使得它几乎无法阅读(机器和人类)。

Firefox 确实确认结果是 text/plain 类型

那么如何在文本/纯文本文档中获取换行符,该文档应该显示在浏览器中并由 servlet 生成?

更新:

其他不起作用的东西:

  • println

  • System.getProperty("line.separator")

【问题讨论】:

  • 你试过类似 PrintWriter writer = response.getWriter(); writer.println();.这将处理底层操作系统的换行符。
  • 如您所说,如果您的 HTTP 响应确实有一个标头 Content-Type: text/plain,那么您的回车和换行输出应该在浏览器中显示为换行符。

标签: java servlets browser newline plaintext


【解决方案1】:

plain/text中完全依赖于浏览器的自动换行处理

例如:

在火狐中

about:config

并设置它

plain_text.wrap_long_lines;true

您无法从服务器处理它,您可能希望将其转换为带有纯文本和换行符或 css 魔法的 html

【讨论】:

  • 这会破坏浏览器窗口末尾的单词,而不是在我需要换行符的地方。 +1 声明,这取决于浏览器...
  • 尝试考虑<wbr>
  • 那将是 html ...我实际上正在考虑使用一个非常简单的 html 子集 ....
【解决方案2】:

正如@gnicker 所说,我会在您的servlet 中选择text-plain 的内容类型:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("text/plain");
    // rest of your code...
}

要输出新行,只需使用 ServletOutputStream 的 println 函数:

ServletOutputStream out = response.getOutputStream();
out.println("my text in the first line");
out.println("my text in the second line");
out.close

换行符可以是\n\r\n,尽管您可以坚持使用println 函数。

【讨论】:

    【解决方案3】:

    对不起,又是我的错。

    我们配置了一个压缩 Servlet 过滤器,它删除了换行符。

    没有那个过滤器\n 工作得很好。

    【讨论】:

      最近更新 更多