Primeiro exemplo de uso de páginas JSP
Crie um arquivo html com o nome: index, e digite o código abaixo no Eclipse. Salve no seguinte diretório:
C:\apache-tomcat-6.0.33\webapps\ROOT\Prog1\
Voces podem utilizar como editor para escrever o código HTML e jsp, o Dr. Java, o Context que pode ser baixado gratuitamente, ou mesmo o Bloco de Notas, salvado todos os arquivos dentro do diretório ROOT do Tomcat. O ideal e criar uma pasta para o programa que estamos
testando, no entanto quando for fazer o teste da página no Browser, após startar o Tomcat no diretório /Bin deste e carregar nossa página no navegador, da seguinte forma:
http://localhost:8080/Prog1/
Observem que o diretório Prog1 é o nome que dei projeto (diretório), salvo dentro do diretório C:\apache-tomcat-6.0.33\webapps\ROOT\
Índex.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Exemplo de IF</title> </head>
<body>
<a href="decisao1.jsp">Exemplo IF</a> </body>
</html>
Crie um segundo arquivo denominado decisao1.jsp e salve no mesmo diretório do arquivo HTML
<%
if(request.getParameter("valor")==null) { %>
<form>
Informe seu nome: <input name="valor"> <br>
<input type="submit" value ="enviar"> </form>
<% } else {
%>
Seu nome é <%=request.getParameter("valor") %> <%
} %>
Segundo exemplo de JSP
Incluir a linha <a href="decisao2.jsp">Exemplo Switch</a> no arquivos índex.html Você pode dar uma quebra de linha, digitando no final da primeira linha a tag <BR>. Em seguida crie um segundo arquivo JSP denominado, decisao2.jsp, ditando o mesmo no editor de sua preferência e salvando o mesmo dentro da pasta /ROOT/Prog1:
<%
if(request.getParameter("valor")= =null) { %>
<form>
Informe um numero entre 1 e 5: <input name="valor"> <br>
<input type="submit"> </form>
<% } else {
int num = Integer.parseInt(request.getParameter("valor")); switch (num) {
case 1: case 3 : case 5:
out.println("É um número impar"); break;
case 2: case 4:
out.println("É um número par"); break;
default:
out.println("Não é um número entre 1 e 5"); }
} %>
Para podermos expandir nossos exemplos com JSP, abaixo alguns operadores que poderemos utilizar a fim de executar qualquer teste lógico em nossas páginas:
Comparadores: (a= = b) – Igualdade
(a != b) – Não igual ou diferente de (a > b) – Maior que
(a < b) – Menor que
(a >= b) – Maior ou igual a... (a <= b) – Menor ou igual a... Concatenadores lógicos:
&& - Função E (And) – Para retornar verdade, ambas as condições analizades dever ser verdadeiras
| | - Função ou (Or) – Para retornar verdade, basta que umas das condições analisadas seja verdadeira.
^ - Função ou exclusivo (Or exclusive) – Para retornar verdade, apenas uma das condições deve ser verdadeira.
Ainda analisando o segundo exemplo, podemos notar uma conversão de tipos. Abaixo vejam todas as opções de conversão.
Ao ser enviada a consulta, inicialmente convertemos o parâmetro para um tipo inteiro
(Como por exemplo esta linha do código: int num =
Integer.parseInt(request.getParameter("valor"));), utilizando o método parseInt, da classe Integer. Existem várias outras conversões, como podemos ver abaixo:
Byte.parseByte(objeto String) – Converte um objeto string para um tipo primitivo byte;
Short.parseShort(objeto String) – Converte um objeto string para um tipo primitivo short;
Float.parseFloat(objeto String) – Converte um objeto String para um tipo primitivo float;
Double.parseDouble(objeto String) – Converte um objeto String para um tipo primitivo Double.
É isso que nosso código decisao1.jsp faz, ele executa um teste lógico nos números, para ver se são ímpares ou pares, tomando uma decisão e apresentando a resposta. Como o parâmetro “valor” é uma string, temos que antes de atribuir esse valor a variável “num” que é inteira, converter a string numérica para um número inteiro, para que não haja erro.
Comando de repetição While
Tanto o comando while quanto o comando do..while são chamados de comandos de repetição indeterminados, pois não sabemos quando o laço irá terminar. Normalmente esses comandos são utilizados em pesquisa de banco de dados.
Vamos utilizar esse exemplo para isso. Antes precisamos criar uma pasta dentro de /ROOT/WEB-INFO, denominada classes e copiar para dentro dela, o driver do mysql denominado mysql-connector-java-5.1.7-bin.jar.
No exemplo abaixo, foi criado um banco de dados no mysql, denominado dvdhome e uma tabela filmes com id do filme autonumeração e um campo filmes tipo caracter com o nome dos filmes. O código abaixo gera uma página JSP que Le o banco de dados e retorna o nome dos filmes.
Crie um banco de dados denominado dvdhome e uma tabela filmes com a seguinte estrutura no mysql:
Create database dvdhome; Use dvdhome;
Create table filmes (
Cod int(11) auto_increment, Filmes varchar(35) not null, Primary key(Cod));
Não se esqueça de incluir no arquivo índex.html a linha: <a href="repeticao1.jsp">Exemlo WHILE</a><br><hr>
Para chamar a página jsp.
Segue o código da página repeticao1.jsp <%@page import="java.sql.*"%> <% Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dvdhome?userUnicode =true","root",""); Statement stm = con.createStatement();
ResultSet res = stm.executeQuery("select * from filmes"); if(res.next()) {
out.println("Seus usuarios sao: "); out.println("\n");
do {
out.println(res.getString(2));
}while (res.next()); }else {
out.println("Nao existgem registros cadastrados"); }
%>
O aquivo acima funciona da seguinte forma: um objeto ResultSet é uma matriz de dados, onde o primeiro registro da tabela chama-se BOF (Begin of file), ou seja, executamos um comando IF para verificar se existem registros. Caso existam, será mostrada a mensagem Seus filmes são: e, em seguida, o comando DO mostrará todos os registros localizados.
Comando de repetição FOR
O comando de repetição FOR é considerado do tipo comando de repetição
determinado exatamente por termos o domínio dele (tanto quando começa quanto quando ele termina). Ele possui a seguinte estrutura:
FOR (atributo inicial; condição; incremento) {
Instruções a serem repetidas; }
Exemplo utilizando o FOR para cálculo do fatorial de um número. <%
if(request.getParameter("valor") == null) {
%> <form>
Informe o valor de um número para calcular seu fatorial...:<input name="valor"> <br> <input type="submit"> </form> <% } else { int i = 0;
int num = Integer.parseInt(request.getParameter("valor")); int res = 1;
for(I = num; I > 1; i--) res *= i;
out.println("O fatorial de " + num + " é " + res); }
%>
Abaixo outro exemplo de uso para o laço FOR, usando um texto com uma mensagem:
<body>
<% for (int i = 1; i < 6; i++) { %>
<h<%=i%>>Isto é um teste</h<%=i%>> <% } %>
</body>
Digite o texto acima e salve com o nome testeloop.jsp. Não se esqueça de criar um link na página índex.html para este arquivo.
Vamos para exemplos mais elaborados....
Para o Java, tudo são objetos, atributos, métodos ou classes.
Existe uma classe que cuida das datas e horas que chama-se date e está contida no pacote java.util. Além disso, toda data é armazenada , seu padrão é um inteiro longo, então, precisamos um objeto da classe SimpleDateFormat pertencente ao pacote java.text. Para formatar datas podemos utilizar as seguintes máscaras:
y – ano (2001) M – mês (July 07) d – dia (10) h – hora AM/PM (1 a 12) H – hora (0 a 23) m – Minutos (30) s – segundos (1) S – milisegundos (1)
E – dia da semana (Tuesday) D – Dia do ano (189)
F – dia da semana dentro do mês ( 2 – segunda semana em Julho, por exemplo) w – Dia da semana no ano (27)
W – Dia da semana no mês (2) a – AM/PM (AM)
k – Hora (1 a 24)
K – Hora AM/PM (0 a 11) ´ - para digitar o texto (às)
Assim se por exemplo, quisermos mostrar uma data em seu formato normal com dia/mês/ano, basta utilizar:
<%=(new SimpleDateFormat(“dd/MM/yyyy”))%> Se quiser formatar a hora, podemos utilizar:
<%=(new SimpleDateFormat(“hh:mm”)).format(new Date())%>
Para praticarmos com as datas, crie uma nova página JSP comeando-a como testedata.jsp e insira os códigos abaixo:
Controle de Formulários (tag form)
Usaremos as tag de form para enviar dados para a página JSP processar. A tag <form> compreende as seguintes tags:
<input type= “text”> - É a caixa de texto padrão para a entrada de dados, este tipo é o padrão quando a propriedade type for informada.
<input type = “hidden”> - Objetos do tipo texto que ficam ocultos.
<input type = “password”> – É a caixa de texto para solicitação de senhas. <input type = “radio”> – São os objetos tipo escolha apenas um.
<input type = “checkbox”> - São objetos tipo escolha. <input type = “button”> - Botões para pressionar.
<input type = “submit”> - Botão utilizado para submeter o formulário.
<input type = “reset”> - Botão para apagar os dados dos objetos do formulário. <textarea rows = n cols – n></textarea> - Caixa de texto com várias linhas
(rows) e várias colunas (cols).
<select><option></option></selcct> - São listas de seleção (podendo ser padrão ComboBox ou List).
Além disso, duas propriedades são muito importantes para todos esses objetos e nosso uso:
value – Armazena o valor digitado pelo usuário.
name – Usado pela JSP para obter o valor de determinada tag. A tag <form> possui a seguinte sintaxe:
<form name=nome action=formação.jsp method=método></form> Onde metodo indica a forma com que os dados serão passados para o formulário.
Por GET que é a forma direta de passagem dos dados, ou por POST que passa todo o formulário.
Crie um arquivo denominado teste3.html e não esqueça de criar uma referencia para ele na página índex.html
<HTML> <HEAD> <TITLE>Pesquisa Alcoólica</TITLE> </HEAD> <BODY> <H1>Pesquisa Alcoólica</H1>
<FORM action='teste3.jsp' method=post> Você gosta de Beber:
<SELECT name='eBebida'> <OPTION value=0>Vinho</OPTION> <OPTION value=1>Cerveja</OPTION> <OPTION value=2>Whiskey</OPTION> <OPTION value=3>Refrigerante</OPTION> <OPTION value=4>Água</OPTION> </SELECT><BR><BR>
<CENTER><INPUT type='submit' value=' Enviar Resposta '></CENTER> </FORM>
</BODY> </HTML>
Crie uma página jsp, denominada teste3.jsp e digite o código abaixo: <%@page contentType="text/html" import="java.io.*"%>
<html>
<head><title>JSP Page</title></head> <body>
<%
int[] opc = new int[5];
String[] nomOpc = {"Vinho", "Cerveja", "Whiskey", "Refrigerante", "Água"}; String[] nomCor = {"marrom", "azul", "purpura", "ouro", "verde"};
int total = 1; // Total nao pode ser por default 0 String nomArq = "resultado.txt";
// lê o arquivo
File arq = new File(nomArq);
if (arq.exists()) { // arq já foi gravado
BufferedReader br = new BufferedReader(new FileReader(nomArq)); String lin;
int i = 0;
while ((lin = br.readLine()) != null) { opc[i] = Integer.parseInt(lin); total += opc[i];
i++; }
br.close();
for (int i = 0; i < opc.length; i++) opc[i] = 0;
}
int indice = Integer.parseInt(request.getParameter("eBebida")); opc[indice] += 1;
// monta o gráfico
for (int i = 0; i < opc.length; i++) {
out.println("<img src='image/." + nomCor[i] + ".gif' width=" + ((100 * opc[i])/total) + " height=10>" +
"<img src='' width=" + (100 - ((100 * opc[i])/total)) + " height=10>"); out.println(nomOpc[i] + " - " + opc[i] + " Votos.<br>");
}
// regrava o arquivo
PrintWriter saida = new PrintWriter(new FileWriter(nomArq)); for (int i = 0; i < opc.length; i++)
saida.println(opc[i]); saida.close();
%> </body> </html>
Precisamos também criar 5 arquivos gif que conterão as cores para o gráfico da enquete e salva-los na pasta /ROOT/Prog1/image