Академический Документы
Профессиональный Документы
Культура Документы
OBJETIVOS DA UNIDADE
Demonstrar a linguagem Java direcionada a aplicações em ambientes web.
Possibilitar ao aluno que utilize os recursos desta linguagem em diversas aplicações
na Internet, apresentando suas ferramentas e estabelecendo uma prática através
da implantação de um microblog.
1 – INTRODU•‚O
Como voc€ j• deve saber a Internet ‚ uma gigantesca "rede" que liga um
incont•vel nƒmero de computadores entre si. „ uma rede heterog€nea, j• que
diversos tipos de computadores est…o ligados a ela. Todos esses computadores
utilizam-se do protocolo TCP/IP como voc€ deve ter estudado na disciplina de
Redes de Computadores.
Como eles s…o distintos, precisam de uma linguagem que n…o esteja
necessariamente amarrada a uma plataforma de hardware/software espec†fica.
Como voc€ j• p‡de constatar, Java mostra-se ideal quanto a esse fator.
Uma vez que os programas Java s…o transmitidos como bytecodes, eles
podem “rodar” em qualquer computador sem necessitar que o cŠdigo seja reescrito,
independente da plataforma na qual ele ser• executado.
Nosso estudo ser• direcionado para a utiliza‹…o da plataforma Java voltada
para web e nŠs iremos discutir os pontos principais para que voc€ seja capaz de
desenvolver aplica‹Œes de alcance global com Java.
2.1.3.1 – O Browser
„ atrav‚s deste programa que se realiza as solicita‹Œes •s informa‹Œes
dispon†veis na WEB. Existem v•rios browsers dispon†veis no mercado, dentre os
mais populares est…o o Internet Explorer da Microsoft, o Firefox da Mozilla e o
Safari da Apple.
FIGURA 17 – EXEMPLOS DE TELAS DE BROWSERS
aplicacao
|-- WEB-INF
| |-- classes
| | `-- ...
| |-- lib
| | `-- ...
| `-- web.xml
|-- ...
`-- index.jsp
aplicacao
Diretório principal, geralmente, reflete o nome da aplicação em
desenvolvimento.
WEB-INF
Obrigatoriamente deve ser escrita em letras maiúsculas. Fique bastante
alerta sobre isso, alguns sistemas operacionais costumam não se preocupar com a
escrita do nome dos arquivos e algumas vezes tomam a liberdade de mudar isso
para, por exemplo, Web-inf, isso não é reconhecido na estrutura de diretórios e sua
aplicação não funcionará.
classes
Diretório onde ficará os arquivos contendo as regras de negócio da
aplicação.
lib
Diretório onde ficarão as bibliotecas através das quais sua aplicação
necessita para funcionar.
web.xml
O arquivo web.xml é também conhecido como descritor de distribuição, do
inglês Deployment Descriptor(DD), é nele que serão definidos parâmetros iniciais,
regras de navegação, configurações de sessão, página inicial, etc.
index.jsp
P•gina inicial da aplica‹…o, esse nome pode ser configurado para o nome
desejado no DD.
2.2.2 – Visibilidade
Junto a estrutura definida pela especifica‹…o deve ficar claro o que ‚ vis†vel
para um cliente web e o que ‚ vis†vel apenas para a aplica‹…o.
Voc€ precisa definir isso de forma a n…o deixar exposta para web,
informa‹Œes como a regra de negŠcio da empresa e sim, os recursos que ser…o
trabalhados e enviados ao cliente baseados nas a‹Œes e regras definidas pela
aplica‹…o.
Na estrutura web exposta, tudo ‚ vis†vel aos clientes web, com exce‹…o das
informa‹Œes contidas no diretŠrio WEB-INF, pois ‚ l• que ficar…o as classes
contendo as regras de negŠcio e navega‹…o da sua aplica‹…o, e isso sŠ diz respeito
a aplica‹…o, o cliente sŠ precisa receber a p•gina contendo seu extrato e de forma
alguma, informa‹Œes internas como acesso a dados, bancos utilizados, regras de
negŠcio e etc.
2.2.4 – Ferramentas
O Java ao ser instalado vem com ferramentas que d…o apoio ao
desenvolvimento de aplica‹Œes, dentre elas, possu†mos uma especialmente
constru†da para realizar o servi‹o de compacta‹…o, o JAR.
2.2.4.1 – JAR
2.2.4.2 – ANT
<target name="tarefa1">
</target>
<target name="tarefaDefault">
</target>
</project>
„ importante frisar que a estrutura de uma aplica‹…o web Java deve ser feita
obrigatoriamente da forma que a especifica‹…o determina, contudo, n…o
necessariamente sua pasta de projetos no ambiente de desenvolvimento precisa
seguir exatamente essa estrutura, como no exemplo a seguir.
MicroBlog/
|-- build.xml
|-- src
`-- webapp
| |-- WEB-INF
| | `-- classes
| |-- lib
| `-- web.xml
`-- index.jsp
2.3.2 – Build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="microblog" basedir="." default="dist">
2.3.3 – Index.jsp
<html>
<title>MicroBlog da IFPA</title>
<body>
<b>IFPA</b><br>
<b>Microblog</b>
<hr>
</body>
</html>
2.3.4 – 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">
<description>MicroBlog</description>
<display-name>MicroBlog</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Microblog> ant
Buildfile: build.xml
init:
[delete] Deleting directory /home/william/workspace/MicroBlog/target
[mkdir] Created dir: /home/william/workspace/MicroBlog/target
dist:
[war] Building war: /home/william/workspace/MicroBlog/target/microblog.war
BUILD SUCCESSFUL
Total time: 0 seconds
apache-tomcat-6.0.18
|-- bin
| |-- catalina.sh
| |-- catalina.bat
| |-- shutdown.bat
| |-- shutdown.sh
| |-- startup.bat
| |-- startup.sh
| |-- ...
| `-- version.sh
|-- conf
| |-- context.xml
| |-- server.xml
| |-- tomcat-users.xml
| |-- ...
| `-- web.xml
|-- lib
| |-- jsp-api.jar
| |-- servlet-api.jar
| |-- ...
| `-- mysql-connector-java-5.1.13-bin.jar (Acesso a dados - Adicione)
|-- logs
| |-- ...
| `-- catalina.out
|-- temp
|-- webapps
`-- work
bin
Armazena os scripts responsáveis pelo gerenciamento do tomcat, dentre
eles o principal é o catalina, responsável pela inicialização e finalização do
container.
conf
Armazena os principais arquivos de configuração do tomcat, e dentre eles,
nós iremos utilizar o material do context.xml para definições de acesso a dados e, o
tomcat-users.xml, para definição do usuário e senha para acesso ao administrador
do tomcat.
lib
Contém as bibliotecas para o funcionamento das aplicações web, dentre
elas, destaca-se a servlet-api.jar e jsp-api.jar, implementação das referências para
aplicações web Java.
logs
Local onde são armazenadas informações relativas a execução do tomcat e
das aplicações nele distribuídas.
temp
Arquivos temporários.
webapps
Local onde serão armazenadas as aplicações.
work
Local onde ‚ armazenado o “cache” das aplica‹Œes e os arquivos de
servlets compilados a partir do jsp.
As configura‹Œes de usu•rio e senha, necess•rias para o acesso ao
manager do tomcat, devem ser inclu†das no arquivo tomcat-users.xml, e que deve
se parecer com o arquivo abaixo:
No sistema linux
Tomcat_home/bin$ ./catalina.sh run
Sistema windows
Tomcat_home\bin> catalina run
http://localhost:8080/
2.5 – SERVLET
Muito al‚m de uma solicita‹…o a uma simples p•gina com informa‹Œes
est•ticas, os usu•rios da Internet buscam informa‹Œes din“micas e atualizadas que
v…o desde consultas simples a livros em uma biblioteca at‚ informa‹Œes de extrato
de sua conta no banco. Esta necessidade fez com que novas tecnologias fossem
acopladas ao desenvolvimento de p•ginas HTML para fornecer esse dinamismo. O
Servlet pode nos ajudar nisso.
2.5.1 – O que ‚ um Servlet?
S…o classes Java utilizadas para proporcionar caracter†sticas que auxiliam
servidores de aplica‹Œes nas transa‹Œes do tipo requisi‹…o/resposta. Ou como diz o
autor do livro Tutorial do J2EE.
package br.com.empresa.microblog.utils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RecepcionistaServlet extends HttpServlet
{
dispecher.forward(req, resp);
}
// define os delimitadores
tarde = (Date) sdf.parse("12:00");
noite = (Date) sdf.parse("18:00");
<html>
<title>Primeiro Servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<body>
</body>
</html>
web.xml
Neste arquivo, como dito anteriormente, você definirá como a aplicação
deve se comportar e o que ela deve fazer quando determinado evento acontecer.
Criamos um servlet que realizará uma tarefa. No web.xml, define-se de que
forma essa tarefa será disparada.
Para isso, contamos com a tag <servlet> e o <servlet-mapping>. Inclua o
código abaixo no seu web.xml
<servlet-mapping>
<servlet-name>RecepcionistaServlet</servlet-name>
<url-pattern>/bemvindo.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<!-- propriedades que serao utilizadas abaixo, somente para facilitar -->
<property name="src.dir" value="${basedir}/src" />
<property name="bin.dir" value="${basedir}/webapp/WEB-INF/classes" />
<property name="dest.dir" value="${basedir}/target" />
<property name="res.dir" value="${basedir}/resources" />
<property name="web.dir" value="${basedir}/webapp" />
<target name="init">
<delete dir="${dest.dir}" />
<delete dir="${web.dir}/WEB-INF/classes" />
<delete file="${tomcat.home}/webapps/${ant.project.name}.war" />
<delete dir="${tomcat.home}/webapps/${ant.project.name}" />
<delete dir="${tomcat.home}/work/Catalina/localhost/microblog" />
<mkdir dir="${tomcat.home}/work/Catalina/localhost/microblog" />
<mkdir dir="${dest.dir}" />
<mkdir dir="${web.dir}/WEB-INF/classes" />
</target>
</project>
2.5.4 – Executando
ApŠs a conclus…o das configura‹Œes voc€ est• pronto para testar a
aplica‹…o, para isso, abra o browser e acesse a aplica‹…o pelo endere‹o:
http://localhost:8080/microlog/bemvindo.do
<html>
<title>Primeiro Servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<%
String result = "";
java.text.SimpleDateFormat sdf = new
java.text.SimpleDateFormat("HH:mm");
java.util.Date horaAtual = new java.util.Date();
java.util.Date tarde;
java.util.Date noite;
try
{
// Retira a hora da data atual.
horaAtual = (java.util.Date) sdf.parse(sdf.format(new java.util.Date()));
// define os delimitadores
tarde = (java.util.Date) sdf.parse("12:00");
noite = (java.util.Date) sdf.parse("18:00");
<body>
</body>
</html>
Com isso, apŠs executar o ant, pode-se testar chamando n…o mais o
servlet, e sim a p•gina web direto! Voc€ ter• o resultado semelhante ao anterior.
package br.com.empresa.microblog.usuario.entity;
import java.io.Serializable;
Para que possamos exibir o nome desde objeto usu•rio em uma p•ginas
JSP ter†amos o seguinte cŠdigo:
Com scriptlet:
Com EL
${usuario.nome}
NOTA – CONSULTANDO O SITE JAVA: Para mais informa‹Œes consulte o site da Java Community
Process pesquisando pela JSR 245.
Operadores . ou [ ]:
Ex. ${usuario.’nome’]}
Objetos impl†citos da EL
A JSP possui alguns objetos impl†citos que est…o dispon†veis para serem
utilizados na EL conforme listagem abaixo.
${nome.valor}
Declarativa:
No arquivo web.xml inclua o trecho abaixo:
<context-param>
<description>Este ‚ o estilo default da aplica‹…o</description>
<param-name>estilo</param-name>
<param-value>default</param-value>
</context-param>
<context-param>
<description>Email do administrador</description>
<param-name>emailAdmin</param-name>
<param-value>admin@empresa.com.br</param-value>
</context-param>
Program•tica:
Este código deve ser incluído dentro de um servlet já que o mesmo possui o
método getServletContex() de sua classe pai e nos permite atribuir objetos em seu
escopo.
getServletContext().setAttribute("estilo", "default");
getServletContext().setAttribute("emailAdmin", "admin@empresa.com.br");
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Muito provavelmente voc€ j• dever ter passado por uma situa‹…o onde est•
acessando uma transa‹…o banc•ria e de posse do seu extrato, realiza alguns
c•lculos, e quando volta ao computador para realizar um pagamento a aplica‹…o
solicita que se autentique no site do banco novamente porque sua sess…o expirou.
Em aplica‹Œes Java, esse tempo ‚ configurado no DD e caso n…o exista
requisi‹Œes por um determinado per†odo de tempo, (no nosso exemplo 15 minutos),
o servidor invalida a sess…o perdendo com isso todos os controles que indicavam
que existia um usu•rio conectado ao site, obrigando-o a se autenticar novamente.
A partir da sess…o, existem alguns m‚todos importantes que precisamos
conhecer.
>> setAttribute(String,String);
adiciona objetos no escopo de sess…o, ou seja, objetos que existem enquanto a
aplica‹…o n…o exceder o “timeout” da sess…o ou enquanto a aplica‹…o n…o chama o
m‚todo invalidade().
>> removeAttribute(String);
remove o atributo da sess…o.
>> session.removeAttribute("usuarioLocado");
remove o atributo chamado usuarioLogado da sess…o.
>> invalidate();
torna inv•lida a sess…o, ou seja, remove todos os atributos e exclui o identificador.
Vale observar que existem outros m‚todos que podem ser interessantes na
constru‹…o de aplica‹Œes reais. Voc€ pode encontrar mais informa‹Œes sobre esses
m‚todos na especifica‹…o de Servlet.
>> request.removeAttribute(string);
respons•vel por remover atributos do escopo de requisi‹…o.
Outros Operadores
Existem muitos outros operadores dispon†veis na EL, mostraremos alguns,
contudo vale consultar a documenta‹…o para a lista completa.
Operadores Aritm‚ticos
Adi‹…o: +
Subtra‹…o: -
Multiplica‹…o: *
Divis…o: / ou div
Resto: % ou mod
Opera‹Œes Relacionais
Igual: == ou eq
Diferente; != ou ne
Menor que = < ou lt
Maior que = > ou gt
Menor ou igual a = <= ou le
Maior ou igual a = >= ou ge
Operadores LŠgicos
E: && ou and
OU: || ou or
Nega‹…o: ! ou not
Operador Condicional
A?B:C
Onde, A ‚ a express…o que retorna um valor boleano(verdadeiro ou falso). B ser• a
opera‹…o realizada caso a condi‹…o avaliada em A for verdadeira e C caso seja
falsa.
<%@page import="br.com.empresa.microblog.usuario.entity.Usuario"%>
<html>
<title>MicroBlog da Facu</title>
<body>
<b>IFPA</b><br>
<b>Microblog</b>
<hr>
<% Usuario usuario = new Usuario();
usuario = (Usuario)session.getAttribute("usuario");
%>
<b>Bom dia <%= (usuario == null ? "Convidado":usuario.getNome() ) %></b>
</body>
</html>
JSTL
Mƒltiplas op‹Œes
<c:choose>
<c:when test="${express…o}">...</c:when>
<c:when test="${express…o}">...</c:when>
<c:otherwise>... </c:otherwise>
</c:choose>
2.7.7 – La‹os
Exemplo de la‹o:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<b>Gest…o de Usu•rios</b>
<hr />
3. OUVINTES (Listeners)
O listeners s…o classes bastante interessante quando se deseja monitorar o
comportamento da aplica‹…o para a realiza‹…o de tarefas espec†ficas baseado em
determinados eventos.
Imagine se os requisitos de seu prŠximo aplicativo web, determinar que
voc€ precisa contar o nƒmero de acessos, ou que determinada p•gina deve ser
v•lida por um per†odo determinado de tempo, como em uma prova online, ou
simplesmente realizar um log para terminar o IP, data e hora do requisitante para
posterior auditoria! S…o muitas as possibilidades!
Segundo Bond (2003, p.493): “um servlet pode ser designado como um
ouvinte de eventos. Isso permite que a servlet seja notificada quando algum evento
externo ou altera‹…o tenha ocorrido”.
Existem v•rios listeners dispon†vel para monitorar eventos em n†vel de
servidor, para utilizarmos, precisamos de uma declara‹…o no DD e de classes
implementando os listeners. Veremos rapidamente alguns deles.
HTTPSessionListener
Respons•vel pelo monitoramento dos eventos que dizem respeito a sess…o,
onde um evento chamado HTTPSessionEvent ‚ disparado no momento em que
uma sess…o ‚ criada ou invalidada.
Para utilizarmos criaremos uma classe chamada MonitoraSessaoListener,
para que possamos obter o nƒmero de usu•rios online no sistema, ou seja, o
nƒmero de clientes que abrir…o uma sess…o na aplica‹…o.
A Classe deve ser uma classe Java que implemente a interface
javax.servlet.http.HttpSessionListener. Essa interface, por sua vez, determina a
necessidade de implementar os m‚todos:
sessionCreated(HttpSessionEvent evento):
executado no momento em que uma sess…o ‚ criada.
sessionDestroyed(HttpSessionEvent evento):
executada no momento em que uma sess…o ‚ finalizada por “timeout” ou quando
alguma parte da aplica‹…o chama o m‚todo invalidade().
<listener>
<description>Descricao do listener</description>
<listener-class>
br.com.empresa.microblog.utils.MonitoraSessaoListener
</listener-class>
</listener>
Assim como o existe o listener para sess…o, existem outros para atributos e
at‚ para que a prŠpria classe saiba quando foi adicionado ou retirado da sess…o, ou
seja, vale apena dedicar algum tempo para estudar os listeners em detalhe porque
mesmo que voc€ nunca chegue a usar, ‚ importante saber que eles existem.
4 – FILTROS
Os filtros nada mais s…o que classes respons•veis por verificar o conteƒdo
das requisi‹Œes e determinar, baseado em condicionais, se ‚ uma requisi‹…o v•lida,
ou se a partir dessa requisi‹…o, ela deve ser encaminhada para um ou outro lugar.
Uma forma simples de utilizar filtros ‚ quando, por exemplo, um usu•rio mal
intencionado tenta acessar uma URL que o mesmo n…o tem permiss…o, ou em uma
compra da web onde o usu•rio para concluir o pedido, necessite primeiro ser
autenticado.
Os filtros são disponibilizados através de classes Java e configurados no
DD, e com base nessa configuração essas classes interceptam requisições que
estejam dentro do escopo do filtro em questão.
Para exemplificar, vamos implementar um pequeno e simples mecanismo
de segurança em nosso pequeno site, contudo para isso, precisaremos conhecer
alguns conceitos sobre segurança.
5 – SEGURAN•A
É impossível falar em desenvolvimento de sistemas sem discutir segurança.
A segurança web é algo que gera cada vez mais investimentos para tornar os sites
seguros e confiáveis.
Imagine um banco onde você não tenha certeza de que o valor passado
realmente reflete o real, ou que você não tenha realmente certeza de que suas
informações não estão sendo visualizadas por um usuário não autorizado ?
A indústria de software e a comunidade científica não para de investir e
trabalhar para gerar soluções seguras quanto ao acesso a informações remotas, já
que os oportunistas e foras da lei também trabalham incansavelmente para obter
informações de forma ilícita.
Veremos alguns conceitos básicos de segurança e de antemão deixamos
claro que para manter um site seguro e protegido de oportunistas haverá um longa
jornada a ser percorrida!
Existem quatro conceitos básicos que precisam ser avaliados quanto a
questão da segurança no ambiente web, são eles: autenticação, autorização,
confiabilidade e integridade.
Autenticaƒ„o
Define regras para garantir que o usuário é realmente quem diz ser.
Normalmente essa etapa da segurança é validada através de controles de usuários,
senhas, tokens de segurança, validações de informações de cadastro, etc.
Autorizaƒ„o
Agora que já se sabe que o usuário é quem diz ser, é preciso determinar o
que este usuário pode ou não acessar, ou seja, o que ele está autorizado a fazer no
sistema.
Confidencialidade e Integridade
Esses conceitos são interligados, pois dizem respeito a fazer com que os
dados não sejam vistos e nem alterados durante a transmissão. Para esses casos
existem protocolos especiais disponíveis no mercado que fornecem transmissões
de dados criptografados de forma a impedir que usuários oportunistas capturem
blocos de códigos na transmissão com o objetivo de obter e/ou manipular
informações.
5.1 – O FILTRO DE SEGURAN•A
Precisamos implantar um controle de seguran‹a em nosso sistema de
forma que, alguns pontos da aplica‹…o sejam protegidos onde para acesso, o
usu•rio deve estar autenticado no sistema.
Em nosso exemplo, montaremos um servlet que encaminhe o cliente a
p•gina de login, sempre que o mesmo esteja tentando acessar uma •rea restrita do
sistema sem estar devidamente autenticado.
Uma vez na p•gina de login, o usu•rio entrar• com um nome e uma senha
com a validade das informa‹Œes. Inclui-se no escopo de sess…o, um objeto boleano
de nome “logado” com o valor verdadeiro.
Devidamente autenticado, o usu•rio, ao acessar o recurso restrito, ter• sua
solicita‹…o novamente verificada para ent…o sim ser encaminhar ao recurso
protegido.
package br.com.empresa.microblog.security;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>
br.com.empresa.microblog.security.SecurityFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/usuario.do</url-pattern>
</filter-mapping>
6. 1. Acesso a dados
Inicialmente faremos algumas configurações em nosso ambiente, de forma
a permitir que nossa aplicação tenha acesso a banco de dados.
Utilizaremos para os testes o MySQL. O banco a ser criado se chamará
microblog e possuirá a tabela usuário com a estrutura a seguir.
package br.com.empresa.microblog.core;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import br.com.empresa.microblog.usuario.entity.Usuario;
public abstract class AbstractDAO<T, K extends java.io.Serializable>
{
private Connection getConnection()
{
Connection con = null;
try
{
Context initContext;
try
{
initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/MicroblogDB");
con = ds.getConnection();
}
catch (NamingException e) { e.printStackTrace(); }
} catch (SQLException e) { e.printStackTrace(); }
return con;
}
package br.com.empresa.microblog.usuario.entity;
import java.io.Serializable;
private Integer id ;
private String nome;
private String login;
private String senha;
package br.com.empresa.microblog.usuario.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.empresa.microblog.core.AbstractDAO;
import br.com.empresa.microblog.exceptions.DAOException;
import br.com.empresa.microblog.usuario.entity.Usuario;
try
{
while (rs.next())
{
dto = new Usuario();
dto.setId(rs.getInt(1));
dto.setNome(rs.getString(2));
dto.setLogin(rs.getString(3));
dto.setSenha(rs.getString(4));
}
}
catch (SQLException e) { e.printStackTrace(); }
return dto;
}
public List<Usuario> findUsuario(String login, String nome)
{
StringBuffer sql = new StringBuffer("SELECT * FROM USUARIO WHERE 1=1 ");
if (null != login && !login.equals("")){
sql.append(" AND LOGIN LIKE '" + login +"%'");
}
try
{
while (rs.next())
{
dto = new Usuario();
dto.setId(rs.getInt(1));
dto.setNome(rs.getString(2));
dto.setLogin(rs.getString(3));
dto.setSenha(rs.getString(4));
result.add(dto);
}
}
catch (SQLException e) { e.printStackTrace(); }
return result;
}
package br.com.empresa.microblog.usuario.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.empresa.microblog.usuario.dao.UsuarioDAO;
import br.com.empresa.microblog.usuario.entity.Usuario;
if (acao.equals("pesquisar"))
{
doPesquisar(request, response);
}
}
request.setAttribute("listaUsuarios", lista);
RequestDispatcher dis =
request.getRequestDispatcher("pages/usuario/pesquisar.jsp");
dis.forward(request, response);
}
}
Vamos então a tela de consulta onde teremos uma listagem com o login e o
nome dos usuários. Esse arquivo deverá ser criado em MicroBlog/pages/usuario/ e
se chamará pesquisar.jsp.
<b>Gestão de Usuários</b>
<hr />
<div align="right"><a href="/microblog">voltar</a></div>
<br />
RESUMO DA UNIDADE
A unidade aborda considerações gerais e depois específicas da linguagem
de programação Java direcionada a web. Inicialmente observamos alguns conceitos
fundamentais ao aprendizado, a estrutura da aplicação Java para web e elementos
essenciais como o Servlet e o JSP.
Consta ainda da unidade, uma seção que possui o propósito de oferecer ao
aluno uma prática de desenvolvimento utilizando os conhecimentos absorvidos com
o assunto em tela.
SUGESTÕES DE LEITURA
Sugiro que você faça uma leitura complementar nos links informados na seção
Saiba Mais acima e, se possível, em alguns dos livros indicados na bibliografia
deste fascículo.