2. Servidor de aplicação
• Um servidor de aplicação implementa todas as especificações
do Java EE (grande conjunto de especificações) e tem o papel
de servir sua aplicação para auxilia-la com serviços de
infraestrutura;
• JBoss;
• Glassfish.
3. Servlet Container
• O Servlet Container é um servidor que suporta algumas
funcionalidades como as Servlet, o JSP¹, JSTL² e JSF³ e não
a implementação do Java EE por completo;
• Apache Tomcat;
• Jetty (usado no Google App Engine)
1 - JavaServer Pages;
2 - JavaServer Pages Standard Tag Library;
3 - JavaServer Faces
4. Servlets
A servlet is a Java programming language class used to
extend the capabilities of servers that host applications
accessed by means of a request-response programming model.
Although servlets can respond to any type of request, they are
commonly used to extend the applications hosted by web
servers. For such applications, Java Servlet technology defines
HTTP-specific servlet classes.
http://docs.oracle.com/javaee/6/tutorial/doc/bnafe.html
5. Servlets
The javax.servlet and javax.servlet.http packages provide
interfaces and classes for writing servlets. All servlets must
implement the Servlet interface, which defines lifecycle
methods. When implementing a generic service, you can use or
extend the GenericServlet class provided with the Java Servlet
API. The HttpServlet class provides methods, such as doGet and
doPost, for handling HTTP-specific services.
http://docs.oracle.com/javaee/6/tutorial/doc/bnafe.html
6. Servlets
Servlets são classes Java, desenvolvidas de acordo com uma
estrutura bem definida que, quando instaladas e configuradas
em um servidor que implemente um Servlet Container, podem
tratar requisições recebida de clientes web (browsers).
JSP, Servlets e J2EE - Temple, André; Mello, Rodrigo; Calegari, Danival; Schiezaro, Maurício. (GNU
License)
7. Servlets
Uma servlet é um componente no lado do servidor. Ela pode
ser usada para estender a funcionalidade de qualquer servidor
compatível com Java, mas normalmente as servlets são usadas
para escrever aplicativos Web em um servidor Web. [...]. Com
freqüência elas são usadas para criar páginas da Web que não
são estáticas.
Aprenda J2EE com EJB, JSP, Servlets, JNDI, JDBC e XML em 21 dias. Bond, Martin; Haywood, Dan; Law,
Debbie, Longshaw, Andy; Roxburgh, Peter. Pearson Education, São Paulo, 2003.
8. Servlets
• O nome “servlet” vem da ideia de um pequeno servidor cujo
objetivo é receber chamadas HTTP, processá-las e devolver
uma resposta ao cliente;
• Ao receber uma requisição, um Servlet pode capturar os
parâmetros dessa requisição, efetuar qualquer
processamento inerente a uma classe Java e devolver uma
página HTML;
• Os servlets normalmente utilizam o protocolo HTTP, apesar
de não serem restritos a ele;
9. Servlets
• Diversas requisições podem ser feitas ao mesmo Servlet ao
mesmo tempo em um único servidor, por isso ela é mais
rápida que um programa CGI, que não permitia isso;
• Servlets ficam na memória entre requisições, não precisa ser
reinstanciada;
• em CGI, cada cliente é representado por um processo; com
servlets, cada cliente é representado por uma linha de
execução.
10. Servlets
• É importante perceber que sua Servlet será instanciada uma
única vez pelo container e esse objeto será usado para
atender todas requisições de todos os clientes em threads
separadas; é isso que traz melhorias em relação aos CGI, que
disparavam diversos processos;
11.
12. Visão geral: Servlets
• Interface Servlet: define métodos que todos os servlets
devem implementar;
• Classe abstrata GenericServlet: Define um servlet genérico,
independe de protocolo específico;
• Classe abstrata HttpServlet: Provê uma classe abstrata a ser
implementada para criar um servlet HTTP, adequado para um
Web site;
13. Servlet - exemplo
public class Welcome extends HttpServlet {
protected void service( HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException {
PrintWriter out = response.getWriter();
String name = request.getParameter(“name”);
out.println(“<html>”);
out.println(“body”);
out.println(“Welcome ” + name + “!!!”);
out.println(“</body>”);
out.println(“</html>”)
}
}
14. Servlets - ciclo de vida
http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaServlets.html
15. Servlets - ciclo de vida
• Os métodos init() e destroy(), quando reescritos, são
obrigados a chamar o super.init() e super.destroy();
• Supondo que um desses métodos execute alguma tarefa
fundamental em sua classe pai, esquecer de chamar o super
pode lhe causar problemas!!!
16. Servlets - exemplo
public class Welcome extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
log(“Beginning the Servlet ...”);
}
public void destroy() {
super.destroy();
log(“... finishing the Servlet.”)
}
protected void service( HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException {
...
}
}
17. Servlets - HTTP
O método service() aceita todos os métodos HTTP, portanto
temos que especificar qual iremos utilizar através dos seguintes
métodos:
void doGet( HttpServletRequest request, HttpServletResponse response );
void doPost( HttpServletRequest request, HttpServletResponse response );
Além de GET e POST o protocolo HTTP possui ainda mais 6 métodos: PUT, DELETE, HEAD, TRACE,
CONNECT e OPTIONS;
Os mais conhecidos são o GET e POST pois são os únicos que HTML 4 suporta.
http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServlet.html
18. Servlets - mapeamento
As servlets devem ser mapeadas no arquivo web.xml para
que sua aplicação saiba como localizá-la ...
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>br.inpe.cptec.servlet.Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/</utl-pattern>
</servlet-mapping>
19. Servlets - mapeamento
... ou à partir da versão 3.0 da API de Servlets, lançada
em Dezembro de 2009 com o Java EE 6, não é mais
necessário configurar as Servlets no web.xml, pode-se
apenas usar a anotação @WebServlet:
@WebServlet(name=“welcome”, urlPatterns={“/”, “/welcome”, “/oi”})
public class Welcome extends HttpServlet {
...
}
20. JavaServer Pages
JavaServer Pages is a Sun Microsystems specification for
combining Java with HTML to provide dynamic content for web
pages. [...] JSP is more convenient to write than HTTP servlets
because they allow you to embed Java code directly into your
HTML pages.
JSP enables you to separate the dynamic content of a Web
page from its presentation.
http://docs.oracle.com/cd/E13222_01/wls/docs70//jsp/intro.html
21. JavaServer Pages
Uma JSP é apenas outra servlet e, assim como as servlets
HTTP, uma JSP é um componente web no lado do servidor que
pode ser usado para gerar páginas da Web dinâmica.
A diferença fundamental entre servlets e JSPs é:
•As servlets geram código HTML de código Java;
•As JSPs incorporam código Java em código HTML estático.
Aprenda J2EE com EJB, JSP, Servlets, JNDI, JDBC e XML em 21 dias. Bond, Martin; Haywood, Dan; Law,
Debbie, Longshaw, Andy; Roxburgh, Peter. Pearson Education, São Paulo, 2003.
22. JavaServer Pages
• Criado para contornar limitações no desenvolvimento com
Servlets;
• Permite que a criação do HTML dinâmico não se misture com
a lógica da aplicação em si;
• Estrutura do arquivo jsp é baseada no HTML;
• Permite que se escreva código Java no arquivo, para que
possamos adicionar comportamento dinâmico em nossa
página, como condicionais (if), loops (while);
23. JavaServer Pages
• Todo scriptlet (script + sufixo let, de pequeno) deve ser
escrito entre as tags <% %>;
• Para declarar uma variável é simples, basta fazer:
<% String message = “Welcome!”; %>
• Todo arquivo JSP possui uma variável chamada out, do tipo
JspWriter, que permite imprimir para o response através do
método println():
• <% out.println( message ); %>
24. JavaServer Pages
• Além da variável out, existem outras que estão implícitas nas
nossas páginas JSP;
• Existe ainda outra possibilidade para imprimir o conteúdo da
nossa variável através do seguinte atalho:
<% =message %>
• Comentários em páginas JSP devem ser feitos da seguinte
maneira:
• <%-- Comentário em JSP --%>
25. JavaServer Pages
No JSP existe um elemento chamado diretiva; as diretivas são
usadas para definir informações sobre sua página para o
tradutor, elas não produzem saída HTML:
<%@ diretiva [ atributo=“valor” ] %>
Dentre as diretivas existentes uma delas é a include; você a
usa para inserir o conteúdo de outro arquivo JSP. O arquivo
incluído pode conter tags HTML e/ou JSP.
<%@ include file=”header.jsp”%>
26. JavaServer Pages
Há também a diretiva page, ou seja, uma configuração
específica de uma página. Elas são usadas para definir
propriedades dependentes da página:
<%@ page import=“br.inpe.cptec.dao.”%>
O atributo import permite que seja especificado qual o
pacote a ser importado. Para diversos pacotes basta separá-los
por vírgula.
<%@ page import=“java.util.*, br.inpe.cptec.dao.*” %>
27. JavaServer Pages
Outra e também muito importante é a diretiva taglib. As
bibliotecas de tags (taglibs) estendem ainda mais a filosofia das
JSPs, para que seja possível escrever a maioria das páginas Web
sem usar código Java:
<%@taglib uri=“/demo” prefix=“demo” %>
28. Taglibs
• As taglibs foram desenvolvidas pela Sun para estender as
funcionalidades da Expression Language;
• Basear nosso código na EL e taglibs permite que tenhamos
um código complexo porém limpo, pois não temos código
Java no arquivo JSP e o resultado é similar à um HTML;
• A maioria das publicações dedica um capitulo à parte para
esse assunto;
• É importante também se estudar sobre JavaBeans, para se
aprofundar o entendimento de como a Expression Language
funciona.
29. JavaServer Pages - funcionamento
• Arquivos JSP não são compilados nos editores;
• Arquivos JSP são transformados em uma Servlet por um
compilador JSP (o Tomcat contém um compilador embutido);
• Esse compilador pode gerar um código Java que então é
compilado para gerar bytecode diretamente para a Servlet;
• Então, somente durante a execução de uma página JSP,
quando ele é transformado em uma servlet, que seu código
Java é compilado e necessita de classes do driver que são
procuradas no diretório lib.
30. JSP - ciclo de vida
http://edn.embarcadero.com/article/26911
31. Referências
• http://www.inf.ufsc.br/~bosco/downloads/livro-jsp-servlets-j2ee.pdf
• http://www.devmedia.com.br/fundamentos-de-servlets/3573
• http://www.cse.iitb.ac.in/dbms/Data/Courses/DBIS/Software/servlets/servlet_tutorial.html
• http://docs.oracle.com/javaee/6/tutorial/doc/bnafe.html
• http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzamy
%2F50%2Fprogram%2Fservlife.htm
• http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaServlets.html
• http://edn.embarcadero.com/article/26911
• Aprenda J2EE com EJB, JSP, Servlets, JNDI, JDBC e XML em 21 dias. Bond, Martin; Haywood, Dan;
Law, Debbie; Longshw, Andy; Roxburgh, Peter. Editora Pearson Education, 2003.
• FJ-21 Java para desenvolvimento web. Caelum. http://www.caelum.com.br/download/caelum-
java-web-fj21.pdf