Servlets Programação em Rede

Propaganda
Programação em Rede
IGE, ETI e EI
Servlets
Redigido a partir de http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
Estrutura básica de um servlet - exemplo de servlet que gere pedidos GET.
Os pedidos GET, em HTTP, são realizados quando o utilizador solicita a navegação para
determinado site (os servlets também podem gerir pedidos POST).
Exemplo com GET:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Use "request" to read incoming HTTP headers
// and HTML form data (e.g. data the user entered and submitted)
// Use "response" to specify the HTTP response line and headers
PrintWriter out = response.getWriter();
// Use "out" to send content to browser
}
}
Programação em Rede
IGE, ETI e EI
Uma classe servlet deve herdar de HttpServlet e sobrecarregar doGet ou doPost, ou
ambos.
HttpServletRequest tem métodos para obter informações acerca dos dados input.
HttpServletResponse tem métodos para obter informações acerca dos dados de output e
permite obter um objecto PrintWriter utilizado para responder a um cliente.
Exemplo de Servlet que gera texto:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
Programação em Rede
Um Servlet que gera HTML
A
maioria dos servlets são
utilizados para gerar HTML e
não apenas texto (como no
exemplo precedente). Para
isso, é necessário:
(1) notificar o browser de que
o servlet está a enviar
HTML e
(2) construir uma página
HTML bem formada
através de instruções
prinln.
IGE, ETI e EI
Inicialmente é indicado o Content-Type da
página da seguinte forma:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWWW extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD
HTML 4.0 " +
"Transitional//EN\">\n" +
"<HTML>\n" +
"<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +
"<BODY>\n" +
"<H1>Hello WWW</H1>\n" +
"</BODY></HTML>“ ); // fim de out.println
}
}
Programação em Rede
Resultado:
IGE, ETI e EI
Programação em Rede
IGE, ETI e EI
Num servlet existem duas partes da página HTML que normalmente não mudam:
DOCTYPE e HEAD.
DOCTYPE é ignorado pela maioria dos browser e utilizado apenas para a validação
formal de páginas HTML e para a verificação da versão HTML.
HEAD contém apenas o título da página. Para facilitar a redacção de servlets,
podemos criar um método que recebe o título da página e que retorna uma String que
compõe o DOCTYPE, HEAD e TITLE.
public class ServletUtilities {
public static final String DOCTYPE =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
public static String headWithTitle(String title) {
return(DOCTYPE + "\n" +
"<HTML>\n" +
"<HEAD><TITLE>" + title +
"</TITLE></HEAD>\n");
}
}
Programação em Rede
IGE, ETI e EI
Agora, a classe HelloWWW fica:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWWW2 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(ServletUtilities.headWithTitle("Hello WWW") +
"<BODY>\n" +
"<H1>Hello WWW</H1>\n" +
"</BODY></HTML>“
);
}
}
Programação em Rede
IGE, ETI e EI
Exercício:
Crie o seu primeiro servlet no NetBeans. Utilize a classe auxiliar ServletUtilities.
Download