[英]Java - Default contentType for Servlet
在servlet中,通常我們將指定一個contentType,然后可以打印出html代碼。
response.setContentType("text/html");
PrintWriter out = response.getWriter();
如果沒有指定contentType,什么contentType將設置為默認值呢? 我通過添加response.setContentType("text/html");
進行了測試response.setContentType("text/html");
,然后將其刪除,但是我的網站能夠呈現html嗎? 這是為什么?
您的問題有兩個不同的部分。 讓我分別回答
Content-Type
標頭值 如果是什么,我們沒有指定
contentType
,任何contentType
將被設置為默認值嗎?
由Javadoc判斷ServletResponse#getContentType
返回用於此響應中發送的MIME正文的內容類型。 在提交響應之前,必須已經使用
setContentType(java.lang.String)
指定了適當的內容類型 。 如果未指定任何內容類型,則此方法返回null
。
就ServletResponse
而言,沒有默認值。 響應將僅不包含Content-Type
標頭。
Java Servlet規范(版本2.4和版本3)明確指出,Servlet容器不得定義默認內容類型。
這是Java Servlet 3.0規范的摘錄-JSR-315 ,重點是
Servlet程序員負責確保在響應對象中為Servlet生成的內容正確設置
Content-Type
標頭。 HTTP 1.1規范不需要在HTTP響應中設置此標頭。 當Servlet程序員未設置默認內容類型時,Servlet容器不得設置默認內容類型。
是否能夠觀察到這一點取決於外部因素。 可能存在填充Content-Type
標頭的servlet過濾器,在您的機器和執行此操作的服務器之間可能存在代理,但是所有這些特定於給定應用程序或它的部署方式,而不是由Servlet決定。容器。
這在應用程序服務器之間可能有所不同,甚至取決於一部分配置(您可以使用web.xml
mime-mapping
指定擴展名和內容類型之間mime-mapping
)。
最重要的是,您可以通過多種方式在Java Web應用程序中設置Content-Type
標頭,但是就Servlet API而言,沒有默認值 。
Content-Type
標頭的響應 如果是什么,我們沒有指定
contentType
,任何contentType
將被設置為默認值嗎? 我通過添加response.setContentType("text/html");
進行了測試response.setContentType("text/html");
,然后將其刪除,但是我的網站能夠呈現html嗎? 這是為什么?
如前所述,可能會一直設置內容類型。 但是,即使不是這種情況,您的網絡瀏覽器在大多數情況下仍可以處理它。
當瀏覽器遇到缺少內容類型標頭的響應時,他們只是試圖做出有根據的猜測。
例如,Firefox 使用一種稱為“ 未知解碼器”的東西
不幸的是,我找不到描述Chrome / Chromium行為的好資料。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.