Introdução ao Desenvolvimento Web em Java - PDF
Introdução ao Desenvolvimento Web em Java
Download "Introdução ao Desenvolvimento Web em Java"
Mônica Natal Brás
1 Introdução ao Desenvolvimento Web em Java Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
2 Licença para uso e distribuição Este material está disponível para uso não-comercial e pode ser derivado e/ou distribuído, desde que utilizando uma licença equivalente. Atribuição-Uso Não-ComercialCompatilhamento pela mesma licença, versão 2.5 Você pode copiar, distribuir, exibir e executar a obra, além de criar obras derivadas, sob as seguintes condições: (a) você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante; (b) você não pode utilizar esta obra com finalidades comerciais; (c) Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença 2 idêntica a esta.
3 Sobre o autor Vítor Souza Formação: Graduação em Ciência da Computação, mestrado em Engenharia de Software, pela UFES. Java: Desenvolvedor Java desde 1999; Especialista em desenvolvimento Web; Co-fundador do ESJUG. Profissional: Pesquisador pela Università degli Studi di Trento; Engenho de Software Consultoria e Desenvolvimento. Contato: 3
4 Agenda Introdução ao desenvolvimento Web; Evolução do desenvolvimento Web em Java; Servlets, JSP e frameworks MVC na prática; O padrão JSF e o futuro do desenvolvimento Web; Características do desenvolvimento Web em Java; Para saber mais... 4
5 Introdução ao Desenvolvimento Web Histórico do Desenvolvimento Web 5
6 Histórico 1993: CGI Common Gateway Interface C, C+ +, Fortran, Perl, etc.; 1994: Macromedia Coldfusion, PHP; 1995: Microsoft ASP; 1996: Java Servlets; 1999: JavaServer Pages (JSP);... Hoje: AJAX, RoR, SOA, Flash ActionScript, etc. 6
7 Servidor de páginas estáticas GET /index.html HTTP/1.0 Host: [...] 1. Procura arquivo /index.html; 2. Arquivo existe OK (200); 3. Monta resposta HTTP com conteúdo do arquivo. Cabeçalho Requisição HTTP Resposta HTTP 200 OK Cabeçalho + Conteúdo HTTP/ OK Date: Fri, 15 Apr :12:30 GMT Server: Apache/ [...] Last-Modified: Wed, 23 Mar :43:22 GMT Content-Length: Content-Type: text/html [...] 7
8 Servidor de páginas dinâmicas GET /index.asp HTTP/1.0 Host: [...] 1. Procura arquivo /index.asp; 2. Interpreta script do arquivo; 3. Arquivo existe e não houve erros OK (200); 4. Monta resposta HTTP mesclando conteúdo estático e dinâmico Cabeçalho (gerado pelo script). Requisição HTTP Resposta HTTP 200 OK Cabeçalho + Conteúdo HTTP/ OK Date: Fri, 15 Apr :12:30 GMT Server: Apache/ [...] Last-Modified: Wed, 23 Mar :43:22 GMT Content-Length: Content-Type: text/html [...] 8
9 Desenvolvimento Web Criação de interfaces (páginas) que dão acesso a funcionalidade dinâmica (software) em um servidor acessível na Internet ou numa Intranet por meio de interação requisição resposta. 9
10 Desenvolvimento Web em Java Evolução do Desenvolvimento Web em Java 10
11 Java é uma linguagem... Simples, orientada a objetos; Híbrida (compilada e interpretada); Semelhante a C / C++; Independente de plataforma (WORA); Portável, baseada no poder das redes; Versátil, robusta, segura e open source; Fácil de usar e desenvolver; Popular e rodeada por uma comunidade vibrante! 11
12 Histórico 1995: lançamento oficial, no início eram as Applets; 1996: Java Servlets; 1997: Swing/JFC; 1999: JavaServer Pages (JSP); 1999: plataforma J2EE; 2004: JavaServer Faces; 2005: Java completa 10 anos de ponta a ponta; 2006: Java EE 5. 12
13 Evolução da plataforma Web Java 1) Lê a configuração. GET /servlets/helloworld Container Requisição Resposta Servlet web.xml Sun Jul 24 15:53:20 GMT-03: Navegador 2) Instancia um Servlet e delega a ele a requisição. 3) Envia uma resposta, que pode ser uma página, um redirecionamento, etc. Servlet Apropriado Servlets Lógica de Negócio 13
14 Container Servlet Servidor Web Java; Container = gerenciador de objetos com ciclo de vida específico; Tem parte das funcionalidades de um Servidor de Aplicações J2EE; Ex.: Tomcat, Jetty, Resin, WebLogic, Oracle AS, WebSphere, JBoss, etc. 14
15 Especificação Java é um conjunto de especificações definidas pelo JCP; JSR 53 = Servlet 2.3 e JSP 1.2; JSR 152 = JSP 2.0; JSR 154 = Servlet 2.4; JSR 245 = JSP 2.1; JSR 315 = Servlet 3.0; Os containers implementam as especificações. 15
16 Servlets Não necessariamente para a Web; Na Web: classes que implementam javax.servlet.http.httpservlet; service(), doget(), dopost(), etc.; init(), destroy(); HttpServletRequest/Response; response: setcontenttype(), getwriter(). 16
17 Aplicação Web Conjunto de classes e páginas que formam um sistema (software) cuja interface é acessível via navegador; Estrutura: aplicacaoweb/ WEB-INF/ classes/ lib/ web.xml index.html Recursos (classes e demais arquivos). Recursos empacotados em JARs. Configurações. [...] 17
18 Mapeamento de Servlets Navegadores acessam endereços Web (URLs); Servlets são classes em pacotes; Arquivo web.xml faz o mapeamento URL -> Servlet. 18
19 Servlet Container GET /servlets/cadcli HTTP/1.0 Host: [...] 1. Verifica nas configurações se há um servlet para /servlets/cadcli; 2. Inicializa e executa o servlet; 3. Se existe um servlet mapeado e não houve erros OK (200); 4. Retorna a saída gerada pelo Cabeçalho Servlet. Requisição HTTP Resposta HTTP 200 OK Cabeçalho + Conteúdo HTTP/ OK Date: Fri, 15 Apr :12:30 GMT Server: Apache/ [...] Last-Modified: Wed, 23 Mar :43:22 GMT Content-Length: Content-Type: text/html [...] 19
20 Exemplo Servlet package exemplo; public class HelloServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doservice(request, response); } protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doservice(request, response); } 20
21 Exemplo Servlet (cont.) private void doservice([...]) throws [...] { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String param = request.getparameter("nome"); String nome = ((param == null) (param.length() == 0))? "estranho" : param; out.write("<html><head><title>helloservlet </title></head>"); out.write("<body><h1>olá, " + nome + "</h1></body></html>"); out.close(); } } 21
22 Exemplo Página inicial <html> <head> <title>exemplo Servlets</title> </head> <body> <h1>qual é o seu nome?</h1> <form action="servlets/hello" method="post"> <input type="text" name="nome" size="20" /> <input type="submit" value="ok" /> </form> </body> </html> 22
23 Exemplo web.xml <web-app [...]> <servlet> <servlet-name>helloservlet</servlet-name> <servlet-class>exemplo.helloservlet</servletclass> </servlet> <servlet-mapping> <servlet-name>helloservlet</servlet-name> <url-pattern>/servlets/hello</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> 23
24 Exemplo Screenshot Mapeamento 24
25 Desvantagens dos Servlets Escrever HTML como Strings para passar como parâmetro para out.println(); Adicionar mapeamento para cada Servlet. 25
26 JavaServer Pages São páginas HTML com código Java embutido, como PHP e ASP; O container compila as página JSPs, transformando-as em Servlets e mapeando-as automaticamente. 26
27 Evolução de Java para a Web 1) Procura arquivo helloworld.jsp. GET /helloworld.jsp Requisição Resposta Navegador Container Servlet Sun Jul 24 15:53:20 GMT-03: Páginas Web 2) Transforma o JSP num Servlet e delega a requisição 3) Envia uma resposta, que pode ser uma página, um redirecionamento, etc. Servlet Transformado JavaServer Pages Lógica de Negócio 27
28 Exemplo Página JSP <html><head><title>hello JSP</title></head> <body> <% String paramnome = request.getparameter("nome"); String nome = ((paramnome == null) (paramnome.length() == 0))? "estranho" : paramnome; %> <h1>olá, <%= nome %></h1> </body> </html> 28
29 Exemplo Screenshot Mapeamento automático 29
30 JSP não é lugar de lógica de negócio <html>[...] <% Connection conn; PreparedStatement stmt; conn = BancoDados.conectar(); stmt = conn.preparestatement("sql"); ResultSet rs = stmt.executequery(); // [...] Lógica de negócio. stmt = conn.preparestatement("sql"); stmt.executeupdate(); %> [...]</html> 30
31 Evolução de Java para a Web GET helloworld.action Requisição Resposta Navegador Container Servlet Delega *.action para o controlador 1) Lê a configuração. Configuração Controlador (Servlet) 3) Delega a visão a uma página (JSP, HTML, etc.) ou redireciona. Model 2 ou MVC 2) Executa uma ação, que acessa a lógica de negócio. Ação Lógica de Negócio Páginas Web 31
32 Separação de interesses Páginas Web (JSP, HTML, etc.) cuidam da parte visual; Servlet central faz o controle mediante configuração; Ações manipulam classes de lógica de negócio (modelo). 32
33 Nascem os frameworks MVC O nome correto seria Front Controller ; A lógica do MVC é altamente generalizável; Podemos listar mais de 50 frameworks diferentes: Action Framework, Barracuda, Bento, Bishop, Cameleon, Canyamo, Cassandra, Chiba, Cocoon, Dinamica, Dovetail, Echo, Expresso, Folium, Genie, Helma, Jacquard, Jaffa, Japple, JATO, JBanana, Jeenius, JFormular, JPublish, jstatemachine, Jucas, JWAA, JWarp, jzonic, Macaw, Maverick, Melati, Mentawai, Millstone, MyFaces, Nacho, Niggle, OpenEmcee, OXF, RIFE, Scope, Shocks, Smile, SOFIA, Spring MVC, Struts, Tapestry, TeaServlet, Turbine, Verge, VRaptor, Warfare, WebOnSwing, WebWork, wings, Xoplon Fonte: 33
34 Destaques Struts Classic: Padrão de facto, mais antigo e usado no mercado, também mais odiado pelos desenvolvedores. WebWork / Struts 2: Junção dos projetos Struts com WebWork, bastante aceito pela comunidade. Spring MVC: Parte do Spring Framework. VRaptor2: Projeto brasileiro, uso de anotações para diminuir a quantidade de configuração XML. 34
35 Exemplo Formulário <s:form namespace="/exemplos" action="calcularidade" method="post"> <s:textfield label="nome" name="nome" /> <s:textfield label="data de Nascimento" name="datanascimento" /> <s:submit value="calcular Idade" /> </s:form> 35
36 Exemplo Classe de Ação public class CalcularIdadeAction extends ActionSupport { private String nome; private Date datanascimento; private int idade; // + getters and setters } public String execute() throws Exception { idade = calcular(datanascimento, new Date()); return SUCCESS; } 36
37 Exemplo Resultado <!-- Versão JSP: --> <p>caro(a) <s:property value="nome" />, você possui <s:property value="idade" /> ano(s).</p> <!-- Versão FreeMarker: --> <p>caro(a) ${nome}, você possui ${idade} ano(s).</p> 37
38 Instalação do Servidor Web Java Instalação do Container e Implantação das Aplicações 38
39 Tomcat Versão atual: 6.0; Apache Software Foundation; Apache Software License. 39
40 Tomcat - instalação É necessária uma JVM instalada; No Windows: instalador executável; No Linux: basta descompactar o arquivo tar.gz ou instalar o pacote (rpm, deb, tgz) da sua distribuição; mod_jk: integra o Tomcat com o Apache já instalado (opcional). 40
41 Tomcat estrutura $CATALINA_HOME/ bin/ scripts de startup/shutdown; conf/ arquivos de configuração; logs/ arquivos de log; shared/ classes e JARs compartilhados; webapps/ aplicações web. 41
42 Tomcat implantação (deploy) Duas opções: Copiar a aplicação Web para a pasta $CATALINA_HOME/webapps; Pode ser compactada num arquivo WAR; Adicionar a declaração da aplicação Web em conf/server.xml. 42
43 server.xml <Server [...]> Porta de conexão com o servidor. <Service name="catalina"> <Connector port="80" [...] /> <Engine name="catalina" defaulthost="localhost"> <Host name="localhost" appbase="webapps" [...]> <Context path="/exemploservlet" docbase="d:\workspace\exemploservlets\webapp" debug="999" reloadable="true" /> </Host> </Engine> </Service> </Server> URL no servidor e diretório dos arquivos no disco. 43
44 Tomcat recarga automática Configure-o para recarregar alterações automaticamente: Arquivo conf/context.xml; <Context reloadable="true">. Perde um pouco no desempenho, portanto não use no servidor de produção. 44
45 Tomcat Execução No Windows 2000/XP: É instalado um serviço e um monitor; Outros Windows: CATALINA_HOME\bin\startup.bat No Linux: CATALINA_HOME/bin/startup.sh tail -f CATALINA_HOME/logs/stdout.log Ou pode ser iniciado como daemon. 45
46 Uso de IDEs Ex.: Eclipse Web Tools Criação, implantação, execução e testes integrados. 46
47 JSF e o Futuro O padrão JavaServer Faces e o que vem por aí... 47
48 JavaServer Faces JSR 127 padrão oficial (27/05/2004); Várias implementações; Garantia de continuidade. Similar aos frameworks MVC; Foco no desenvolvedor: Projetado para ser utilizado por IDEs; Componentes UI extensíveis; Tratamento de eventos (como no Swing!); Suporte à navegação simples. 48
49 Ciclo de vida JSF 49
50 Suporte de IDEs 50
51 Suporte de IDEs 51
52 Suporte de IDEs 52
53 Futuro...? JSR 299 Web Beans; Unificação dos modelos EJB 3 e JSF 2; EJB 3 traz idéias bem-sucedidas: ORM, DI, etc., porém a integração com JSF ainda é trabalhosa e tediosa. Web Beans unifica os modelos de componentes; Antecipe-se: conheça o JBoss Seam: O criador do Seam é Spec Lead do Web Beans. 53
54 JBoss Seam Informações gerais: Criado por Gavin King (criador do Hibernate); Versão 1.0 lançada em 11/06/2006; Versão atual: 2.0; Website: 54 November 2007 Introduction to JBoss Seam
55 Visão geral Integração JSF EJB3 (modelo de componentes unificado); AJAX e jbpm integrados; Gerenciamento de estado declarativo; Bijection, Conversation e Workspaces; Utilização de POJOs com anotações; Testabilidade; I18n, autenticação, depuração, URLs RESTful, seam-gen, eventos, interceptadores, etc. 55 November 2007 Introduction to JBoss Seam
56 Criando uma entidade public class = GenerationType.AUTO) private = false) private = 50) private String private Date private String text;... } Agosto Introdução ao JBoss Seam
57 Criando public class SeamBlogEntryDAO implements LogEntryDAO private EntityManager public Collection<T> retrieveall() { Query query = entitymanager.createquery( "from BlogEntry"); return query.getresultlist(); }... } 57 Agosto 2007 Introdução ao JBoss Seam
58 Criando um public interface ManageBlogService public class ManageBlogServiceImpl implements ManageBlogService private BlogEntryDAO blogentrydao; // + setter... } 58 November 2007 Introduction to JBoss Seam
59 Criando public class ManageBlogAction private ManageBlogService manageblogservice; private BlogEntry entry = new BlogEntry();... public void save() { manageblogservice.addblogentry(entry); } } 59 November 2007 Introduction to JBoss Seam
60 Se referindo à ação nas páginas JSF <h:form> <h:panelgrid columns="2"> <h:outputtext value="#{messages['form.title']}" /> <h:inputtext value="#{manageblogaction.entry.title}" /> <h:outputtext value="#{messages['form.text']}" /> <h:inputtext value="#{manageblogaction.entry.text}" /> </h:panelgrid> <h:commandbutton type="submit" value="#{messages['form.button.add']}" actionlistener="#{manageblogaction.save}" /> </h:form> 60 November 2007 Introduction to JBoss Seam
61 Características de Java Web Vantagens e Desvantagens 61
62 Padrão aberto A especificação é definida por um conjunto de empresas e pessoas físicas (Java Community Process); Qualquer um pode implementar a estrutura por trás; Você não fica preso a uma implementação: várias empresas fornecem containers. 62
63 Java é multiplataforma A Sun dá suporte às seguintes plataformas: Windows i586 / AMD64; Linux i586 / AMD64; Solaris SPARC / x86 / x64. A Apple desenvolve versão para MacOS. Outras: HP UX, FreeBSD, OS/2, AIX, etc.; Projeto Open JDK: Nem todas são atuais ou completas. Write once, run anywhere. 63
64 Arquitetura enterprise Promove a separação das páginas Web e da lógica de negócio; Principalmente com o uso de frameworks ou dos padrões JSF e, futuramente, Web Beans. Em algumas linguagens, colocar o código em páginas Web é a única opção; Curva de aprendizado se torna maior. 64
65 Plataforma Java EE Conjunto de especificações que complementam Servlets/JSP: Persistência automática; Conectividade remota; Serviço de nomes; Acesso a sistemas legados; Segurança e transações; Troca de mensagens (processamento assíncrono); Etc. 65
66 Desempenho Ao contrário do que dizem, Java possui ótimo desempenho; Java é híbrida (compilada para bytecode) mais rápida do que linguagens puramente interpretadas; Linguagens interpretadas tornam os testes mais rápidos (deploy rápido). 66
67 Produtividade Se comparado a.net, perde em produtividade devido às ferramentas da Microsoft: Com a especificação JSF, muitos fornecedores de ferramentas (Oracle, Borland, etc.) começaram a correr atrás; Se pagar, também terá produtividade! Se comparado com linguagens não-oo, ganha em produtividade devido ao reuso ser facilitado. 67
68 Custo Baixo É possível desenvolver com custo zero: Componente Opção Gratuito Open Source Máquina Virtual Java Sun Sim Sim Ambiente de Desenvolvimento Eclipse / NetBeans Sim Sim Container Tomcat / JBoss Sim Sim Sistema Operacional Linux Sim Sim Banco de Dados MySQL / PostgreSQL Sim Sim Frameworks Vários Sim Sim 68
69 Ferramentas Centenas de ferramentas disponíveis (muitas gratuitamente/open-source): Persistência de objetos; Geração de relatórios; Funcionalidade de busca; Frameworks de infra-estrutura; IDEs e ferramentas CASE; Dentre muitas outras... 69
70 Comunidade Java Java possui uma comunidade vibrante e ativa para troca de experiências: Milhares de projetos open-source; Grupos de usuário Java (JUGs); Portais no Brasil e no exterior; Eventos. III Encontro de Java do Espírito Santo Agosto
71 Suporte comercial Muitas empresas investem em Java: Sun Microsystems; IBM; Oracle; Borland; BEA; PowerLogic; Dentre muitas outras... 71
72 Algumas empresas envolvidas 72
73 Casos de sucesso 73
74 Números do JavaOne 2005 No mundo, Java está em 635 modelos de celular, 32 fabricantes e 140 operadoras; A plataforma J2EE já foi baixada mais de 3 milhões de vezes, e existem 28 servidores diferentes; A e-bay confia em Java para todas suas vendas que ultrapassam US$ 1.400,00 por segundo! Estimativa que Java movimenta US$ 100 bilhões / ano; 100% das Fortune 500 usam Java. 74
75 Números do JavaOne milhões de desenvolvedores Java no mundo ( no JavaOne!); 5,5 bilhões de aparelhos Java-powered (2 bilhões de celulares); Real Time Java: Nasdaq processa 5 bilhões de transações por dia usando Java; Blu-ray: interatividade desenvolvida em Java; A nova onda: JavaFX; JavaOne 2008: 6 a 9 de Maio! 75
76 Para saber mais... Dicas para quem quer aprender Java, Java Servlets, JSP e JSF 76
77 Para aprender Java Orientação a Objetos é fundamental! Livros: Core Java (Cay Horstmann, et. al) I e II Thinking in Java (Bruce Eckel) Java 2 Use a Cabeça 77
78 Para aprender Java Livros (em inglês): Head First Java (Kathy Sierra, et. al) Java in a Nutshell (David Flanagan) Sites: PortalJava GUJ JavaFree ESJUG 78
79 Para aprender Java Sites (em inglês): JavaLobby TheServerSide JavaRanch ON Java Java.net (Sun) Sun Microsystems 79
80 Para aprender Servlets/JSP/JSF Livros: Core Servlets and JSP (Marty Hall) Head First Servlets & JSP (Bryan Basham) Core Java Server Faces (David Geary) EJB 3 em Ação (Panda, Rahman, Lane) 80
81 Ferramentas Java: IDEs (Ambientes de desenvolvimento): NetBeans: Eclipse: Servidores Web (Containers): Tomcat: jakarta.apache.org/tomcat JBoss: 81
82 Junte-se à Comunidade! Conheça nosso site: Cadastre-se na lista de s: Participe de nossas atividades! Informe-se no site. 82
83 Introdução ao Desenvolvimento Web em Java Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.