为什么我需要在这个Java Servlet中将content-type设置为html?

时间:2010-11-03 18:39:11

标签: html servlets xhtml content-type

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.Date;

public class HelloServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
    {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html><head><title>only for test</title></head><body>Hello, world!html version</body></html>");
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
    {
        doGet(request, response);
    }
}

如果我将内容类型设置为xhtml,那么Web浏览器将自动打开保存文件对话框。为什么会这样?

5 个答案:

答案 0 :(得分:3)

首先,请注意xhtml的正确内容类型不是xhtmltext/xhtml,而是application/xhtml+xml

无论如何,您需要通过检查Accept HTTP请求标头来检查用户代理是否可以实际接受此内容类型。根据{{​​3}}:

  1. 如果Accept标头明确包含application/xhtml+xml(没有“q”参数或正“q”值),则使用该媒体类型传送文档。
  2. 如果Accept标头明确包含text/html(没有“q”参数或正“q”值),则使用该媒体类型传送文档。
  3. 如果接受标头包含“ / ”(某些用户代理用来表示他们会接受任何内容的约定),请使用text/html传送文档。

答案 1 :(得分:1)

text / xhtml不是有效的内容类型,因此您的浏览器不会知道如何正确呈现它。

对于XHTML 1.0,内容类型应为text / html http://www.w3.org/TR/xhtml-media-types/#compatGuidelines(参见A.9节)

编辑:

这是一个更好的链接,专门讨论XHTML及其各种允许的Content-Type

http://www.w3.org/International/articles/serving-xhtml/

答案 2 :(得分:1)

或者:

  1. 当您说将内容类型设置为xhtml 时,您的字面意思是xhtmltext/xhtml - 在这种情况下,问题是内容类型为XHTML是application/xhtml+xml
  2. 您使用的是Internet Explorer 8或更低版本,它不支持XHTML。 IE9中添加了支持,仅在您使用测试版时才可用。

答案 3 :(得分:0)

它接受字符串参数并且不返回任何内容的方法。

response.setContentType("text/html");

这里“text”是类型,html是子类型。

当尚未发送响应时,

setContentType()方法设置“正在传递响应”的内容类型。 你可以说css:

response.setContentType("text/css");

答案 4 :(得分:-2)

这不是基本的浏览器功能吗?

如果浏览器知道文件格式(如html或xml或text ..),它将直接在浏览器上显示内容

否则,它会尝试保存或使用其他应用程序打开