Почему мне нужно установить тип контента в HTML в этом сервлете Java? - PullRequest
3 голосов
/ 03 ноября 2010
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, то веб-браузер автоматически откроет диалоговое окно сохранения файла. Почему это случилось?

Ответы [ 5 ]

3 голосов
/ 03 ноября 2010

Прежде всего, обратите внимание, что правильный тип содержимого для xhtml не xhtml или text/xhtml, а application/xhtml+xml.

В любом случае, вам нужно проверить, может ли пользовательский агентфактически принять этот тип содержимого, изучив заголовок HTTP-запроса Accept.Согласно рекомендация W3C :

  1. Если заголовок Accept явно содержит application/xhtml+xml (без параметра «q» или с положительным значением «q»), доставьте документ, используяэтот тип носителя.
  2. Если заголовок Accept явно содержит text/html (без параметра «q» или с положительным значением «q»), доставьте документ с использованием этого типа носителя.
  3. Еслизаголовок accept содержит « / » (соглашение, которое некоторые пользовательские агенты используют, чтобы указать, что они будут принимать все), доставьте документ, используя text/html.
1 голос
/ 03 ноября 2010

Либо:

  1. Когда вы говорите , установите тип контента на xhtml, то есть буквально xhtml или text/xhtml - в этом случае проблематип содержимого для XHTML: application/xhtml+xml
  2. . Вы используете Internet Explorer 8 или ниже, который не поддерживает XHTML.Поддержка добавляется в IE9 и доступна только в том случае, если вы используете бета-версию.
1 голос
/ 03 ноября 2010

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/

0 голосов
/ 29 декабря 2014

Его метод принимает строковый параметр и ничего не возвращает.

response.setContentType("text/html");

здесь «текст» - это тип, а html - это подтип.

setContentType() метод устанавливает тип содержимого «ответа»доставляется ", когда ответ еще не отправлен.Вы можете сказать для CSS:

response.setContentType("text/css");
0 голосов
/ 03 ноября 2010

Разве это не базовая функция браузера?

Если браузер знает формат файла (например, html или xml или текст ..), он будет отображать содержимое непосредственно в браузере

В противном случае,он пытается сохранить его или открыть с помощью другого приложения

...