O documento descreve um curso de especialização em sistemas orientados a objetos com foco no desenvolvimento de aplicações web avançadas utilizando Java. O curso aborda tópicos como desenvolvimento de componentes Java web, HTTP, páginas estáticas vs dinâmicas, CGI, servlets, JSP e deploy de aplicações no Tomcat.
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Desenvolvimento de aplicações web com Java
1. Lato Sensu em
Sistemas Orientados a Objetos
Módulo 1
Desenvolvimento de
Componentes Java Web
(revisão)
Saturday, August 15, 2009
2. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Saturday, August 15, 2009
3. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
(re)Visão Geral
Saturday, August 15, 2009
4. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
WWW
• É uma rede de redes de computadores.
• Baseada numa arquitetura Cliente-Servidor.
• Comunicação via HTTP.
Saturday, August 15, 2009
7. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
HTTP
Saturday, August 15, 2009
8. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
HTTP
• Clientes:
- Fazem as requisições GET, POST, HEAD e outras.
- Processam as respostas.
• Servidores:
- Interpretam as requisições e
- Enviam as respostas ao cliente.
Saturday, August 15, 2009
9. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Web Site
conteúdo estático
http://www.servidor.com.br/relatorio/relatoriodiario.html
Saturday, August 15, 2009
11. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Aplicações Web
conteúdo dinâmico
- CGI (Common Gateway Interface).
- ASP (Active Server Pages).
- Servlets.
- JSP (Java Server Pages).
Saturday, August 15, 2009
13. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
CGI
Saturday, August 15, 2009
14. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
CGI
1 requisição, 1 processo
Saturday, August 15, 2009
15. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
CGI
N requisições, N processos
Saturday, August 15, 2009
16. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
CGI
• Vantagens:
- Podem ser escritos em várias linguagens.
Mais populares são C e Perl.
• Desvantagens:
- Cada shell é um processo.
- Não é escalável.
- A linguaguem utilizada:
Nem sempre é robusta ou orientada a objetos.
Nem sempre é independente de plataforma.
Saturday, August 15, 2009
17. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Servlets
Saturday, August 15, 2009
18. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Servets
Saturday, August 15, 2009
19. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Servets
Saturday, August 15, 2009
20. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Servlets
• Vantagens:
- Performance
Threads são mais rápidas que processos.
- Escalabilidade
- Linguagem Java é robusta e orientada a objetos.
- Indenpendente de plataforma.
• Desvantagens:
- O processamento da lógica de negócio é realizado
em conjunto com a geração HTML.
Saturday, August 15, 2009
21. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Servlets e CGI
problemas
• Para a geração de páginas dinâmicas, é preciso embutir o
HTML ou XML dentro de instruções de uma linguagem
de programação. Em Java Servlets seria o seguinte:
out.print(“<html>”);
out.print(“<head>”);
...
out.print(“</head>”);
out.print(“<table border='1' cellspacing='0' cellpadding='5'>”);
out.print(“<tr><th>Número</th><th>Número^2</th></tr>”);
for (int i=0; i<10; i++){
out.print(“<tr><td>” + i + “</td><td>” + (i*i) + “</td></tr>”);
}
out.print(“</table>”);
out.print(“</html>”);
Saturday, August 15, 2009
22. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Servlets e CGI
problemas
• Maior parte da informação da página é estática,
no entanto, precisa ser embutida no código.
• Afasta o Web designer do processo de criação
de aplicações Web.
• O programador fica sendo o responsável pela
parte do HTML.
Saturday, August 15, 2009
23. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Saturday, August 15, 2009
24. a Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Java <html>
<html/> Java
Java </html>
Servlets JSP
Saturday, August 15, 2009
25. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
JSP
• Coloca código de programação em páginas HTML
<html>
<head>
...
</head>
<table border='1' cellspacing='0' cellpadding='5'>
<tr><th>Número</th><th>Número^2</th></tr>
<%
for (int i=0; i<10; i++)
{
%>
<tr><td> <%= i %> </td><td> <%= i*i %> </td></tr>
<%
}
%>
</table>
</html>
Saturday, August 15, 2009
26. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
JSP
• Vantagens:
- Todas as vantagens do uso de Servlets;
- Uso de linguagem Java como a “linguagem de script”.
• Desvantagens:
- Se usada só, o código de script terá de realizar lógica
de controle e de negócio, tornando as páginas JSP
muito complexas de se manter.
Saturday, August 15, 2009
27. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
WebApp
estrutura
Saturday, August 15, 2009
28. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Web
Application
Archive
WAR
Saturday, August 15, 2009
29. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Tomcat
• Servidor de aplicações Web.
• Gratuito.
• Código Livre.
- http://jakarta.apache.org/tomcat/index.html
• Muito simples de se utilizar.
Saturday, August 15, 2009
30. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Diretórios do Tomcat
• bin
- Arquivos para a iniciar e parar o Tomcat.
• conf
- Arquivos de configuração.
• logs
- Arquivos de logs do Tomcat.
• webapps
- Onde as aplicações Web devem ser implantadas.
Saturday, August 15, 2009
31. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Deploy
Implantando uma aplicação Web no Tomcat
Saturday, August 15, 2009
32. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
?
Saturday, August 15, 2009
33. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Servlets
Saturday, August 15, 2009
34. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Servlet
É um componente que fica do lado do
servidor, capaz de processar dinamicamente
requisições e gerar respostas.
Saturday, August 15, 2009
35. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Classes
Saturday, August 15, 2009
36. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Ciclo de vida
Saturday, August 15, 2009
37. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
package capitulo02;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.*;
public class MyServlet extends GenericServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
Date thisDate = new Date();
log("MyServlet inicializada em:" + thisDate);
}
...
Saturday, August 15, 2009
38. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println(" <head>");
out.println(" <title>Servlet Simples</title>");
out.println(" </head>");
out.println(" <body>");
out.println(" <h2>" + getServletName() + "</h2>");
out.println("Este é um exemplo de Servlet Simples.<br>");
out.println("<hr>");
out.println(" </body>");
out.println("</html>");
out.close();
}
public void destroy() {
Date thisDate = new Date();
log("MyServlet destruida em:" + thisDate);
}
}
Saturday, August 15, 2009
39. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>capitulo02.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
Saturday, August 15, 2009
40. package capitulo02;
...
public class HttpServletHeaders extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body bgcolor="white">");
out.println("<head>");
out.println("<title>Here are the headers</title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Headers</h3>");
out.println("<table border=0>");
Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()){
String headerName = (String) e.nextElement();
String headerValue = request.getHeader(headerName);
out.println("<tr><td>");
out.println(headerName);
out.println("</td><td>");
out.println(headerValue);
out.println("</td></tr>");
}
out.println("</table>");
}
Saturday, August 15, 2009
41. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
?
Saturday, August 15, 2009
42. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
JSP
Saturday, August 15, 2009
43. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
JSP – Java Server Pages
• É outra forma de desenvolver aplicações Web com Java.
• É uma extensão de Servlets.
• Tudo que funciona para Servlets funciona para JSP.
- Na verdade, JSP é uma Servlet quando está executando.
• Trabalha com HTTP requests e responses.
Saturday, August 15, 2009
44. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
O que há de errado com Servlets?
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Usando Servlets</TITLE></HEAD>");
out.println("<BODY BGCOLOR=#123123>");
//Obtém os nomes dos parâmetros
Enumeration parameters = request.getParameterNames();
String param = null;
while (parameters.hasMoreElements())
{
param = (String) parameters.nextElement();
out.println(param + ": " + request.getParameter(param) + "<BR>");
}
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
Saturday, August 15, 2009
45. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
JSP
vantagens
<%@ page import="java.util.Enumeration" %>
<HTML>
<HEAD><TITLE>Usando JSP</TITLE></HEAD>
<BODY BGCOLOR=#DADADA>
<%
//Obtém os nomes dos parâmetros
Enumeration parameters = request.getParameterNames();
String param = null;
while (parameters.hasMoreElements())
{
param = (String) parameters.nextElement();
out.println(param + ":" + request.getParameter(param) + "<BR>");
}
out.close();
%>
</BODY>
</HTML>
Saturday, August 15, 2009
46. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
<%@ page import="capitulo04.NumberGuessBean" %> diretivas
<jsp:useBean id="numguess"
class="capitulo04.NumberGuessBean"
scope="session"/>
<jsp:setProperty name="numguess" property="*"/> beans
<html>
<head><title>Acerte o Número</title></head>
<body bgcolor="white">
<font size=4>
<%
if (numguess.getSuccess()) { scriptlets
numguess.reset();
%>
Parabéns!Você acertou depois de <%= numguess.getNumGuesses() %> tentativas.<p>
<a href="acerteNumero.jsp">Tentar novamente?</a>
<%
}
else if (numguess.getNumGuesses() == 0) {
%>
Bem Vindo ao jogo para acertar o número.<p> ações
<jsp:include page="input.html" flush="true"/>
<%
}
else {
%>
Tente <b><%= numguess.getHint() %></b>.<br>
Já foram feitas <%= numguess.getNumGuesses() %> tentativas.<p> expressões
<jsp:include page="input.html" flush="true"/>
<% } %>
</font>
</body>
</html>
Saturday, August 15, 2009
47. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Elementos de uma página JSP
<html>
<body>
Acerte o número de 1 a 100.<p>
<form method=get>
Qual o seu palpite? <input type=text name=guess>
<input type=submit value="Submit">
</form>
</body>
</html>
input.html
Saturday, August 15, 2009
48. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Sintaxe dos elementos de uma JSP
• Sempre interpretados no servidor.
• Nunca chegam ao clinte.
- Cliente só vê HTML!
• Scriptlets: <% ... %>
• Expressões: <%= ... %>
• Declarações: <%! ... %>
• Comentários: <%-- ... --%>
• Diretivas: <%@ ... %>
• Ações: <jsp:ação ... />
• Custom tags: <prefixo:elemento ... />
Saturday, August 15, 2009
49. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 2°/2009
Objetos implícitos
Saturday, August 15, 2009
50. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Ciclo de vida de uma JSP
Saturday, August 15, 2009
51. Lato Sensu em Sistemas Orientados a Objetos
Desenvolvimento de Aplicaões Web Avançado - 1°/2009
?
Saturday, August 15, 2009
52. Lato Sensu em
Sistemas Orientados a Objetos
Q&A MSc. Alexandre Gomes
alegomes@gmail.com
Saturday, August 15, 2009