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.
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.
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 “;”.
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
Postar um comentário