Você está na página 1de 31

Servlets e JSP

Introduo e viso geral de algumas caractersticas

Servidor de aplicao
Um servidor de aplicao implementa todas as especificaes do

Java EE (grande conjunto de especificaes) e tem o papel de


servir sua aplicao para auxilia-la com servios de infraestrutura; JBoss; Glassfish.

Servlet Container
O Servlet Container um servidor que suporta algumas
funcionalidades como as Servlet, o JSP, JSTL e JSF e no a implementao 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

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

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

Servlets
Servlets so 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 requisies recebida de clientes web (browsers).
JSP, Servlets e J2EE - Temple, Andr; Mello, Rodrigo; Calegari, Danival; Schiezaro, Maurcio. (GNU License)

Servlets
Uma servlet um componente no lado do servidor. Ela pode ser usada para estender a funcionalidade de qualquer servidor compatvel com Java, mas normalmente as servlets so usadas para escrever aplicativos Web em um servidor Web. [...]. Com freqncia elas so usadas para criar pginas da Web que no so estticas.
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, So Paulo, 2003.

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 requisio, um Servlet pode capturar os parmetros dessa requisio, efetuar qualquer processamento inerente a uma classe Java e devolver uma pgina HTML; Os servlets normalmente utilizam o protocolo HTTP, apesar de no serem restritos a ele;

Servlets
Diversas requisies podem ser feitas ao mesmo Servlet ao mesmo

tempo em um nico servidor, por isso ela mais rpida que um


programa CGI, que no permitia isso; Servlets ficam na memria entre requisies, no precisa ser reinstanciada; em CGI, cada cliente representado por um processo; com servlets, cada cliente representado por uma linha de execuo.

Servlets
importante perceber que sua Servlet ser instanciada uma nica vez pelo container e esse objeto ser usado para atender todas requisies de todos os clientes em threads separadas; isso que traz melhorias em relao aos CGI, que disparavam diversos processos;

Viso geral: Servlets


Interface Servlet: define mtodos que todos os servlets devem implementar; Classe abstrata GenericServlet: Define um servlet genrico, independe de protocolo especfico; Classe abstrata HttpServlet: Prov uma classe abstrata a ser implementada para criar um servlet HTTP, adequado para um Web site;

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>) } }

Servlets - ciclo de vida

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaServlets.html

Servlets - ciclo de vida


Os mtodos init() e destroy(), quando reescritos, so obrigados a chamar o super.init() e super.destroy(); Supondo que um desses mtodos execute alguma tarefa fundamental em sua classe pai, esquecer de chamar o super pode lhe causar problemas!!!

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 { } ...

Servlets - HTTP
O mtodo service() aceita todos os mtodos HTTP, portanto temos que especificar qual iremos utilizar atravs dos seguintes mtodos:
void doGet( HttpServletRequest request, HttpServletResponse response ); void doPost( HttpServletRequest request, HttpServletResponse response );
Alm de GET e POST o protocolo HTTP possui ainda mais 6 mtodos: PUT, DELETE, HEAD, TRACE, CONNECT e OPTIONS; Os mais conhecidos so o GET e POST pois so os nicos que HTML 4 suporta. http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServlet.html

Servlets - mapeamento
As servlets devem ser mapeadas no arquivo web.xml para que sua aplicao 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>

Servlets - mapeamento
... ou partir da verso 3.0 da API de Servlets, lanada em Dezembro de 2009 com o Java EE 6, no mais necessrio configurar as Servlets no web.xml, pode-se apenas usar a anotao @WebServlet:

@WebServlet(name=welcome, urlPatterns={/, /welcome, /oi}) public class Welcome extends HttpServlet {

...
}

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

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 pginas da Web dinmica. A diferena fundamental entre servlets e JSPs : As servlets geram cdigo HTML de cdigo Java; As JSPs incorporam cdigo Java em cdigo HTML esttico.

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, So Paulo, 2003.

JavaServer Pages
Criado para contornar limitaes no desenvolvimento com Servlets;

Permite que a criao do HTML dinmico no se misture com a lgica da aplicao em si;
Estrutura do arquivo jsp baseada no HTML; Permite que se escreva cdigo Java no arquivo, para que possamos adicionar comportamento dinmico em nossa pgina, como condicionais (if), loops (while);

JavaServer Pages
Todo scriptlet (script + sufixo let, de pequeno) deve ser escrito entre as tags <% %>; Para declarar uma varivel simples, basta fazer:
<% String message = Welcome!; %>

Todo arquivo JSP possui uma varivel chamada out, do tipo JspWriter, que permite imprimir para o response atravs do mtodo println():
<% out.println( message ); %>

JavaServer Pages
Alm da varivel out, existem outras que esto implcitas nas nossas pginas JSP; Existe ainda outra possibilidade para imprimir o contedo da nossa varivel atravs do seguinte atalho:
<% =message %>

Comentrios em pginas JSP devem ser feitos da seguinte maneira:


<%-- Comentrio em JSP --%>

JavaServer Pages
No JSP existe um elemento chamado diretiva; as diretivas so usadas para definir informaes sobre sua pgina para o tradutor, elas no produzem sada HTML:
<%@ diretiva [ atributo=valor ] %>

Dentre as diretivas existentes uma delas a include; voc a usa para inserir o contedo de outro arquivo JSP. O arquivo includo pode conter tags HTML e/ou JSP.
<%@ include file=header.jsp%>

JavaServer Pages
H tambm a diretiva page, ou seja, uma configurao especfica de uma pgina. Elas so usadas para definir propriedades dependentes da pgina:
<%@ 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 vrgula.
<%@ page import=java.util.*, br.inpe.cptec.dao.* %>

JavaServer Pages
Outra e tambm muito importante a diretiva taglib. As bibliotecas de tags (taglibs) estendem ainda mais a filosofia das JSPs, para que seja possvel escrever a maioria das pginas Web sem usar cdigo Java:
<%@taglib uri=/demo prefix=demo %>

Taglibs
As taglibs foram desenvolvidas pela Sun para estender as funcionalidades da Expression Language; Basear nosso cdigo na EL e taglibs permite que tenhamos um cdigo complexo porm limpo, pois no temos cdigo Java no arquivo JSP e o resultado similar um HTML;

A maioria das publicaes dedica um capitulo parte para esse assunto;


importante tambm se estudar sobre JavaBeans, para se aprofundar o entendimento de como a Expression Language funciona.

JavaServer Pages - funcionamento


Arquivos JSP no so compilados nos editores;

Arquivos JSP so transformados em uma Servlet por um compilador JSP (o Tomcat contm um compilador embutido);
Esse compilador pode gerar um cdigo Java que ento compilado para gerar bytecode diretamente para a Servlet; Ento, somente durante a execuo de uma pgina JSP, quando ele transformado em uma servlet, que seu cdigo Java compilado e necessita de classes do driver que so procuradas no diretrio lib.

JSP - ciclo de vida

http://edn.embarcadero.com/article/26911

Referncias
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%2Fprogr am%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/caelumjava-web-fj21.pdf