O documento descreve como retornar informações para o navegador usando a interface ServletResponse. Ele explica como enviar textos e binários, definir o tipo de conteúdo e codificação, e dá exemplos de como enviar arquivos binários.
Retornando informações parao browser ServletResponse (interface) Para enviar informações binárias (figuras, ...) getOutputStream() Para enviar textos (essencialmente HTML) getWriter() Para enviar textos e binários getOutputStream() Para indicar o tipo de conteúdo retornado public void setContentType(String) public void setCharacterEncoding(String) Para obter os valores padrão public String getCharacterEncoding() public String getContentType()
3.
Onde obter detalhes?Character encodings http://www.iana.org/assignments/character-sets Contenty type (MIME Types) http://www.iana.org/ MIME Types foram escritos para email Atualmente são empregados por HTTP, ... Exemplo (header): Content-type: text/plain
doGet() res. setContentType("image/jpeg"); ServletContext context = getServletContext (); URL url = context. getResource ("/kyrios-logo.jpg"); OutputStream os = res. getOutputStream (); InputStream is = url.openStream(); byte[] byteArray = new byte[1024]; int bytesLidos = 0; while ((bytesLidos = is.read(byteArray)) != -1) { os.write(byteArray,0,bytesLidos); } os.flush(); is.close();
6.
Artefatos deste exemploCrie o diretório pa07 index.html (página inicial) kyrios-logo.jpg (arquivo binário a ser retornado) WEB-INF (diretório) web.xml (arquivo) classes (diretório) SendBinary.java (servlet) SendBinary.class (servlet compilado)
7.
Questão O queocorre quando o método POST é empregado? Por que?
8.
Problemas com UTF-8,ISO-8859-1, ... [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa26/ ]
9.
Alerta sobre acodificação empregada Defina o formato empregado setContentType(“text/html;charset=UTF8”) ou setContentType(“text/html;charset=ISO-8859-1”) Use a opção -encoding UTF-8 para compilar arquivos escritos no formato UTF-8 ou Use a opção -encoding ISO-8859-1 para compilar arquivos escritos em ISO-8859-1
10.
Browser exibeincorretamente!!!??? Provavelmente está configurado para usar um padrão diferente do fornecido Neste caso, altere o padrão Para o browser Firefox faça... Exibir (menu) Codificação (menu) UTF-8 (opção)
11.
Ciclo de Vidade um Servlet [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa25/ ]
Servlet contêiner (seqüênciade ações) Para cada aplicação em $CATALINA_HOME/webapps o contêiner Lê descritores de implantação ( web.xml ) Para cada servlet definido em web.xml Cria uma instância do servlet Class.forName(classe).newInstance() (usa construtor sem argumentos) Envia mensagem init(ServletConfig) para a instância Aguarda requisições Recebe requisição, identifica servlet destino Invoca a correspondente mensagem service()
14.
Exercício Crie umServlet que registre os principais eventos do ciclo de vida de um servlet, ou seja, o início (init()), o tratamento de uma requisição (get ou post) e o término (destroy()) Crie o arquivo log.txt, no contexto da aplicação para registrar cada um destes “momentos”
Cenário típico davida de um servlet Após a instância de um servlet ser criada o contêiner envia a mensagem init() Servlet pode fazer uso do init() para recuperar argumentos, iniciar SGBD, ... Argumentos são passados em web.xml (servlet) <init-param> <param-name> Nome </param-name> <param-value> Curso de Servlet </param-value> </init-param> Argumentos são recuperados via ServletConfig
21.
Problema (e dicas)Servlet que retorna mensagem fornecida em web.xml por meio do parâmetro identificado por msg Acrescentar em web.xml ( <servlet> ) <init-param> <param-name>msg</param-name> <param-value>A terra é azul!</param-value> </init-param> Usar métodos em init() ServletConfig getServletConfig() String getInitParameter(String)