Upload
truongdien
View
215
Download
0
Embed Size (px)
Citation preview
Visão Geral
▼ São objetos de uma subclasse de javax.servlet (javax.servlet.HttpServlet).
▼ Possuem um ciclo de vida.
▼ Incluem em seu código, as tags HTML de página Web.
▼ Atuam como uma camada intermediária entre as chamadas de um web browser (cliente) e os bancos de dados e/ou aplicações no servidor web.
▼ São executados por um servidor web.
JSP e Servlets
Cliente
Servidor Web
Documentos ComunsMáquina Servlet
Tradutor JSP
Documentos JSP
Servelts compilados
Requisição HTTP Resposta HTTP
1)O utilizador vai a uma página feita com JSP. O browser web efetua o pedido através da Internet.
2)O pedido JSP é enviado para o servidor web.
3)O servidor web reconhece o pedido especial (extensão .jsp) e entrega o JSP ao JSP Servlet Engine.
4)Se o JSP é acessado pela primeira vez, é processado, caso contrário passa para o passo 7.
Arquitetura JSP
5)O próximo passo é gerar um Servlet especial do JSP. Todo o HTML necessário é convertido em declarações println.
6)O código-fonte do servlet é compilado numa classe
7)É instanciado o Servlet, chamando os métodos init e service.
8)O código HTML produzido pelo Servlet é enviado via Internet.
9)Os resultados HTML são visualizados no web browser do utilizador.
Arquitetura JSP
<%@ page errorPage="myerror.jsp" %> <%@ page import="com.foo.bar" %> <html> <head> <%! int serverInstanceVariable = 1;%> <% int localStackBasedVariable = 1; %> <table> <tr><td><%= toStringOrBlank( "expanded inline data " + 1 ) %></td></tr>
package jsp_servlet;import com.foo.bar; … import javax.servlet.*; … class _myservlet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage { int serverInstanceVariable = 1; … public void _jspService( … ) throws … { javax.servlet.ServletConfig config = … Object page = this; PageContext pageContext = … javax.servlet.jsp.JspWriter out = … HttpSession session = … try { out.print( "<html>\r\n" ); out.print( "<head>\r\n" ); … // From <% int localStackBasedVariable = 1; %> int localStackBasedVariable = 1; … out.print( "<table>\r\n" ); out.print( " <tr><td>" ); out.print( toStringOrBlank( "expanded inline data " + 1 ) ); out.print( " </td></tr>\r\n" ); … } catch ( Exception _exception ) { // Redirect to error page in // <%@ page errorPage="myerror.jsp" %> }}}
Servidor Web
▼ Servidores JEE 6:– GlassFish-Sun– JEUS-TmaxSoft– Jboss*-RedHat
▼ Web container:– TomCat-Apache
▼ Servidores JEE 5:– GlassFish-Sun– JEUS-TmaxSoft– Jboss*-RedHat– Geronimo-Apache – WebSphere-IBM– WebLogic-Oracle
Pacote javax.servlet
▼ Classe
– GenericServlet
– HttpServlet
▼ Exceções
– ServletException
– UnavailableException
▼ Interfaces
– RequestDispatcher
– Servlet
– ServletConfig
– ServletContext
– ServletRequest
– ServletResponse
Classe herda de HttpServlet
▼ Todos os servlets devem implementar, direta ou indiretamente, a interface Servlet.
▼ Duas class implementam Servlets:▼ abstract class GenericServlet
implements Servlet– class MeuServlet extends GenericServlet
▼ abstract class HttpServlet implements Servlet– class MeuServlet extends HttpServlet
Classe HttpServlet
▼ Suas subclasses definem servlets aptos a operar com padrões HTTP de solicitação e resposta, em um site qquer cujo servidor tenha o devido suporte a Java.
▼ No servlet a ser escrito, deve estar sobreposto pelo menos um método da classe HttpServlet, geralmente:– doGet() ou do Post().
Classe HttpServlet
▼ service()– Implementação do método service() da
interface Servlet.– Recebe a solicitação HTTP padrão e a
envia ao método doQualquerCoisa implementado na classe.
▼ doGet()– Permite ao servlet operar com
solicitações HTTP efetuadas pelo método get (Query String) do protocolo HTTP.
▼ doPost()– Permite ao servlet operar com
solicitações efetuadas pelo método post().
▼ doDelete()– Permite ao servlet deletar a solicitação
(request).▼ doHead()
– Recebe a solicitação do método service() e manipula-a.
▼ doOptions(), doPut() e doTrace– Permite ao servlet operar com solicitações
tipo OPTIONS, PUT e TRACE.▼ getLastModified()
– Retorna um intervalo de tempo, em milisegundos, informando a última modificação do objeto HttpServletRerquest.
Classe HttpServlet
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <form method="POST" action="OlaMundo"> <input type="submit" value="Clique aqui"> </form></html>
Exemplo HTML
import java.io.*;import java.net.*;import javax.servlet.*;import javax.servlet.http.*;public class OlaMundo extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet OlaMundo</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Ola Mundo</h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}
doGet (Enviar dados Browser)
Arquivo web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>OlaMundo</servlet-name> <servlet-class>br.edu.unifei.servlet.OlaMundo</servlet-class> </servlet> <servlet-mapping> <servlet-name>OlaMundo</servlet-name> <url-pattern>/OlaMundo</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
Ciclo de Vida
init()
service()
destroy()
Servidor Web
Chamado após init()
termina a execução
Envia dados
Recebe dadosCliente Web
Interface Servlet
▼ void init (ServletConfig config)– Automaticamente invocado, somente
uma vez, durante o ciclo de execução do servlet, para inicializá-lo.
▼ ServletConfig getServletConfig()– Retorna uma referência para um objeto
que implementa a interface ServletConfig (fornece acesso às informações de configuração do servlet).
Interface Servlet
▼ void service (ServletRequest request, ServletResponse response)– Primeiro método chamado em cada
servlet para responder a uma solicitação do cliente.
▼ String getServletInfo()– Retorna uma string que contém
informações do servlet, como autor e versão.
▼ void destroy ()– Chamado qdo um servlet é finalizado
pelo servidor web em que está sendo executado.
Interfaces javax.servlet.http
▼ HttpServletRequest– Subinterface de ServletRequest, para
suporte a requisições de clientes via protocolo HTTP.
▼ HttpServletResponse– Subinterface de ServletResponse, para
suporte a operações de envio de resposta via Http.
▼ HttpSession– Interface que fornece suporte para o
estabelecimento e gerenciamento de sessões.
JavaServer PageExemplo Locadora
Prof. Enzo Seraphim
-login:String-cpf:String-nome:String
-id:int-locacao:Date-devolucao:Date
-codigo:int-nome:String
Cliente
Locacao
Filme
*
-login:String-cpf:String-nome:String
-id:int-locacao:Date-devolucao:Date
-codigo:int-nome:String
*
package br.edu.unifei.bd.locadora;
import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;
@Entitypublic class Filme {
@Id @GeneratedValue private int codigo; private String nome; //... Get´s e Set´s}
Persistência - Filme
Cliente Locacao Filme
<html> <head> <title>Cliente</title> </head> <body> <FORM ACTION="CadFilme" METHOD="POST"> Nome : <INPUT TYPE="TEXT" NAME="wwwNome"><BR> <INPUT TYPE="SUBMIT" VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Apagar"> </FORM> </body></html>
HTML - Filme
Servlet - Clientepublic class CadFilme extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SessionFactory sfac = new Configuration(). configure().buildSessionFactory(); Session se = sfac.openSession(); Transaction tx = se.beginTransaction(); Filme f = new Filme(); f.setNome(request.getParameter("wwwNome")); se.save(f); tx.commit(); se.close(); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head><title>Sucesso</title></h'ead>"); out.println("<body> out.println("<h2>sucesso</h2>"); out.println'("<a href=\"index.jsp\">Principal</a>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}
Arquivo web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>CadFilme</servlet-name> <servlet-class>br.edu.unifei.servlet.CadFilme</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadFilme</servlet-name> <url-pattern>/CadFilme</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
-login:String-cpf:String-nome:String
-id:int-locacao:Date-devolucao:Date
-codigo:int-nome:String
Cliente Locacao Filme
*
package br.edu.unifei.bd.locadora;
import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.OneToMany;
@Entitypublic class Cliente {
@Id private String login; private String CPF; private String nome;
@OneToMany private Set<Locacao> locacoes = new HashSet<Locacao>();
//... Get´s e Set´s}
Persistência - Cliente
<html> <head> <title>Cliente</title> </head> <body> <FORM ACTION="CadCliente" METHOD="POST"> Login: <INPUT TYPE="TEXT" NAME="wwwLogin"><BR> CPF: <INPUT TYPE="TEXT" NAME="wwwCpf"><BR> Nome: <INPUT TYPE="TEXT" NAME="wwwNome"><BR> <INPUT TYPE="SUBMIT" VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Apagar"> </FORM> </body></html>
HTML - Cliente
Servlet - Clientepublic class CadCliente extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SessionFactory sfac = new Configuration(). configure().buildSessionFactory(); Session se = sfac.openSession(); Transaction tx = se.beginTransaction(); Cliente c = new Cliente(); c.setLogin(request.getParameter("wwwLogin")); c.setCpf(request.getParameter("wwwCpf")); c.setNome(request.getParameter("wwwNome")); se.save(c); tx.commit(); se.close(); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head><title>Sucesso</title></h'ead>"); out.println("<body> out.println("<h2>sucesso</h2>"); out.println'("<a href=\"index.jsp\">Principal</a>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}
Arquivo web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>CadFilme</servlet-name> <servlet-class>br.edu.unifei.servlet.CadFilme</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadFilme</servlet-name> <url-pattern>/CadFilme</url-pattern> </servlet-mapping> <servlet> <servlet-name>CadCliente</servlet-name> <servlet-class>br.edu.unifei.servlet.CadCliente</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadCliente</servlet-name> <url-pattern>/CadCliente</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>