Slides do minicurso "Introdução ao Desenvolvimento de aplicações WEB com JSP" apresentado na Universidade Federal do Pará nos dias 4 e 5 de novembro de 2013 durante a III Semana Acadêmica da FACOMP.
Introdução ao Desenvolvimento de Aplicações WEB com JSP
1. III Semana Acadêmica da FACOMP
Introdução ao Desenvolvimento de
Aplicações WEB com JSP
Manoel Afonso Pereira de Lima Filho
manoel.lima@icen.ufpa.br
04 e 05 de Novembro de 2013
2. Ementa
Visão Geral
Diretivas JSP
Arquitetura Cliente-Servidor
Objetos implícitos
Configuração do Java e
Tomcat
Estrutura e configuração da
aplicação
Processamento de
fomulários
Filtros
Sessões
Servlets
Redirecionamentos
Sintaxe JSP
Expression Language
3. Visão Geral
JavaServer Pages (JSP) é uma tecnologia utilizada para
o desenvolvimento de páginas WEB dinâmicas.
Baseia-se em HTML, XML e outros tipos de documentos
para WEB.
Simular a PHP, mas utiliza Java como linguagem de
programação.
Permite a criação de aplicativos WEB simples, como
coleta de dados do usuário, até as mais complexas,
como gerenciamento extensivo de dados.
5. Visão Geral
Linguagem de cliente
−
Páginas podem ser dinâmicas utilizando client-side
scripting.
−
São scripts executados no computador do cliente.
−
Javascript, Actionscript, etc
−
A interface é alterada com base em eventos do
teclado, mouse ou tempo.
7. Visão Geral
Linguagem de Servidor
−
Programas são executados no computador servidor.
−
Produzem as páginas WEB de acordo com os
parâmetros fornecidos, estado do banco de dados,
etc.
−
ASP, CGI, Java (JavaServer Pages), Javascript
(Node.js), PHP, Python (Django), etc
8. Visão Geral
Cadastro e autenticação de usuários são exemplos de
ações executadas no servidor.
Sistemas de gerenciamento de conteúdo também usam
linguagem de servidor.
9. Arquitetura Cliente-Servidor
Computadores que fornecem recursos/serviços são
classificados como servidores.
−
Páginas WEB, impressoras, processamento, etc.
Computadores que requisitam tais recursos são os
clientes.
Internet
Servidor
Clientes
10. Arquitetura Cliente-Servidor
O cliente de uma aplicação WEB, em geral, é um
browser (navegador).
Browsers apenas interpretam linguagem client-side.
−
Seja qual for a linguagem de servidor, o cliente nunca
irá vê-la.
−
O servidor apenas retorna dados formatados para o
cliente side, como HTML, Javascript, CSS, XML, etc.
13. Arquitetura Cliente-Servidor
No nosso caso, como o servidor fornece um webapp,
podemos chamar de servidor WEB ou servidor de
aplicação.
O responsável por traduzir as páginas JSP para HTML é
o contêiner JSP.
Exemplos de contêineres JSP:
Apache Tomcat
Jetty
GlassFish
14. Arquitetura Cliente-Servidor
Os contêineres recebem as requisições dos clientes e, então,
produzem o HTML correspondente.
Ubuntu
Servidor
HTML
Internet
OS X
Windows 8
Banco de Dados
Contêiner
Arquivos JSP
15. Configuração do Java e Tomcat
Download do Java
http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html
Configurar variáveis de ambiente
−
Em Linux, basta adicionar o trecho abaixo no arquivo
~/.bashrc:
PATH=/usr/local/jdk1.7.0/bin:
export PATH
16. Configuração do Java e Tomcat
Download do Tomcat
http://tomcat.apache.org/download-70.cgi
Descompactar o diretório do Tomcat
(CATALINA_HOME).
As aplicações WEB ficam localizadas no diretório
WEBAPPS.
17. Configuração do Java e Tomcat
PORTAS COMUNS
Porta
Aplicação
20/21
FTP
22
SSH
23
Telnet
43
WhoIS
25
Simple Mail Transfer Protocol (SMTP)
53
Domain Name System (DNS)
80
HTTP
443
HTTPS
8080
Tomcat
18. Configuração do Java e Tomcat
●
●
●
●
Por padrão, o Tomcat serve os aplicativos WEB pela
porta 8080.
Normalmente, vemos o sites servindo as páginas pela
porta 80 (padrão) pois eles utilizam o servidor HTTP
Apache.
O Tomcat, além de interpretar as JSPs, também funciona
como um servidor HTTP.
Para acessar uma site, usamos <endereço>:<porta>.
– Se a porta for a 80, podemos omiti-la.
19. Configuração do Java e Tomcat
Cliente
Servidor Apache
na porta 80
Tomcat na porta 8080
Arquivos JSP
21. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
22. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
Caminho de Contexto
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
23. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
Servlets
24. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
Bibliotecas
25. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
Configurações da aplicação
26. Estrutura e Configuração da Aplicação
MeuApp
META-INF
context.xml
WEB-INF
Classes
MyServlet.class
lib
mysql.jar
web.xml
index.jsp
Páginas WEB (JSP, HTML, imagens, etc)
27. Estrutura e Configuração da Aplicação
●
Caminho de Contexto:
– É um arquivo XML (context.xml) que indica ao
contêiner onde localizar os recursos em relação à raiz.
Catalina_home
localhost:8080/exemplo
localhost:8080/myapp
WEBAPPS
exemplo
localhost:8080/teste
myapp
localhost:8080/helloworld
teste
helloworld
28. Estrutura e Configuração da Aplicação
●
Exemplo de context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Exemplo1"/>
29. Estrutura e Configuração da Aplicação
●
Exemplo de context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Exemplo1"/>
http://localhost:8080/Exemplo1
30. Estrutura e Configuração da Aplicação
●
Exemplo de context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Exemplo1"/>
Os paths devem ser únicos.
31. Estrutura e Configuração da Aplicação
●
Exemplo de context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Exemplo1"/>
Os paths devem ser únicos.
Se path for uma string vazia (“”),
então a aplicação será a default.
32. Estrutura e Configuração da Aplicação
●
web.xml:
–
É onde configuramos os servlets, filtros, URL's, e
outros parâmetros de configuração.
–
É um arquivo xml com sintaxe bem intuitiva, mas fica
complexa quando se tem muitas configurações.
33. Estrutura e Configuração da Aplicação
●
web.xml:
–
É onde configuramos os servlets, filtros, URL's, e
outros parâmetros de configuração.
–
É um arquivo xml com sintaxe bem intuitiva, mas fica
complexa quando se tem muitas configurações.
Fica mais fácil configurar usando uma IDE.
34. Servlets
●
São classes Java usadas para prover funcionalidades de
servidor.
●
Respondem às requisições dos clientes.
●
Geralmente usados para:
–
Processar/armazenar dados de formulários HTML.
–
Fornecer conteúdo dinâmico.
–
Gerenciar o estado da informação (o que não existe
no protocolo HTTP).
35. Servlets
●
●
As páginas JSP podem ser vistas como abstrações do
servlet.
Durante a execução da aplicação WEB, os arquivos JSP
são traduzidos para servlets.
–
Utiliza cache até que a JSP seja alterada.
36. Servlets
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");
37. Servlets
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");
38. Servlets
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");
Responde às requisições GET
39. Servlets
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");
Imprime o conteúdo para o browser
41. Servlets
●
Imprimindo HTML:
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Olá Mundo!</h1>");
out.println("</body>");
out.println("</html>");
É por isso que usamos JSP para exibir a interface gráfica
42. Servlets
●
Padrão URL
–
Caminho para se acessar um servlet.
–
Se o padrão for /teste então acessamos o servlet
pela url localhost:8080/myapp/teste.
43. Servlets
●
Padrão URL
–
Caminho para se acessar um servlet.
–
Se o padrão for /teste então acessamos o servlet
pela url localhost:8080/myapp/teste.
<servlet>
<servlet-name>Foobar</servlet-name>
<servlet-class>exemplo.Foobar</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Foobar</servlet-name>
<url-pattern>/Foobar</url-pattern>
</servlet-mapping>
46. Servlets
●
Método GET
–
Solicita dados de algum recurso.
–
O servlet deve implementar o método doGet() para
poder responder a esses pedidos.
–
Os parâmetros são enviados pela URL.
http://localhost:8080/Exemplo1/Foobar?nome=Afonso&id=25
47. Servlets
●
Método GET
–
Solicita dados de algum recurso.
–
O servlet deve implementar o método doGet() para
poder responder a esses pedidos.
–
Os parâmetros são enviados pela URL.
http://localhost:8080/Exemplo1/Foobar?nome=Afonso&id=25
Endereço da aplicação
Servlet
Parâmetros
48. Servlets
●
Método GET
–
Solicita dados de algum recurso.
–
O servlet deve implementar o método doGet() para
poder responder a esses pedidos.
–
Os parâmetros são enviados pela URL.
http://localhost:8080/Exemplo1/Foobar?nome=Afonso&id=25
Chave:
Valor:
nome
Afonso
id
25
49. Servlets
●
Método GET
–
Deve ser utilizado apenas para recuperar dados.
–
Não deve conter informações sensíveis (ex.: nome e
senha de usuário).
–
URLs com GET podem ser favoritadas no browser.
–
Ficam no histórico do browser.
50. Servlets
●
Método POST
–
Indica que algum processamento deve ser feito sobre
os dados enviados.
–
Os dados são enviados no corpo da mensagem
HTTP.
POST /teste/exemplo.jsp HTTP/1.1
Host: ufpa.br
nome1=valor1&nome2=valor2
51. Servlets
●
Método POST
–
Não podem ser favoritados no browser.
–
Não ficam no histórico do browser.
–
É utilizado para enviar os dados do login.
52. Sintaxe JSP
●
Scriptlet
–
Contém o código Java comum.
<% Código Java %>
●
●
●
Assim fica mais fácil inserir código Java em HTML.
Mas lembre-se de que uma página JSP não pode estar
inundada de código Java, HTML, CSS, Javascript, etc.
O código tem que estar legível.
53. Sintaxe JSP
Exemplo de página JSP
<!DOCTYPE html>
<html>
<head>
<title>Exemplo 1</title>
</head>
<body>
<p>
Olá Mundo! <br>
O seu endereço IP é
<% out.print(request.getRemoteAddr()); %>
</p>
</body>
</html>
57. Sintaxe JSP
●
Expressões JSP:
–
Avalia uma expressão e a converte para uma String.
–
A String é inserida onde a expressão aparece.
–
Pense como se fosse um “print”.
<p>
Olá Mundo! <br>
O seu endereço IP é
<%= request.getRemoteAddr() %>
</p>
58. Sintaxe JSP
●
Expressões JSP:
–
Avalia uma expressão e a converte para uma String.
–
A String é inserida onde a expressão aparece.
–
Pense como se fosse um “print”.
<p>
Olá Mundo! <br>
O seu endereço IP é
<%= request.getRemoteAddr() %>
</p>
Sem ponto-e-vírgula!
60. Diretivas JSP
●
●
●
Indicam ao contêiner como realizar determinadas ações
durante a criação da página JSP.
Essas ações são feitas durante o processo de tradução
da JSP.
Por padrão, escrevemos as diretivas no topo da página
JSP.
<%@ diretiva atributo=valor %>
67. Sessões
●
●
Como o HTTP é um protocolo que não armazena estado, sempre que
o cliente se conecta a uma página da aplicação, uma nova conexão é
feita, de modo que o servidor não tem como identificar que é o mesmo
cliente.
Cookies
–
–
●
O servidor mantém um ID único do cliente no formato de cookie.
Nem todos os browsers suportam cookies.
Campos de formulários ocultos
<input type="hidden" name="sessionid" value="12345">
●
URL rewriting
–
Inclui a ID da sessão na própria URL.
68. Objetos implícitos
●
Objetos implícitos são objetos Java disponíveis em todas
as páginas JSP sem ser declaradas.
●
Também são conhecidas como variáveis pré-definidas.
●
Existem nove objetos implícitos nas JSPs.
69. Objetos implícitos
Objeto
Descrição
request
Representa o objeto HttpServletRequest associado com a
requisição do cliente.
response
Representa o objeto HttpServletResponse associado com a
resposta ao cliente.
out
Objeto PrintWriter usado para enviar a saída para o cliente.
session
Objeto HttpSession relacionado com a sessão do usuário.
application
Objeto ServletContext relacionado com o contexto da
aplicação.
config
Configuração da página.
pageContext
Encapsula características específicas do servidor como
JspWriters de alta performance.
page
Sinônimo para this.
Exception
Acesso às informações da execeção.
71. Filtros
●
●
●
●
Interceptam requisições do clientes antes de serem
processados pelos servlets.
Manipulam respostas dos servlets antes de enviá-las aos
clientes.
Utilizados para autenticação, compressão de dados,
criptografia, conversão de imagens, logging, etc.
As configurações dos filtros são armazenadas no arquivo
web.xml.
72. Redirecionamentos
●
Redireciona o fluxo para outra página.
●
Não altera a url, embora a JSP seja outra.
RequestDispatcher rd =
request.getRequestDispatcher("teste.jsp");
rd.forward(request, response);
73. Expression Language
●
Facilita o acesso aos dados de objetos.
●
Sintaxe mais simples.
●
●
Permite que pessoas sem muito conhecimento de Java
manipulem páginas JSP.
Sintaxe:
${expressão}
74. Conclusão
●
●
●
Vimos como construir os elementos básicos de uma
aplicação web.
Autenticação, redirecionamento, padronização, entre
outros.
Noção de MVC (Model-View-Controller).