代码之家  ›  专栏  ›  技术社区  ›  Jichao

为什么需要在Java Servlet中设置内容类型到HTML?

  •  3
  • Jichao  · 技术社区  · 15 年前
    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 回复  |  直到 10 年前
        1
  •  3
  •   Grodriguez    15 年前

    首先,请注意,XHTML的正确内容类型不是 xhtml text/xhtml 但是 application/xhtml+xml .

    无论如何,您需要检查用户代理是否可以通过检查 Accept HTTP请求头。根据 the W3C recommendation :

    1. 如果接受头显式包含 应用程序/xhtml+xml (无“q”参数或正“q”值)使用该媒体类型传递文档。
    2. 如果接受头显式包含 text/html (无“q”参数或正“q”值)使用该媒体类型传递文档。
    3. 如果接受头包含“ / “(一些用户代理用来表示他们将接受任何东西的惯例),使用 文本/ HTML .
        2
  •  1
  •   kkress    15 年前

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

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

    编辑:

    这是一个更好的链接,专门讨论XHTML及其各种允许的内容类型

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

        3
  •  1
  •   Quentin    15 年前

    要么:

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

    它的方法接受字符串参数,但不返回任何值。

    response.setContentType("text/html");
    

    这里“文本”是类型,HTML是子类型。

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

    response.setContentType("text/css");
    
        5
  •  -2
  •   exiter2000    15 年前

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

    如果浏览器知道文件格式(如HTML、XML或文本..),它将直接在浏览器上显示内容。

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