2010-11-03 70 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"); 
相關問題