为什么我需要在这个Javaservlet中将内容类型设置为html? import javax.servlet.http.*; 导入javax.servlet.*; 导入java.io.*; 导入java.util.Date; 公共类HelloServlet扩展了HttpServlet { public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException { setContentType(“text/html;charset=utf-8”); PrintWriter out=response.getWriter(); println(“仅适用于testHello,world!html版本”); out.flush(); out.close(); } public void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException { doGet(请求、响应); } }

为什么我需要在这个Javaservlet中将内容类型设置为html? import javax.servlet.http.*; 导入javax.servlet.*; 导入java.io.*; 导入java.util.Date; 公共类HelloServlet扩展了HttpServlet { public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException { setContentType(“text/html;charset=utf-8”); PrintWriter out=response.getWriter(); println(“仅适用于testHello,world!html版本”); out.flush(); out.close(); } public void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException { doGet(请求、响应); } },html,servlets,xhtml,content-type,Html,Servlets,Xhtml,Content Type,如果我将内容类型设置为xhtml,那么web浏览器将自动打开“保存文件”对话框。为什么会发生这种情况?首先,请注意,xhtml的正确内容类型不是xhtml或text/xhtml,而是application/xhtml+xml 无论如何,您需要通过检查acceptHTTP请求头来检查用户代理是否能够实际接受此内容类型。根据: 如果Accept头显式包含application/xhtml+xml(没有“q”参数或正“q”值),则使用该媒体类型交付文档 如果Accept头显式包含text/html(没

如果我将内容类型设置为
xhtml
,那么web浏览器将自动打开“保存文件”对话框。为什么会发生这种情况?

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

无论如何,您需要通过检查
accept
HTTP请求头来检查用户代理是否能够实际接受此内容类型。根据:

  • 如果Accept头显式包含
    application/xhtml+xml
    (没有“q”参数或正“q”值),则使用该媒体类型交付文档
  • 如果Accept头显式包含
    text/html
    (没有“q”参数或正“q”值),则使用该媒体类型交付文档
  • 如果accept标头包含“/”(一些用户代理使用此约定表示他们将接受任何内容),则使用
    text/html
    交付文档

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

    对于XHTML1.0,内容类型应该是text/html(参见第A.9点)

    编辑:

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

    或者:

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

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

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


    否则,它将尝试保存它或使用其他应用程序打开它的方法,该方法接受字符串参数,但不返回任何内容

    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);
        }
    }
    
    这里“text”是类型,html是子类型

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

    response.setContentType("text/html");
    

    第A.9点涉及字符编码。有关建议的媒体类型(),请参见第3节。浏览器根据
    内容类型
    标题“知道”。这就是问题的症结所在:)您是XHTML过度宣传的另一个受害者。将鼠标放在问题上的
    [xhtml]
    标记上,直到弹出框出现,然后单击其中的“信息”链接,然后结束。只需使用
    text/html
    response.setContentType("text/css");