6 Java Beans e Servlets Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1
Meta Apresentar os recursos de orientação à objetos Java em JSP e integrá-los a tecnologia Servlets Objetivos Ao final desta aula, você deverá ser capaz de: Trabalhar com recursos de programação orientada à objetos em JSP. Dividir a aplicação em camadas de forma mais inteligente através de Servlets e JavaBeans. Página2
1 Java Beans Java Beans são componentes que podem ser utilizados junto às páginas JSP. Os beans possuem partes de informações que são chamadas de propriedades, o que permite que sejam armazenadas mais tarde. Formalmente, um JavaBean é uma classe que mantém algumas informações (as propriedades). Portanto, um JavaBean é algo que já foi estudado na disciplina de Linguagens de Programação II, pois é uma classe como as outras criadas nesta disciplina. Iremos criar um JavaBean em nosso projeto para cadastro de alunos iniciado na Quinzena 5. É importante que os JavaBeans sejam colocados em pacotes (pacotes são diretórios para organizar melhor suas classes, em caso de dúvidas consulte o material da disciplina de Linguagens de Programação II), para garantir que o servidor web possa localizá-los. Para criar um pacote, expanda o nó Pacotes de códigos fontes de seu projeto, clique no mesmo com o botão direito do mouse, selecione novo e em seguida Pacote Java conforme pode ser visto na figura a seguir. Página3
Na janela que surge, dê a seu pacote o nome de Beans e clique no botão Finalizar conforme mostra a figura a seguir. Página4
Sua Guia de projetos no Netbeans deve possuir agora um pacote dentro do nó Pacotes de códigos fontes conforme exibe a figura a seguir. Página5
Iremos agora criar um Java Beans que fará as operações de inserção, exclusão, alteração e seleção de registros da tabela Alunos de seu banco de dados. Para criar um Java Bean, clique com o botão direito no pacote Beans da sua guia de projetos criado anteriormente, selecione novo e em seguida classe Java conforme mostra a figura a seguir. Página6
Na janela que surge, digite como nome da classe AlunoBean e clique no botão Finalizar conforme mostra a figura a seguir. Página7
Na guia de projetos, agora você pode observar o novo Bean criado dentro do pacote Beans conforme mostra a figura a seguir. Página8
No AlunoBean, iremos criar 1 propriedade para cada campo da respectiva tabela do banco de dados e 4 métodos, sendo 1 deles o construtor sem parâmetros, 1 método para conectar ao banco de dados, 1 método para fechar a conexão com o banco de dados e 1 método para inserir 1 registro no banco de dados (para relembrar o que são propriedades, construtores e métodos consulte o material da disciplina de Linguagens de Programação II). Deixe o código de seu AlunoBean conforme o código da figura a seguir. Página9
Página10 Centro Federal de Educação Tecnológica de Minas Gerais
Nas linhas 20-24 são criadas 5 propriedades, sendo uma correspondente a cada campo da tabela aluno no banco de dados, a propriedade ID é tipo inteiro, Nome e Telefone são Strings já que seus campos na tabela do banco de dados são varchar. A propriedade con que armazenará os dados necessários para conexão ao banco de dados é tipo Connection e um PreparedStatement que é um objeto que executa comandos SQL no banco de dados. Neste caso o PreparedStatement foi chamado de pstm (em caso de dúvidas sobre as classes Connection e PreparedStatement consulte a quinzena 5). Nas linhas 32-42 é criado o método Conectar, o qual retorna um booleano com o valor true caso o seja possível se conectar ao banco de dados e false caso contrário (observe a variável booleana bret, a qual será true caso as instruções entre o bloco try...catch sejam executadas ou false caso contrário. Esta variável é retornada pelo método com o seu valor seja qual for). Os objetos e classes utilizados por este método foram explicados na quinzena 5. Entre as linhas 44-54 está o método para desconectar o aplicativo do banco de dados, liberando assim recursos do servidor. A única novidade neste método são as linhas 47 e 48 que executam o método close() nos objetos do tipo Connection e do tipo PreparedStatement. Se houve um ResultSet ou Statement, estes também poderiam ter seu método close() chamado no método Desconectar do AlunoBean. Nas linhas 56-70 é criado o método Inserir, o qual recebe como parâmetros o nome e o telefone do aluno e os insere no banco de dados. Este método não precisa receber o ID do aluno como parâmetro pois o mesmo é Autoincrement no seu banco de dados e se numera automaticamente. O método Inserir retorna true caso consiga inserir o registro no banco de dados e false caso contrário (observe a variável bret). Na linha 59 do método Inserir é chamado primeiramente o método Conectar, o qual fará a propriedade con da classe receber uma conexão com o banco de dados, para que assim posteriormente ela possa ser utilizada. Na linha 60, o PreparedStatement pstm, que é uma propriedade da classe AlunoBean recebe uma sentença SQL a ser executada. Note que no fim da setença SQL existe 2 interrogações conforme mostra a figura a seguir. Página11
Lembre da disciplina de banco de dados onde foi explicado que para inserir um registro em uma tabela no banco de dados utiliza-se a senteça SQL insert into <tabela> (<campo1>, <campo2>...<campon>) values (<valor_para_campo1>, <valor_para_campo2>,..., <valor_para_campon>). As interrogações aparecem nos locais dos valores, você deve alterar as interrogações por valores para somente depois ordenar que o registro seja inserido no banco de dados. Por este motivo, nas linhas 61 e 62 são executados os métodos setstring (você deve usar o método settipo_de_dado_a_ser_inserido), onde são passados 2 parâmetros. O primeiro parâmetro é qual interrogação da senteça SQL será substituída por um valor (indexados à partir de 1) e o segundo parâmetro, o valor para a interrogação selecionada conforme mostra a figura a seguir. Na linha 63, como a sentença SQL está pronta, a mesma é executada e o registro inserido no banco de dados. 2 - Servlets Página12 Para que nosso AlunoBean consiga inserir registros no banco de dados, será necessário que ele em algum momento seja chamado pela aplicação para executar esta tarefa. Alternativamente ao Scriplet, podemos usar os Servlets. Um Servlet é um componente web ou um programa que gera conteúdo dinâmico para web. Os Servlets são escritos através da API Java Servlet e são manipulados por um servidor container como o GlassFish. Ao ser chamado por através de um método get ou método post de um formulário, o Servlet executa o conteúdo que você colocar como código no método processrequest. Para criar um Servlet clique com o botão direito em Pacotes de código fonte em sua Guia de projetos, selecione novo e em seguida Servlet como mostra a figura a seguir.
Na janela que surge, altere o nome do Servlet para ServletBD e clique no botão Próximo conforme mostra a figura a seguir. Página13
Na tela seguinte, habilite a caixa de verificação Adicionar informações do descritor de implantação (web.xml) e clique em Finalizar conforme mostra a figura a seguir. Página14
Em sua Guia de projetos, no pacote <default> deve ter aparecido o recém criado ServletBD conforme mostra a figura a seguir. Página15
Codifique seu Servlet conforme mostra a figura a seguir. Página16
Página17 Repare que foi adicionado código nas linhas 36-51, dentro do método processrequest que já vem no Servlet criado pelo Netbeans IDE. Como novidade podemos destacar a linha 37, onde é instanciado um AlunoBean (para relembrar o que é instanciação
consulte o material de Linguagens de Programação II). Em seguida, na linha 38 são criadas 2 variáveis, nomaluno e telaluno, ambas do tipo String. Uma estrutura switch é chamada na linha 39, este switch (você pode relembrar a estrutura de decisão switch no material de Linguagens de Programação II) faz a leitura de uma variável nomeada como acao que é enviada para o Servlet através dos métodos get ou post dos formulários e convertida em um tipo String com o método tostring(). Na linha 40, é dito que se o valor da variável acao (que está sendo lida no cabeçalho da estrutura switch na linha 39) for igual a inserir, então as variáveis nomaluno e telaluno receberão valores que virão de componentes de um formulário (no caso caixas de texto txtnome e txttel, em caso de dúvidas sobre ler valores de formulários consulte a quinzena 2). Após estas variáveis receberem os devidos valores, são enviadas ao método inserir do AlunoBean na linha 43. Após o método inserir do Java Bean aluno ser terminado, o aplicativo redireciona o usuário para página index.jsp na linha 44 através do método sendredirect do objeto response. Precisamos agora de um formulário para enviar os valores devidos ao Servlet criado. Crie um novo arquivo JSP em projeto, chame-o de novo.jsp (em caso de dúvidas sobre este processo leia a quinzena 2). Deixe o código deste arquivo como a figura a seguir. Página18 Nas linhas 16-21 é criado um formulário, o qual possui como valor para o parâmetro action ServletBD, indicando que seus dados devem ser enviados para o servlet criado. Na linha 17 é criado um campo hidden, que é um campo que não é visível na página, apenas armazena um valor. Repare que o parâmetro name deste campo é acao (ou seja é a variável que o Servlet procura para decidir se insere, exclui ou altera dados do banco de dados), que neste caso recebeu o valor inserir. Nas linhas 18 e 19 são criadas as caixas de texto
txtnome e txttel, que são capturadas pelo Servlet e enviadas para um AlunoBean e assim serem salvas no banco de dados. Execute seu aplicatido e perceberá o resultado à seguir. Ao clicar no link NOVO REGISTRO, o usuário é direcionado para o formulário da página novo.jsp, ao preencher o formulário com dados e clicar no botão Cadastrar, o usuário é novamente direcionado para o arquivo index.jsp e perceberá a presença de um novo registro. Página19