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)
HTTP Request Web Server 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 request response pagecontext session application out config page exception Tipo ServletRequest ServletResponse PageContext HttpSession ServletContext JspWriter ServletConfig Object Throwable config Fonte: CITS Tecnologia
HTTP Request Web Server 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 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. Java Virtual Machine
<%@ 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 Sem parâmetros Propriedades e Métodos de acesso 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 Distribuição em um arquivo.jar
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.