servlet-respostas

3.042 visualizações

Publicada em

Servlet (respostas)

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.042
No SlideShare
0
A partir de incorporações
0
Número de incorporações
36
Ações
Compartilhamentos
0
Downloads
106
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

servlet-respostas

  1. 1. Como retornar informações para o browser ? Fábio Nogueira de Lucena Instituto de Informática (UFG)
  2. 2. Retornando informações para o browser <ul><li>ServletResponse (interface) </li></ul><ul><ul><li>Para enviar informações binárias (figuras, ...) </li></ul></ul><ul><ul><ul><li>getOutputStream() </li></ul></ul></ul><ul><ul><li>Para enviar textos (essencialmente HTML) </li></ul></ul><ul><ul><ul><li>getWriter() </li></ul></ul></ul><ul><ul><li>Para enviar textos e binários </li></ul></ul><ul><ul><ul><li>getOutputStream() </li></ul></ul></ul><ul><li>Para indicar o tipo de conteúdo retornado </li></ul><ul><ul><li>public void setContentType(String) </li></ul></ul><ul><ul><li>public void setCharacterEncoding(String) </li></ul></ul><ul><li>Para obter os valores padrão </li></ul><ul><ul><li>public String getCharacterEncoding() </li></ul></ul><ul><ul><li>public String getContentType() </li></ul></ul>
  3. 3. Onde obter detalhes? <ul><li>Character encodings </li></ul><ul><ul><li>http://www.iana.org/assignments/character-sets </li></ul></ul><ul><li>Contenty type (MIME Types) </li></ul><ul><ul><li>http://www.iana.org/ </li></ul></ul><ul><li>MIME Types foram escritos para email </li></ul><ul><li>Atualmente são empregados por HTTP, ... </li></ul><ul><ul><li>Exemplo (header): Content-type: text/plain </li></ul></ul>
  4. 4. Enviando arquivo binário [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa07/ ]
  5. 5. doGet() <ul><li>res. setContentType (&quot;image/jpeg&quot;); </li></ul><ul><li>ServletContext context = getServletContext (); </li></ul><ul><li>URL url = context. getResource (&quot;/kyrios-logo.jpg&quot;); </li></ul><ul><li>OutputStream os = res. getOutputStream (); </li></ul><ul><li>InputStream is = url.openStream(); </li></ul><ul><li>byte[] byteArray = new byte[1024]; </li></ul><ul><li>int bytesLidos = 0; </li></ul><ul><li>while ((bytesLidos = is.read(byteArray)) != -1) { </li></ul><ul><li>os.write(byteArray,0,bytesLidos); </li></ul><ul><li>} </li></ul><ul><li>os.flush(); </li></ul><ul><li>is.close(); </li></ul>
  6. 6. Artefatos deste exemplo <ul><li>Crie o diretório pa07 </li></ul><ul><ul><li>index.html (página inicial) </li></ul></ul><ul><ul><li>kyrios-logo.jpg (arquivo binário a ser retornado) </li></ul></ul><ul><ul><li>WEB-INF (diretório) </li></ul></ul><ul><ul><ul><li>web.xml (arquivo) </li></ul></ul></ul><ul><ul><ul><li>classes (diretório) </li></ul></ul></ul><ul><ul><ul><ul><li>SendBinary.java (servlet) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>SendBinary.class (servlet compilado) </li></ul></ul></ul></ul>
  7. 7. Questão <ul><li>O que ocorre quando o método POST é empregado? </li></ul><ul><li>Por que? </li></ul>
  8. 8. Problemas com UTF-8, ISO-8859-1, ... [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa26/ ]
  9. 9. Alerta sobre a codificação empregada <ul><li>Defina o formato empregado </li></ul><ul><ul><ul><li>setContentType(“text/html;charset=UTF8”) ou </li></ul></ul></ul><ul><ul><ul><li>setContentType(“text/html;charset=ISO-8859-1”) </li></ul></ul></ul><ul><li>Use a opção -encoding UTF-8 para compilar arquivos escritos no formato UTF-8 ou </li></ul><ul><li>Use a opção -encoding ISO-8859-1 para compilar arquivos escritos em ISO-8859-1 </li></ul>
  10. 10. Browser exibe incorretamente!!!??? <ul><li>Provavelmente está configurado para usar um padrão diferente do fornecido </li></ul><ul><li>Neste caso, altere o padrão </li></ul><ul><li>Para o browser Firefox faça... </li></ul><ul><ul><li>Exibir (menu) </li></ul></ul><ul><ul><ul><li>Codificação (menu) </li></ul></ul></ul><ul><ul><ul><ul><li>UTF-8 (opção) </li></ul></ul></ul></ul>
  11. 11. Ciclo de Vida de um Servlet [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa25/ ]
  12. 12. Modelo de ciclo de vida
  13. 13. Servlet contêiner (seqüência de ações) <ul><li>Para cada aplicação em $CATALINA_HOME/webapps o contêiner </li></ul><ul><ul><li>Lê descritores de implantação ( web.xml ) </li></ul></ul><ul><ul><li>Para cada servlet definido em web.xml </li></ul></ul><ul><ul><ul><li>Cria uma instância do servlet </li></ul></ul></ul><ul><ul><ul><ul><li>Class.forName(classe).newInstance() (usa construtor sem argumentos) </li></ul></ul></ul></ul><ul><ul><ul><li>Envia mensagem init(ServletConfig) para a instância </li></ul></ul></ul><ul><li>Aguarda requisições </li></ul><ul><ul><li>Recebe requisição, identifica servlet destino </li></ul></ul><ul><ul><li>Invoca a correspondente mensagem service() </li></ul></ul>
  14. 14. Exercício <ul><li>Crie um Servlet 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()) </li></ul><ul><li>Crie o arquivo log.txt, no contexto da aplicação para registrar cada um destes “momentos” </li></ul>
  15. 15. HttpServletRequest e HttpServletResponse são interfaces Quem as implementa? [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa27/ ]
  16. 16. Organização de interfaces <ul><li>HttpServletRequest estende ServletRequest </li></ul><ul><li>HttpServletResponse estende ServletResponse </li></ul>
  17. 17. Obtendo nome de classe (dado objeto) <ul><li>Quem implementa? </li></ul><ul><ul><li>HttpServletRequest </li></ul></ul><ul><ul><li>HttpServletResponse </li></ul></ul><ul><li>doGet() </li></ul><ul><li>PrintWriter pw = res.getWriter(); </li></ul><ul><li>String n1 = req. getClass().getName() ; </li></ul><ul><li>String n2 = res.getClass().getName(); </li></ul><ul><li>pw.println(“<html><body>”); </li></ul><ul><li>pw.println(n1 + “<br>” + n2); </li></ul><ul><li>pw.println(“</body></html”); </li></ul><ul><li>Resposta </li></ul><ul><ul><li>Depende do contêiner </li></ul></ul>
  18. 18. Benefício do emprego de interfaces
  19. 19. ServletConfig Iniciando um Servlet [ http://exemplos.googlecode.com/svn/trunk/scwcd/pa08/ ]
  20. 20. Cenário típico da vida de um servlet <ul><li>Após a instância de um servlet ser criada o contêiner envia a mensagem init() </li></ul><ul><li>Servlet pode fazer uso do init() para recuperar argumentos, iniciar SGBD, ... </li></ul><ul><li>Argumentos são passados em web.xml (servlet) </li></ul><ul><ul><li><init-param> <param-name> Nome </param-name> <param-value> Curso de Servlet </param-value> </init-param> </li></ul></ul><ul><li>Argumentos são recuperados via </li></ul><ul><ul><li>ServletConfig </li></ul></ul>
  21. 21. Problema (e dicas) <ul><li>Servlet que retorna mensagem fornecida em web.xml por meio do parâmetro identificado por msg </li></ul><ul><li>Acrescentar em web.xml ( <servlet> ) </li></ul><ul><ul><li><init-param> <param-name>msg</param-name> <param-value>A terra é azul!</param-value> </init-param> </li></ul></ul><ul><li>Usar métodos em init() </li></ul><ul><ul><li>ServletConfig getServletConfig() </li></ul></ul><ul><ul><li>String getInitParameter(String) </li></ul></ul>
  22. 22. web.xml <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> </li></ul><ul><li><web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; </li></ul><ul><li>xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; </li></ul><ul><li>xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee </li></ul><ul><li>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot; version=&quot;2.4&quot;> </li></ul><ul><li><servlet> </li></ul><ul><li><servlet-name>Init</servlet-name> </li></ul><ul><li><servlet-class>Init</servlet-class> </li></ul><ul><li>< init-param > < param-name >msg</ param-name > < param-value >A terra é azul!</ param-value > </li></ul><ul><li></ init-param > </li></ul><ul><li></servlet> </li></ul><ul><li><servlet-mapping> </li></ul><ul><li><servlet-name>Init</servlet-name> </li></ul><ul><li><url-pattern>/*</url-pattern> </li></ul><ul><li></servlet-mapping> </li></ul><ul><li></web-app> </li></ul>
  23. 23. Revisão <ul><li>Estrutura do código </li></ul><ul><ul><li>pa08 (diretório) </li></ul></ul><ul><ul><ul><li>WEB-INF (diretório) </li></ul></ul></ul><ul><ul><ul><ul><li>web.xml (arquivo descritor da aplicação) (contém elemento init-param ) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>classes (diretório contendo servlet) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Init.java (código fonte do servlet) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Init.class (código compilado do servlet) </li></ul></ul></ul></ul></ul>

×