Disciplina: Programação Web AULA 05 Ciclo de vida; Funcionamento; Requisições e Respostas. Corpo docente: MsC. Alexandro Vladno Edmilson Campos MsC. Fábio Procópio Esp. Felipe Dantas MsC. João Maria MsC. Liviane Melo
2
3
4
5
6
1. 7
2. 8
9
10
11
public class OiMundo extends HttpServlet { Observe que toda classe Servlet extende HttpServlet protected void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); } // escreve o texto out.println("<html>"); out.println("<body>"); out.println("primeira servlet"); out.println("</body>"); out.println("</html>"); E aqui têm-se os parâmetros request e response usados para controlar as requisições e respostas, respectivamente } O objetivo da servlet acima é exibir uma mensagem HTML simples para os usuários que a requisitarem 12
Mapear o nome das Servlets aumenta a flexibilidade e a segurança da aplicação 13
14
15
16
17
<html> <body> <form action="adicionacontato"> Nome: <input type="text" name="nome" /><br /> E-mail: <input type="text" name="email" /><br /> Endereço: <input type="text" name="endereco" /><br /> Data Nascimento: <input type="text" name="datanascimento" /><br /> <input type="submit" value="gravar" /> </form> </body> </html> O atributo action do form indica qual endereço deve ser chamado ao submeter o formulário, ao clicar no botão Gravar. Nesse caso, estamos apontando para um endereço que será uma Servlet que já vamos criar, chamada adicionarcontato 18
19
public class AdicionaContatoServlet extends HttpServlet { protected void service(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { //Recuperando os parâmetros do request String nome = request.getparameter("nome"); String endereco = request.getparameter("endereco"); String email = request.getparameter("email"); String dataemtexto = request.getparameter("datanascimento"); //Realiza operação para inserir contato //[ ] // Imprime o nome do contato que foi adicionado PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<body>"); out.println("contato " + nome + " adicionado com sucesso"); out.println("</body>"); out.println("</html>"); } } 20
<servlet> <servlet-name>adicionacontato</servlet-name> <servlet-class>br.com.caelum.agenda.servlet.adicionacontatoservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>adicionacontato</servlet-name> <url-pattern>/adicionacontato</url-pattern> </servlet-mapping> Atenção para não errar o caminho correto do <server-class> e nem esquecer a barra da url no <url-pattern> 21
A razão também de muitas pessoas só conhecerem os métodos GET e POST se dar pelo fato deles serem os únicos suportados pelo HTML 4 22
23
public class AdicionaContatoServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { //Executado quando a requisição é enviada pelo método GET } protected void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { //Executado quando a requisição é enviada pelo método POST } } 24
plataforma do cliente informação do browser String cliente = request.getheader( User-Agent ); cookies Cookie[] cookies = request.getcookies(); sessão HttpSession sessao = request.getsession(); método HTTP String metodo = request.getmethod(); stream de dados InputStream entrada = request.getinputstream(); 25
26
27
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class BeerSelect extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException{ response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("beer Selection Advice<br>"); String c = request.getparameter("color"); out.println("<br>got beer color " + c); } } Deve-se evitar a utilização de stream. O correto é utilizar páginas JSP (que será estudo ainda) para retornar ao usuário a resposta 28
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class CodeReturn extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException{ response.setcontenttype( application/jar"); ServletContext ctx = getservletcontext(); InputStream is = ctx.getresourceasstream( /bookcode.jar ); } } int read = 0; byte[] bytes = new byte[1024]; OutPutStream os = response.getoutputstream(); while((read = is.read(bytes))!= -1) os.write(bytes, 0, read); os.flush(); os.close(); 29
30
ServletOutPutStream out = response.getoutputstream(); out.writer(umarraydebytes); PrintWriter writer = response.getwriter(); writer.println( algum texto e html ); O PrintWriter empacota o ServletOutPutStream, ele possui uma referência para o ServletOutPutStream, adicionando métodos de alto nível para tratar caracteres 31
32
33
//... if (Se o trabalho for para o Servlet){ // O Servlet trata a solicitação } else response.sendredirect( http://www.ufla.br ); //... 34
public RequestDispatcher getrequestdispatcher(string path) public void forward(servletrequest req, ServletResponse res) public void forward(servletrequest req, ServletResponse res) 35
36
http://www.corewebprogramming.com/ http://www.w3schools.com/ 44