Servlets - Parte do Capítulo 3 (Três Maneiras de Programar em Java WEB Page-centric, MVC e DAO)

 

Primeiro Servlet (Controller)

Depois de duas etapas das camadas propostas do padrão MVC que passamos a estudar nesse capítulo, agora iremos fazer a classe que intermedia o processo de comunicação entre a requisição do usuário (View) e os dados trabalhados na aplicação (model), o Servlet (control). O Servlet terá essa função de unir esses dois mundos. Receberá as informações vindas do cliente e as repassará para o Bean processá-las e armazená-las na base de dados.

A criação do primeiro Bean, também envolve inicialmente pensar mais a fundo na organização do projeto. Olhe que continuamos “batendo nessa tecla” desde o início desse capítulo, sempre preocupados com a organização das pastas e distribuição dos arquivos que compõe o sistema.

Começaremos criando uma pasta chamada “controller” dentro da estrutura de pastas e subpastas (br\com\syswebjee2)  de nossos pacotes que fica dentro da pasta de src no ADe. Assim teremos agora 3 (três) pacotes, um model, um util e um controller. Dentro de pasta controller, crie um arquivo chamado ProfissionalServletCadastrar.java. Na Figura a 3.56 a seguir, já temos o arquivo fonte do Servlet na pasta controller.

Figura 3.56 –  Primeiro Servlet, dentro do pacote controller.

Observe abaixo o código fonte completo do primeiro Servlet.



Podemos dividir esse código em 3 (três) etapas, confira a seguir.

O trabalho do Servlet

O controller (Servlet), é a parte mais importante do sistema. A engrenagem do sistema que receberá as informações vindas do formulário (View) e será responsável por fazer o tratamento delas. As envia e logo depois recebe a resposta do Bean (model), intermediando assim a conversa. Por fim envia o resultado de volta para o usuário (View). Desta forma o usuário envia e recebe o resultado usufruindo da View e todo processo é feito internamente. Na Figura 3.57 abaixo temos um diagrama que nos mostra como esse trabalho é feito pelo controller.

Figura 3.57 –  Funcionamento do controller (Servlet).

Uma classe Servlet (controller), sempre estenderá uma classe HttpServlet e deverá declarar ao menos um método para a recepção das requisições, chamados de doGet ou doPost. Esses métodos de recepção possuíram dois parâmetros, um HttpServletRequest normalmente chamado de request e outro HttpServletRepsonse nomeado de response. O pedido virá ao Servlet sempre por intermédio de uma requisição get ou post (já explicado no primeiro capítulo desse livro), com as informações capturadas pelo objeto request e a resposta por objeto response.

Recebendo e tratando informações

Após as declarações do pacote, importação dos objetos a serem usados na classe e a definição da classe que estende a classe HttpServlet. Informamos qual o tipo de método se encarregará de receber as informações vindas da View. Nesse código optamos inicialmente por um método doGet.

O trabalho do Servlet começa na preparação para fazer o tratamento dos dados. Inicia-se o método doGet com uma lista grande, que tem o objetivo de declarar as variáveis de tipos compatíveis com os campos da tabela profissional. Logo após, vem o tratamento desses dados.

Nesse código, temos uma preocupação inicial com as informações que serão do tipo Date e Double. Sempre utilizando do objeto request (que é um HttpServletRequest) e do seu método getParameter() para receber os dados. Observe que nos certificamos de transformar os dados dos campos datacad, datanasc e documentoval (todos serão do tipo Date ao final) em Strings. No qual recebendo-as, formatando-as e as armazenando-as como Strings. Assim não teremos problema na conversão para o objeto/tipo Date mais adiante.

Na quarta linha desta parte do código, observe que no momento que o objeto resquest captura o valor do parâmetro salario, utilizamos um método para Strings chamado replace(), no qual trocamos as ‘,’ (vírgulas), por ‘.’ (pontos). Isto, para evitar erros na conversão da String logo adiante em um tipo double.

Feito isso todo processo parse (conversão), é colocado dentro de um try/catch, para caso ocorra algum erro de conversão ele possa ser capturado.

Para entender o processo de parse (conversão) feito sobre os valores de data. Primeiro confira a declaração do objeto SimpleDateFormat que fica no início da classe Servlet exibido abaixo.

Logo no início do Servlet, criamos um objeto chamado formato (do tipo SimpleDateFormat), que aplicará sobre as Strings (criadas para receber as informações dos parâmetros de data do formulário, mostradas anteriormente) o formato da data que o sistema de banco de dados (Oracle) está pronto para receber.

Observe no pedaço de código anterior, que o objeto formato usa do método parse para preparar a String selecionada para ser uma data válida.  Por fim os objetos tipo Date criados recebem as Strings e também exsite tratamento para os dados do tipo Integer e Double, que também estão todos dentro do try/catch.

Processando

Depois de recebido e tratado os dados, inicia-se a comunicação com o Bean, primeiramente criando os objetos para a comunicação.

Veja que criamos um objeto do tipo Bean, um para conter os dados a serem enviados. O objeto profissional é usado e preenchido com todos os dados tratados.

Abaixo podemos conferir quando o objeto jdbc (do tipo Conexao) faz a conexão com o banco. Ele tem trabalhado muito (...) e irá ter muito trabalho daqui por diante.

E por fim realiza a gravação dos dados que vieram do formulário. A variável que também foi instanciada no início desta classe é a String resultado, recebe a informação de retorno de acordo com resultado da realização do processo de gravação feito pelo Bean. Caso positivo ele gravará na String uma resposta de sucesso.

 

Retornando

O último passo se dá na criação de um objeto do tipo RequestDispatcher chamado View, que é por objeto request, com seu método getRequestDispatcher() armazena nele a String resultado, contendo a resposta de acordo com o resultado anterior.

O processo é finalizado com o objeto View (RequestDispatcher), fazendo um forward da resposta, retornando assim para o usuário o resultado.

Compilando o Servlet

O processo de compilação é parecido com o que foi feito com as classes Bean anteriormente. Mas agora devemos acrescentar a lib Servlet-api.jar que está dentro do container (Tomcat), no classpath no ato da compilação. Na Figura 3.58 a seguir, podemos acompanhar como foi feito o processo de compilação do Servlet e na Figura 3.59 como ficaram os arquivos class depois do processo.

 Figura 3.58 –  Compilação do Servlet ProfissionalServletCadastrar.java.

Na Figura 3.58 a cima, mostra que compilamos a classe ProfissionalServletCadastrar em conjunto com o arquivo “c:\java\container\tombac9.0\lib\Servlet-api.jar” (caminho completo), também com todos da pasta “classes”, tudo isso na raiz de contexto do projeto e separados por um “;”.

Figura 3.59 –  Resultado da compilação do Servlet ProfissionalServletCadastrar.java.

Nessa Figura 3.59, temos o resultado final das compilações feitas até aqui. Com o uso da opção –d classes, informamos ao compilador javac que guarde a classe gerada pelo arquivo .java, na estrutura de diretórios dentro da pasta classes.

Após a compilação do arquivo fonte do Servlet, devemos atualizar o ADi e reiniciar o container.

Configurando o web.xml (DD)

Após a criação e compilação, devemos informar à aplicação que o Servlet ProfissionalServletCadastar está disponível para uso. Para isso editaremos o DD (Deploymente Descriptor). Dentro da pasta etc do ADe abra o arquivo web.xml e acrescente as seguintes linhas no meio do arquivo.

Estamos realizando o chamado “mapeamento” de Servlet. Primeiro identificamos o Servlet fazendo uso da tag <servlet></servlet>, no seu corpo informamos o nome de referência dele na tag <servlet-name> e logo depois na tag <servlet-class> repassamos o local correto da localização da classe. Acrescentamos a descrição completa do pacote seguido do nome da classe, br.com.siswebjee2.ProfisisonalServletCadatrar.

Por fim acrescentamos a tag <servlet-mapping></servlet-mapping> e no seu corpo também indicamos o mesmo nome de referência da tag anterior <servlet>. Isso com o intuito de fazer a ligação entre as duas tags. Para finalizar a alteração usamos a tag <url-pattern> para informar como chamaremos esse Servlet por intermédio de algum tipo de requisição. Nesse caso /inserir.do. Como se fosse um apelido para chamar o Servlet.

Ao finalizar estas alterações não esqueça de salvar o conteúdo do arquivo web.xml.

Comentários