2010-11-03 55 views
2
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浏览器会自动打开保存文件对话框。为什么会发生?为什么我需要在此Java Servlet中将content-type设置为html?

+0

你是XHTML overhype的另一个受害者。将鼠标置于放置问题的'[xhtml]'标签之上,直到popbox显示出来,然后在其中单击*“info”*链接,并获得明智的结果。只需使用'text/html'。 – BalusC 2014-12-30 12:28:44

回答

3

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

无论如何,您需要通过检查Accept HTTP请求标头来检查用户代理是否确实可以接受此内容类型。根据the W3C recommendation

  1. 如果Accept首部明确包含application/xhtml+xml(具有或者没有在“q”参数或正“Q”值)提供使用该媒体类型的文档。
  2. 如果Accept报头明确包含text/html(不带“q”参数或正值“q”值),则使用该媒体类型传递文档。
  3. 如果accept头包含“/”(某些用户代理用来指示他们将接受任何内容的惯例),请使用text/html传递文档。
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/

+0

点A.9涉及字符编码。有关推荐的媒体类型,请参阅第3节(http://www.w3.org/TR/xhtml-media-types/#media-types)。 – Grodriguez 2010-11-03 18:53:42

1

或者:

  1. 当你说设置的内容类型xhtml你的意思是字面上xhtmltext/xhtml - 在这种情况下,问题是,XHTML的内容类型为application/xhtml+xml
  2. 您正在使用Internet Explorer 8或更低,这没有按”不支持XHTML。支持正在被添加到IE9中,并且仅在您使用测试版时才可用。
-2

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

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

否则的内容,它试图将其打开或保存与其他应用

+0

浏览器根据“Content-Type”标题“知道”。这就是这个问题的全部内容:) – BalusC 2010-11-03 20:22:43

0

其方法采用字符串参数并不返回任何内容。

response.setContentType("text/html"); 

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

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

response.setContentType("text/css"); 
相关问题