Disciplina Programação e
Aplicação Web
Aplicação web é a extensão dinâmica da web ou application server, e são divididas em dois tipos:
● Presentation-oriented: Cria páginas interativas
contendo HTML, XML, e outros, e conteúdos dinâmicos em resposta a uma requisição.
● Service-oriented: Implementa a parte final de um web
service. Aplicações presentation-oriented são
frequentemente clientes de uma aplicação service-oriented web.
Aplicação web (continuação)
Aplicação web (continuação)
● Servlets: são classes java que dinamicamente
processam requisições e constroem respostas.
● Paginas JSP: são documentos textos que são
executados como servlets e são apropriados para geração de markup language tais com HTML,
APLICAÇÃO WEB (CONTINUAÇÃO)
●
Ciclo de vida da aplicação Web
● Desenvolvimento do código do componente
web.
● Desenvolvimento do descritor de implantação. ● Compilar componentes da aplicação web e
classe auxilares.
● Opcionalmente empacotar a aplicação em uma
unidade de implantação.
● Implantar a aplicação em um web container.
Implantando Módulo Web
Pode-se implantar o módulo de duas forma:
1.
Copiando o módulo web para o diretório de
implantação do web container.
2.
Copiando o pacote do módulo web (arquivo
*.war) no diretório de implantação do web
container.
Obs1: Pode-se ainda no caso do Tomcat configurar o descritor server.xml para que identifique o módulo web.
Obs2: Um context root identifica a aplicação web num JEE server (ex: http://host:port/context_root/alias).
Tecnologia Java Servlet
Um servlet é uma classe java que extende as
capacidades
do
servidor
que
acessam
aplicações num modelo de programa requisição
e resposta. Todos os servlets podem responder
qualquer tipo de requisição, para cada aplicação
a tecnologia java servlet define classes servlet
especificas para HTTP.
TECNOLOGIA JAVA SERVLET (CONT.)
Os pacotes javax.servlet e
javax.sservlet.http provem interfaces e classes para escrever servlets. Todos servlets devem implementar a interface Servlet, a qual define os métodos de ciclo de vida.
Ciclo de Vida do Servlet
O ciclo de vida de um servlet é controlado pelo container no qual o servlet tenha sido implantado.
Quando uma requisição é mapeada para o servlet, o container performa os seguintes passos.
1. Se uma instância do servlet não existe, o web container :
a) Carrega a classe do servlet.
CICLO DE VIDA DO SERVLET (CONT.)
b. Cria uma instância da classe do servlet.
c. Inicializa a instância do servlet chamando o método init.
2. Invoca o método service, passando os objetos request e response .
Obs: Se o container necessitar remover o servlet , ele finaliza o servlet chamando o método destroy.
CUSTOM TAGS NUMA PÁGINA JSP
É o elemento da linguagem JSP definida por um Usuário. <%@ taglib uri="/tlt" prefix="tlt" %>
<html> <body bgcolor="white"> <tlt:iterator var="departmentName" type="java.lang.String" group="$ {myorg.departmentNames}"> </body> </html>
Tecnologia JavaServer Pages
JavaServer Pages (JSP) permite fácil
criação de conteúdos web sendo ambos
componentes dinâmicos e estáticos.
Página JSP é um documento texto que
contém dois tipos de textos: dados estáticos
(HTML, SVG, WML, XML, e outros), e
elementos JSP, para construir conteúdos
dinâmicos (recomenda-se a extensão *.jsp).
Ciclo de vida da Pagina JSP
São determinadas pela tecnologia Java Servlet.
Quando um request é mapeado para uma página JSP, o web container primeiro checa se o servlet da pagina JSP é mais velha do que a pagina JSP.
Se for o web container traduz a pagina JSP para uma classe servlet e a compila. Durante o desenvolvimento , uma das vantagens das paginas JSP sobre o servlet é que o processo de construção é feito automáticamente.
SCRIPTS NAS PAGINAS JSP (CONT.)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>
<HEAD>
<TITLE>JSP Expressions</TITLE>
<META NAME="author" CONTENT="Marty Hall"> <META NAME="keywords"
CONTENT="JSP,expressions,JavaServer,Pages,servlets"> <META NAME="description"
CONTENT="A quick example of JSP expressions."> <LINK REL=STYLESHEET HREF="JSP-Styles.css” TYPE="text/css"> </HEAD>
SCRIPTS NAS PAGINAS JSP (CONT.)
<BODY>
<H2>JSP Expressions</H2> <UL>
<LI>Current time: <%= new java.util.Date() %>
<LI>Your hostname: <%= request.getRemoteHost() %>
<LI>Your session ID: <%= session.getId() %>
<LI>The <CODE>testParam</CODE> form parameter: <%= request.getParameter("testParam") %>
</UL> </BODY> </HTML>
SINTAXE BÁSICA - JSP
• Texto HTML
• <H1>Blah</H1>
• Passado para o cliente. Transformado em código servlet:
• out.print("<H1>Blah</H1>"); • Comentários HTML
• <!-- Comentário -->
• Mesmo que um outro HTML: Passado para o cliente
• Comentário JSP
• <%-- Comment --%>
TIPOS DE ELEMENTOS SCRIPTS
• Expressões
• Formato: <%= expression %>
• Avaliada e inserida na saída do servlet: out.print(expression)
• Scriptlets
• Formato: <% code %>
• Incorporado ao método do servlet _jspService
• Declarações
• Format: <%! code %>
• Inserido no corpo de uma classe servlet, fora de qualquer método.
EXPRESSÕES JSP
• Formato
• <%= Java Expression %>
• Result
• Expressão avaliada, convertida para String, e colocada na página HTML no local onde ocorre na página JSP.
• Expressão colocada no método _jspService dentro do out.print
• Exemplos
• Data: <%= new java.util.Date() %>
• Hostname: <%= request.getRemoteHost() %>
• Sintaxe XML
• <jsp:expression>Expressão Java</jsp:expression>
• Versão XML não suportada pelo TomCat 3.
CORRESPONDÊNCIA JSP/SERVLET
• JSP Original
<H1>A Random Number</H1>
<%= Math.random() %>
• Código do servlet
public void _jspService(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
HttpSession session = request.getSession(true); JspWriter out = response.getWriter();
out.println("<H1>A Random Number</H1>"); out.println(Math.random());
... }
JAVASERVER FACES (JSF)
• Introdução • Ciclo de vida
• Usando JSF em paginas JSP • Usando tags JSF
• Usando dados localizados • Conversores e validadores. • Backing Bean
JSF – INTRODUÇÃO
É um framework do lado servidor baseado em aplicações WEB.
JSF – INTRODUÇÃO (CONT.)
JSF contém:
• JavaBeans
• Event Listener • Páginas JSP
• Classes auxiliares do lado do servidor • Biblioteca de componentes UI
JSF – INTRODUÇÃO (CONT.)
• Backing Beans
• Arquivo de configuração
JSF – USANDO JSF EM PÁGINAS JSP
• Definir entrada para JSF HTML render kit • Definir entrada para JSF Core tag lib
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
USANDO JSF EM PÁGINAS JSP (CONT.)
As tags suportam os seguintes atributos:• Id: Único identificador do componente. • Imediate: Se true, indica que qualquer
evento, validação, e conversão associado a um componente será aplicada na fase request value ou nas próximas fases.
USANDO JSF EM PÁGINAS JSP (CONT.)
• Style: Especifica um cascading style sheet (css)
para a tag.
• styleClass: Especifica um css styleshet que
contém definições de estilo.
• Value: Identifica uma fonte de dados externa e
USANDO JSF EM PÁGINAS JSP (CONT.)
• Binding: identifica um bean property e associa o componente
CONVERSORES E VALIDADORES (CONT.)
Para registrar conversores padrões:
• Associar value do componente para o backing bean do
mesmo tipo.
• Referenciar o converter pela classe ou pelo atributo ID da
tag do componente.
• Usar tag converterId ou tag binding aninhado no
CONVERSORES E VALIDADORES (CONT.)
• Via backing bean Integer age = 0;
public Integer getAge(){ return age;
}
public void setAge(Integer age) { this.age = age;
}
• Via atributo converter <h:inputText
CONVERSORES E VALIDADORES (CONT.)
• BigDecimalConverter, • BigIntegerConverter, • BooleanConverter, • ByteConverter, • CharacterConverter • DateTimeConverter, • DoubleConverter, • FloatConverter, • IntegerConverter, • LongConverter, • NumberConverter, • ShortConverteCONVERSORES E VALIDADORES (CONT.)
• DataTimeConverter <h:outputText value="#{cashier.shipDate}"> <f:convertDateTime dateStyle="full" /> </h:outputText> • NumberConverter <h:outputText value="#{cart.total}" > <f:convertNumber type="currency”> </h:outputText>CONVERSORES E VALIDADORES (CONT.)
• Registrando value-change listener <h:inputText
value="#{c.name}"> <f:valueChangeListener type="l.NameChanged" /> </h:inputText>
• Registrando action listener no componente
<h:commandLink action="bookstore">
<f:actionListener type="listeners.LocaleChange" /> </h:commandLink>
CONVERSORES E VALIDADORES (CONT.)
• Validadores padrão • DoubleRangeValidator • LengthValidator • LongRangeValidator • Exemplo:<h:inputText id="q" size="4" value="#{item.quantity}"
required=“true”> <f:validateLongRange minimum="1"/>
</h:inputText> <h:message
BACKING BEAN
Suas propriedades devem referenciar:
• Um valor do componente
• Uma instância do componente • Uma instância do converter • Uma instância do listener • Uma instância do validator
BACKING BEAN (CONT.)
private Integer userNumber = null;
public void setUserNumber(Integer user_number) { userNumber = user_number; }
public Integer getUserNumber() { return userNumber; }
BACKING BEAN (CONT.)
Configuração:
<managed-bean>
<managed-bean-name> UserNumberBean </managed-bean-name> <managed-bean-class> g.UserNumBean </managed-bean-class>
<managed-bean-scope>session</managed-bean-scope> </managed-bean>
REFERÊNCIAS
• Tutorial JEE da Sun:
http://java.sun.com/javaee/5/docs/tutorial/doc/
• www.coreservlets.com
• Geary, David; Horstmann Cay - Core JavaServer Faces,
2004