Servlets e JSP

Propaganda
Prof.ª Daniela Barreiro Claro





A API JavaServlet é uma extensão da
plataforma Java que permite que os
desenvolvedores adicionem, nos servidores
Web, mecanismos que estendam sua
funcionalidade.
Um servlet pode ser visto como uma applet
que roda no lado do servidor
Comparado com o Netscape’s NSAPI,
Microsoft’s ISAPI, ou Módulos Apache
Independente de plataforma
Independente de Servidor

Um servlet pode fornecer vários serviços
ao servidor Web como por exemplo:
◦
◦
◦
◦
◦
processar formulários de pedido;
persistência de conexões HTTP;
acesso a Banco de Dados;
envio de e-mails automáticos;
compatibilidade com vários protocolos (HTTP,
URL, FTP)
Web Server
HTTP Request
Browser
MeuServlet.class
MeuServlet.class
HTTP Response
Página html
Servlet
Engine
Java Virtual
Machine

Os servlets oferecem várias vantagens sobre
as aplicações baseadas em CGI, entre as
quais podemos destacar:
◦
◦
◦
◦
Independência de plataforma;
performance;
extensibilidade;
facilidade de desenvolvimento;

Independência de Plataforma
◦ Os Servlets podem rodar em qualquer plataforma
sem serem reescritos e até mesmo compilados
novamente.
◦ Os servlets podem ser executados em vários
sistemas operacionais (Linux, AIX, Ubuntu, Solaris)
utilizando um grande número de servidores Web
com acesso a vários tipos de bancos de dados.

Desempenho
◦ Um novo programa CGI é carregado para cada
requisição ao servidor. Um Servlet é carregado
apenas uma vez e para cada nova requisição este
Servlet gera uma nova thread.
◦ O método init() da Servlet, assim como nas Applets,
ocorre apenas na primeira vez que a classe é
carregada.

Extensibilidade
◦ Com Java pode-se criar aplicações muito mais
modulares, tirar todo o proveito da orientação a
objetos e utilizar o grande número de APIs
disponíveis.
◦ Utilizar outros recursos do Java, sendo o JavaMail,
além do JavaIDL, etc



Servlets podem ser executados no mesmo
processo do Servidor que o servidor HTTP
Pode suportar uma maior quantidade de
usuários logados utilizando menos recursos
da máquina
Servlets podem ser carregados de vários
lugares:
◦ Máquina do Servidor
◦ Sites remotos

Servlets não disparam um novo processo
para cada requisição

Características
◦ Baseada na linguagem JAVA
◦ Não há dialetos diferentes nas linguagens de
desenvolvimento para bases de dados diferentes
◦ Orientado a objetos
◦ Facilitam a prática da reutilização de código




Servlets podem tirar vantagens do JDBC,
EJB, JavaMail, JavaIDL, RMI,...
Tecnologias de terceiros baseado em
JAVA poderão ser acessados
Podem rodar em qualquer plataforma
que tenha uma JVM
Podem executar em ambiente Mobile

Forma mais comum de utilizar as Servlets:
◦ A mais popular é quando o próprio Web Server
possui um servlet container.
◦ Antigamente, existia outra possibilidade de
adicionar um Servlet engine ao servidor Web não
compatível com Servlets e JSP.

O Web Server se comunica com o Servlet
através de uma simples interface,
javax.servlet.Servlet. Esta interface consiste
em três métodos principais:
◦ init()
◦ service()
◦ destroy()

O método init()
◦ O método init() é invocado quando o servlet é
carregado pela primeira vez e somente na primeira
inicialização do servlet.
◦ Este é um bom local para abrir conexões com uma
base de dados ou declarar variáveis globais.
◦ O método recebe um argumento, uma referência ao
objeto ServletConfig.

O Objeto ServletRequest
◦ O objeto ServletRequest contém os dados enviados
pelo cliente.
◦ Estes dados são formados em pares de nome/valor
e obtidos através do método:
String getParameter(String)
◦ Este objeto ou uma especialização dele permite que
se obtenha uma série de informações sobre o
cliente.

O objeto ServletResponse
◦ Representa a resposta do Servlet para o cliente.
Quando todo o processamento estiver concluído
utiliza-se este objeto para enviar as informações.
◦ O método void setContentType(String) deve ser
chamado para definir o tipo de resposta.
◦ O método getOutputStream( ) ou getWriter() deve
ser usado para enviar os dados para o cliente.

O método service( )
◦ O método service() manipula as requisições
HTTP recebidas do cliente através do parâmetro
ServletRequest e em seguida envia a requisição
ao método desenvolvido especificamente para
manipular aquele tipo de requisição.
◦ Funciona como o coração do Servlet, é nele
onde são enviada as requisições e obtidas as
respostas
O
método service()
◦ Alguns destes métodos são:
 doGet para requisições GET
 doPost para requisições POST
 doPut para requisições PUT
 doDelete para requisições DELETE

O método destroy( )
◦ É chamado antes que o servlet seja finalizado a fim
de possibilitar a liberação dos recursos que estão
sendo usados pela servlet.
◦ É importante usar alguns flags para certificar que
todos os outros métodos já foram concluídos antes
de finalizar o servlet.
Apache
 Tomcat
 IBM WebSphere
 Lotus Domino
GO
 iPlanet
 Weblogic Tengah

Zeus
 W3C Jigsaw
 Paralogic
WebCore
 Engines do IIS
…






Um Servlet é instanciado por um Container
É iniciado via o método init()
O método service() pode ser chamado
várias vezes
Pode ser limpo através do método destroy()
Funcionamento
◦ Um cliente faz uma requisição no Servidor
◦ A requisição é direcionada para um Servlet pelo
container
◦ Método Service() é chamado com dois objetos:
request e response
◦ O Servlet envia uma resposta a requisição

Objeto Request
◦ Encapsula todas as informações do Cliente
◦ Acesso aos dados do FORM
javax. servlet. ServletRequest {
Enumeration getParameterNames();
String getParameter( String paramName);
String getRemoteAddr();
}
javax. servlet. http. HttpServletRequest {
String getRequestURI();
Enumeration getHeaderNames();
String getHeader( String headerName);
HttpSession getSession();
Cookie[] getCookies();
}

Objeto Response
◦ Encapsula toda a comunicação com o Cliente
◦ Seta os cookies
◦ Método para enviar redirecionamento de
páginas, páginas de erro, etc.
javax. servlet. ServletResponse {
ServletOutputStream getOuputStream();
PrintWriter getWriter();
void setContentType( String type);
void setContentLength( int length);
}

Sessões
◦ Requisições feitas pelo usuário durante um
determinado período
public void doGet( HttpServletRequest request,
HttpServletResopnse response)
throws ServletException, IOException {
HttpSession session = request. getSession();
Carro carro = (Carro) session. getValue(“ carro”);
carro. addItem( produto, quantidade);
}
public class hello extends HttpServlet {
public String getServletInfo() {
return ”Servlet Internamente";
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void doGet(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException {
log(”Dentro do DOGET");
res.setContentType("text/html");
PrintWriter os=res.getWriter();
os.println("<html>");
os.println("<head><title>Olá Mundo!</title></head>");
os.println("<body bgcolor=<add8af>");
os.println("<H1>Olá do Servlet</H1>");
os.println("</body></html>");
os.flush();
}
}
JavaServer Pages




JSP é uma tecnologia para a camada de
apresentação dos dados, que permite
misturar HTML estático com tags utilizando o
Java.
JSP não modifica os dados estáticos, o design
da página continua o mesmo.
Permite que aplicações Web sejam
particionadas em componentes
JavaScript misturado nas páginas JSP



Dados estáticos nunca são modificados no
Servidor
Os elementos dinâmicos sempre serão
interpretados e modificados antes de
chegar no cliente (browser)
Páginas estáticas com extensão JSP
◦ Saída igual a extensão HTML
◦ Mais recursos pois o engine JSP vai executar o
arquivo

Algumas vantagens do JAVA
◦ WO-RA
 Write Once, Run Anywhere
◦ Java API
◦ Tratamento de Erro
◦ Escalabilidade
 Página fica na memória, demais requisições invoca
métodos e dispara threads
◦ Componentes
 JavaBeans - Separa a lógica de apresentação da
lógica de negócios, além de separar os dados
estáticos dos dados dinâmicos

Características
◦ Enfatiza a reutilização de componentes,
principalmente JavaBeans e Enterprise JavaBeans;
◦ simplifica o desenvolvimento de páginas com tags
personalizadas;
◦ inclusão dos benefícios de gerência de memória,
robustez e segurança da plataforma java;
◦ alta performance pois o JSP é convertido em um
Servlet para ser executado.
<HTML><BODY>
<%
if (a>b){
%>
<h1> A variável A é maior que a variável B</h1>
<br>
<% };
%>
</BODY></HTML>

<%! declarations %>
◦ Utilize esta tag para declarar métodos em uma
página JSP.

<%= expressão %>
◦ Esta tag imprime o valor de uma expressão. É
corresponde ao out.println(“texto”) do servlet.

<% fragmento de código %>
◦ Todo o código desta TAG é inserido no método
service() do servlet que será gerado.

Considerações
◦ Scriptlet que necessitam gerar saída <% %>
deve ser através do objeto out
◦ Expression não terminam com “;” O método
out.println() foi abstraído
◦ Declaração tornam as variáveis e os métodos
globais, com uma única inicialização
◦ Scriptlet não precisam seguir seqüência, ou
seja os loops podem ser particionados e
interagidos com HTML estático
<%@ include file=“URL” %>
<%@ page [language=“java”]
[import=“{package.class | package.*},... “]%>
<%jsp:forward page=“pagina.html” %>
<%jsp:getProperty name=“bean”
property=“propriedade”%>
<%jsp:setProperty name=“bean”
property=“propriedade” value=“valor”%>
<%jsp:useBean id=“bean” scope=“page” ...%>
Objetos implícitos
Tipo
request
response
pageContext
session
application
ServletRequest
ServletResponse
PageContext
HttpSession
ServletContext
out
config
page
exception
JspWriter
ServletConfig
Object
Throwable
config
Fonte: CITS Tecnologia
Web Server
HTTP Request
Browser
teste.jsp
teste.jsp
HTTP Response
Página html
Container JSP
JSP
Runtime
+ Servlet
Engine
Java Virtual
Machine
Web Server
teste.jsp
JSP
Runtime
+ Servlet
Engine
Java Virtual
Machine
Ao receber a primeira
requisição, o container
JSP interpreta o arquivo e
gera um servlet. O servlet
é compilado, carregado
em memória e executado.
As requisições seguintes
utilizarão o servlet em
memória.
<%@ page import="java.sql.*"
%>
<%! String desc; %>
<%
desc = request.getParameter("desc");
if(desc == null)
desc = "";
%>
<jsp:useBean id=’gc' scope='page' class=’GeraCodigo'/>
<%
out.println(“Saida do código: ” +
GeraCodigo.getCodigo());
%>


Somente uma sintaxe no padrão XML
Dois atributos mais comuns
◦ ID - Identifica o Action Element
◦ SCOPE - Define o ciclo de vida do elemento
 Page,request, session, application
◦ JavaBeans Action
 Utiliza JavaBean no lado do Servidor
 getProperties, setProperties

JavaBeans Action
◦ Exemplo
 <jsp:useBean id=“meuBean” scope=“session”
class=“br.dclaro.MeuBean”/>
◦ Procura uma instancia já previamente criada ou cria
uma instancia do objeto requisitado
◦ Associa este objeto ao escopo definido, que são
objetos implícitos
◦ Primeiro pesquisa o objeto pelo ID e SCOPE, caso
não encontre cria o objeto especificado

<jsp:setProperty>
◦ Seta propriedades para um Bean
◦ Bean tem que ser definido anteriormente
◦ Exemplo
 < jsp:setProperty name=“meuBean”
property=nome value = “Daniela”/>
◦ Atributo param é utilizado para setar
propriedades com o mesmo valor dos
parâmetros de request

<jsp:getProperty>
◦ Retorna o valor de uma determinada propriedade
◦ Exemplo
 <jsp:getProperty name=“meuBean” property=name/>
◦ Pode retornar de um bean, o valor de todas as
propriedades
 <jsp:getProperty name=“meuBean” property=*/>

Recursos externos utilizados pelo JSP
◦ <jsp:include>
 Insere a saída tanto dos dados estáticos quanto
dinâmicos na página atual
 O código não é incluído e somente o resultado
 O código inserido é processado antes de ser
incluído na página
◦ <jsp:forward>
 Termina a ação na página atual e redireciona para
outro recurso como uma página estática, uma
página jsp ou ainda um Servlet
 <jsp:forward page=“date.jsp”>

<jsp:plugin>
◦ Os plugins são executados no Cliente, através da
JRE(Java Runtime Environment)
◦ Javabeans com o plugin executado no Cliente
◦ Javabeans com o useBean executado no Servidor
◦ O tipo de plugin pode ser uma Applet ou ainda um
JavaBean

Principal propósito
Enviar mensagens para o engine do JSP
Não contém a lógica do negócio
Não podem modificar o stream de saída
Simplesmente avisam ao engine como as páginas
JSP podem se comportar
◦ Suporta a sintaxe de JSP e de XML
◦ Possui o símbolo @
◦
◦
◦
◦

Diretiva PAGE
◦ Permite importar pacotes do JAVA
◦ Exemplo
 <% @page import=“java.sql.*”%>

Diretiva Include
◦ Depende da posição na página que irá ser
inserido o código
◦ O código é inserido e não o resultado
◦ Caso a pagina do include tenha sido modificada,
a página atual deve ser recompilada para
receber estas alterações

O ciclo de vida é composto por
◦ jspInit()
 Pode ser override(reescritos)
 Executado somente uma vez, antes de qualquer
outra requisição
 Usual na criação de Pool de conexões
◦ _jspService
 Criado e manipulado pelo engine do JSP
 Nunca deve ser manipulado pelo usuário
◦ jspDestroy()
 Pode ser override (reescrito)
 Quando o servlet é descarregado da JVM. O mesmo
que o Applet

Objeto Request
◦ <%String nome = request.getParameter(“name”);%>
◦ Caso o parâmetro não exista, um resultado nulo é
retornado
◦ Mantém as informações do Servidor
◦ Obter as informações dos cookies

Objeto Response
◦ Resultados para o browser gerados pela página
dinâmica
◦ Setar as informações nos cookies





Servidor gera um ID unique para as sessões
O servidor também seta um cookie ou URL
rewriting para armazenar este ID da sessão
Se o cookie não estiver habilitado, o engine
JSP redireciona para URL rewriting
session.invalidate()
Mantém a sessão no servidor por 30
minutos(configurável no Servidor Web)

Conexão para Banco de Dados
◦ Drivers nativos ou ODBC
◦ Versão 2.0
 Permite navegar para frente e para trás com o
ResultSet
 Utiliza SQL3
 Atualiza tabelas utilizando Java methods
 Pode se deslocar para uma linha específica do
ResultSet
 Conection Pooling

Componentes padronizados
◦ Possuem suas próprias características de
desenvolvimento
◦ Podem se intercomunicar através das suas
interfaces
◦ Componentes padronizados tornam-se fáceis de
plugar em outras aplicações
◦ Reusabilidade de código inerente a sua criação



É uma classe JAVA que adere às convenções
de desenvolvimento e nomenclaturas
Qualquer classe java que reflita as
convenções dos JavaBeans é um JavaBean
Segue um paradigma de programação

O método Construtor

Propriedades e Métodos de acesso

Distribuição em um arquivo .JAR
◦ Sem parâmetros
◦ As propriedades são a representação externa do
estado interno do JavaBean
◦ Para cada propriedade tem métodos de acesso,
como SET e GET, IS
◦ Os estados internos nunca são acessados
diretamente
◦ Visibilidade das propriedades private, métodos
públicos
◦ getNome(), setNome(), isNome() - Property



Enterprise JavaBeans
São JavaBeans distribuídos em uma rede,
utilizando para isso o RMI ou CORBA,
arquitetura de objetos distribuídos
Necessita de um container especial para
trabalhar com EJB

1) Incluir o campo ‘Endereço’ no contato;

2) Alterar os dados dos contatos;

3) Excluir um contato.
Download