Formulário em JSP Revisão de formulários em HTML Formulários Formulários estão presentes na Internet para possibilitar cadastros, pesquisas, envio de comentários, aumentando o poder de interação com os visitantes dos sites. Um formulário HTML é uma página Web que contém, além de texto, elementos especiais chamados controles, representados por caixas de checagem, botões tipo rádio, caixas de seleção, campos de texto, etc. Usuários preenchem os campos de um formulário submetendo-o em seguida a algum agente de processamento. Neste momento, todas as informações fornecidas são enviadas a um programa, escrito especialmente para processar esses dados de acordo com alguma necessidade ou especificação. Em alguns casos os dados são gravados em um banco de dados, em outros, por exemplo, uma nova página é construída, em outros ainda as informações são encaminhadas via e-mail. O processamento dos formulários será tratado posteriormente. O marcador <FORM> e seus principais atributos A área de um formulário, na codificação HTML da página, é delimitada pelo par de marcadores <FORM> e </FORM>. <FORM NAME="nome_do_formulario" METHOD="valor" ACTION="tratador_do_formulario"> elementos do_formulário </FORM> NAME: especifica o nome do formulário. Útil em casos de validação de campos, por exemplo, quando se utiliza uma linguagem de scripts como JavaScript. METHOD: método que define como os dados serão transmitidos para o programa que irá processá-los. Deve ter os valores GET ou POST, sendo que a diferença entre estes dois valores está no modo como os dados são empacotados. Normalmente o programa que será utilizado para processar o formulário já especifica o valor para o atributo METHOD. ACTION: indica o endereço do programa que receberá os dados do formulário. Exemplos: <FORM name="maladireta" method="post" action="maladireta.jsp"> <FORM method="post" action="busca_simples.jsp" > <INPUT TYPE="tipo" NAME="nome" VALUE="valor" SIZE="tamanho" MAXLENGHT="tamanho_maximo">: Em sua forma geral, utilizado para indicar um novo campo no formulário, diferenciado pelo seu tipo. INPUT: especifica um campo de entrada de dados. TYPE : atributo mais importante do marcador por definir o tipo de elemento a ser inserido no formulário. NAME: nome do elemento. Útil em casos de validação de campos, por exemplo, quando se utiliza uma linguagem de scripts como JavaScript. VALUE: Valor que pode ser predefinido para o campo. MAXLENGHT: Comprimento máximo do campo. CHECKED: Em casos de caixas de checagem , predefine como checada. Professor: Edison Pires [email protected] 1 A seguir, cada tipo será detalhado e exemplificado para melhor compreensão dos elementos de um formulário. Caixa de Texto <INPUT TYPE=TEXT NAME=... VALUE=... SIZE=... MAXLENGHT=...>: O valor TEXT (texto) no atributo TYPE indica que o campo será de texto, ou seja, um campo onde o usuário poderá entrar com dados. O atributo SIZE (tamanho) configura o tamanho do campo e é baseado no número de caracteres. Este valor não limita o tamanho do campo; somente define o tamanho em que será mostrado na página. Quem define o número máximo de caracteres que podem ser digitados é o atributo MAXLENGHT (comprimento máximo), que é opcional. Senha <INPUT TYPE=PASSWORD NAME=... VALUE=... SIZE=... MAXLENGHT=...> Para o valor PASSWORD (senha) no atributo TYPE aplicam-se todos os atributos do tipo TEXT exceto que todas as letras digitadas aparecem como um asterisco "*". Caixa de texto com várias linhas <TEXTAREA NAME="nome" ROWS="numero_de_linhas" COLS="numero_de_colunas"> ... </TEXTAREA> O marcador TEXTAREA (área de texto) permite definir um campo de texto com várias linhas. ROWS: define o números de linhas da caixa de texto. COLS: define quantos caracteres (colunas) cada linha possui. NAME: define o nome da caixa de texto. Caixa de combinação (combo box) <SELECT NAME="nome" SIZE="quantidade_de_opcoes_visiveis".> <OPTION VALUE="valor">Texto_a_aparecer</OPTION> <OPTION VALUE="valor">Texto_a_aparecer</OPTION> </SELECT> O marcador SELECT permite a criação de uma lista de opções a serem escolhidas pelo usuário. NAME: nome da lista de opções. SIZE: define o número de opções a serem exibidas simultaneamente na tela. Se valor omitido ou igual a 1 é exibida uma opção por vez. O marcador OPTION define cada opção a ser exibida pela lista. Este texto pode ter qualquer tamanho e deve vir entre os marcadores <OPTION> e </OPTION>. O atributo VALUE irá determinar o valor de cada opção. Assim, se por exemplo o texto a aparecer para o usuário for "Produtos destinados ao consumo imediato", não é isto que ficará armazenado quando o formulário for submetido e sim o VALUE associado a este texto, que pode ser uma abreviação como "PROD". Caixa de checagem <INPUT TYPE=CHECKBOX NAME=... VALUE=... CHECKED> O valor CHECKBOX no atributo TYPE define uma caixa de checagem. Na prática as caixas de checagem aparecem em grupos e o usuário pode escolher uma ou mais opções. NOME: define o nome da caixa de checagem. No caso de várias caixas, cada uma deve ter um nome diferenciado. VALUE: contém o valor do campo, que será passado ao programa interpretador do formulário. CHECKED: atributo opcional que pode ser utilizado quando se deseja que a opção já apareça selecionada na página. botão Submit (ou de envio) <input type="submit" value="Enviar" name="B1"> Submit: Este tipo de botão ao ser pressionado envia automaticamente todas as informações inseridas no formulário para que estas possam ser processadas por uma aplicação no servidor. É possível um mesmo formulário possuir mais de um botão de envio. Neste caso o atributo NAME da tag <INPUT> do botão deve ter o mesmo dado para os dois botões mas o valor do atributo VALUE deve ser distinto. Desta forma o browser vai identificar qual botão foi pressionado. Botão de escolha: <INPUT TYPE=RADIO NAME=... VALUE=... CHECKED> Professor: Edison Pires [email protected] 2 O valor RADIO no atributo TYPE define um botão de escolha. Na prática os botões de escolha parecem em grupos e podem permitir que apenas uma opção seja escolhida dentre as existentes (exclusão mútua). • NAME: define o nome do botão de escolha. No caso de botões de escolha com exclusão mútua, cada botão do grupo deverá utilizar um mesmo nome. • VALUE: contém o valor do campo, que será passado ao programa interpretador do formulário. • CHECKED: atributo opcional que pode ser utilizado quando se deseja que a opção já apareça selecionada na página. Botão Limpa/Cancela <INPUT TYPE=RESET VALUE=" texto_que_aparece_no_botão "> • O valor RESET no atributo TYPE define um botão que limpa todos os campos, devolvendo os mesmos valores de quando a página foi carregada. • No atributo VALUE, pode-se definir o que estará escrito no botão. Caso nenhum valor seja definido, aparecerá somente "Reset". Modelo de banco de dados relacional O modelo relacional desenvolvido por Codd é uma representação lógica dos dados que permite considerar relacionamentos entre os dados sem se envolver com a implementação física das estruturas de dados. Um banco de dados relacional é composto de tabelas. Qualquer linha particular da tabela é chamada de registro (ou linha). As tabelas em um banco de dados normalmente têm chave primária, que pode ser composta de uma ou mais colunas (ou campo) no banco de dados. Os campos de chave primária em uma tabela não podem ter valores duplicados. Cada coluna da tabela representa um campo diferente. Os registros são normalmente únicos dentro de uma tabela, mas os valores dos campos particulares podem ser duplicados. Exemplo Tabela Funcionários Numero 23603 24568 34589 35761 Nome Mario Rocha Luis Gustavo Valmir Costa Joel Castro Departamento 413 413 642 411 Salário 1100 2000 1800 1400 Locado em Bauru Bauru Campinas Jundiaí A linha destacada é o que denominamos um registro. Acesso à banco de dados A plataforma Java permite o acesso a banco de dados relacionais por meio de uma API (Application Programming Interface) denominada JDBC. JDBC é um sinônimo para DataBase Access from Java, sendo a sigla para Java Database Connectivity, criado em 1996 pela Sun. Consiste em um pacote de classes escritas em linguagem Java que permite escrever aplicações que envolvam bancos de dados em linguagem puramente Java. A JDBC permite o uso de declarações SQL, podendo ser utilizadas em conjunto com os diversos tipos de bancos de dados existentes no mercado (e alguns ainda com acesso nativo). A JDBC é um pacote embutido no aplicativo JDK, distribuído gratuitamente pela Sun. Além disso, será necessário possuir um driver específico para a conexão. Para cada SGBD existe o driver apropriado que deverá ser usado, consulte a documentaçã o do SGBD para obter informações sobre o driver. A JDBC é considerada por muitos a mais importante API do Java, um argumento difícil de combater, dado que qualquer aplicação ou sistema de porte necessita armazenar grandes quantidades de dados de forma organizada, o que é feito pelos bancos de dados. A idéia central da JDBC é prover às aplicações Java o acesso aos bancos de dados relacionais locais ou remotos, possibilitando que as aplicações utilizem dados existentes em um SGBD remoto, isto é, localizados em outras máquinas interligadas a uma rede. Outra característica importante do JDBC é o uso extensivo do SQL uma linguagem destinada à operação dos SGBD. Conceitos sobre a JDBC Tipo 1 JDBC-ODBC Providencia o aceso através de drivers ODBC. Tipo 2 Native API É a mais veloz. Faz chamada nativa a diversos tipos de bancos via API; entre eles destacam-se Oracle, Informix e DB2. O banco de dados é quem deve fornecer o acesso. Tipo 3 JDBC-Net É um driver de tradução JDBC, para chamadas ao banco de dados indep endente do protocolo da rede, é dependente do protocolo do servidor, é dependente de quem fornece a rede Tipo 4 Protocolo-Nativo com Driver Java Professor: Edison Pires [email protected] 3 Converte diretamente as chamadas JDBC para os protocolos de rede. É a solução mais prática para acesso de uma Intranet. Quadro comparativo Tipo JDBC-ODBC Native API Puro Java Não Não Protocolo Rede Direto Direto JDBC-Net Protocolo Nativo Sim Sim Requer Conector Direto Facilidade Uso Extremamente simples Dependente que o banco de dados forneça acesso Depende dos Serviços da rede A Mais Prática solução para uma Intranet Quais bancos de dados podem ser acessados com a JDBC Não existe um número específico de banco de dados que podem ser acessados através da JDBC, pode-se dizer que qualquer banco que possua um driver de conexão do tipo ODBC pode ser acessado, além disso, muitos fabricantes disponibilizam este acesso nativo via Java. Como fazer o acesso a JDBC O acesso via JDBC é bem simples e é feito seguido de três passos: 1. 2. 3. Estabelecer uma conexão com o banco de dados. Enviar o comando SQL. Processar o resultado. Esta aplicação é composta de quatro códigos: • agendaCriar.jsp (este arquivo é independente dos demais e o primeiro que deve ser executado) • estilo.css (este arquivo está disponível para cópia no site do professor) • agendaInclui.jsp • agendaMenu.jsp Os quatro códigos devem estar digitados e disponíveis para que a aplicação funcione. Verifique se o Mysql está ativo, pois se não estiver sua aplicação não vai funcionar. Professor: Edison Pires [email protected] 4 Professor: Edison Pires [email protected] 5 Professor: Edison Pires [email protected] 6 Professor: Edison Pires [email protected] 7