Recebendo dados de um formulário HTML com Servlets
8 min8 minutos de leitura
8 min8 minutos de leitura
No artigo sobre como criar uma aplicação Java Web utilizando Servlets, fizemos uma aplicação bem básica que imprimia apenas uma mensagem no navegador, porém, eu havia dito que eu queria criar uma aplicação que permitisse o cadastro dos meus livros, e então, listá-los!
Na Web, como fazemos para mandar informações para a aplicação? Utilizamos um formulário em HTML, certo? Para a nossa felicidade, Já temos um modelo de formulário em HTML para cadastro de livro que é explicado com mais detalhes nesse post que escrevi! Então vamos reutilizá-lo:
Formulário de cadastro de livros
Livro Autor ISBN Valor Data da compra Cadastrar
Precisamos adicionar esse formulário e uma página HTML, portanto, vamos criar uma página HTML no nosso projeto, podemos inserir esse arquivo na nossa pasta "WebContent/WEB-INF" com o seguinte conteúdo:
Autor(a)
Alex Felipe
Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
<!DOCTYPE html><html><head><metacharset="UTF-8"><title>Cadastro de livro</title></head><body><fieldset><legend>Formulário de cadastro de livros</legend><form><label>Livro</label><inputtype="text" /><label>Autor</label><inputtype="text" /><label>ISBN</label><inputtype="text" /><label>Valor</label><input = =/>
Data da compra
Cadastrar
Ótimo, mas como podemos acessar o nosso formulário? Precisamos de uma Servlet que represente esse formulário, então vamos criar a FormularioServlet:
E como fazemos para exibir HTML usando Servlet? Pelo método println() do tipo PrintWriter, certo? Porém, dessa vez, não queremos escrever o HTML, pois já temos um arquivo pronto!
O que queremos fazer é, no momento em fizermos uma requisição para essa Servlet, exibir esse nosso arquivo! Para isso, precisamos indicar qual o local que está esse arquivo por meio do método getRequestDispatcher() do objeto HttpServletRequest req que representa a requisição dessa Servlet:
Vamos testar nossa aplicação? Clique com o botão direito no projeto "Run as > Run on Server", escolha o seu Tomcat conforme havíamos configurado e clique em "Finish":
Aparentemente a nossa aplicação está funcionando como o esperado, então agora vamos acessar o nosso formulário com a URL http://localhost:8080/minha-biblioteca/formulario:
Ué, o mesmo conteúdo que o nosso MainServlet? Por que será que está acontecendo isso? Vejamos novamente a URL que ele está atendendo:
Reinicie o Tomcat e teste novamente as requisições da aplicação:
Com URL http://localhost:8080/minha-biblioteca/:
Se testarmos agora com a URL do formulário http://localhost:8080/minha-biblioteca/formulario:
O nosso formulário aparece! E agora? Precisamos, de alguma forma, preencher os dados desse formulário e enviar para a nossa aplicação.
Para fazer uma requisição a partir de um formulário em HTML, podemos utilizar o atributo action da tag form enviando a URL que receberá os nossos dados:
<fieldset><legend>Formulário de cadastro de livros</legend><formaction="url da Servlet"><label>Livro</label><!-- restante do código -->
Perceba que, atualmente, não temos uma Servlet responsável em receber esses dados! Então vamos criar a CadastroServlet.
E agora? Precisamos registrá-la no web.xml, certo? Novamente aquele mesmo processo cansativo... Será que não existe alguma forma mais fácil? Para a nossa felicidade, existe sim! :D
A partir da API de Servlet 3.0, temos algumas facilidades que nas versões mais antigas não existiam, como por exemplo, registrar uma Servlet sem a necessidade do arquivo web.xml! Mas como podemos fazer isso? Por meio de anotações!
Para registrarmos uma Servlet sem a necessidade do web.xml, utilizamos a anotação @WebServlet enviando pelo parâmetro name o nome da Servlet:
Repare que enviamos apenas o nome da nossa Servlet, e a URL que ela vai atender? Como mandamos? Adicionamos o parâmetro urlMapping e a URL que será atendida:
Agora podemos verificar se está funcionando! Mas, antes de testar, vamos adicionar uma mensagem na para sabermos se realmente a CadastroServlet foi acessada:
Então vamos adicionar a URL dessa Servlet no nosso formulário:
<fieldset><legend>Formulário de cadastro de livros</legend><formaction="http://localhost:8080/minha-biblioteca/cadastro"><label>Livro</label><!-- restante do código -->
Reinicie o Tomcat e acesse a URL do formulário:
Preencha as informações e clique no botão cadastrar:
Está funcionando conforme o esperado! Porém, o que queremos de verdade? Pegar as informações desse formulário dentro da nossa Servlet, certo? Para isso, precisamos nomear cada input que está sendo enviado no nosso formulário por meio da tag name. Então vamos nomear todos os inputs:
<!DOCTYPE html><html><head><metacharset="UTF-8"><title>Cadastro de livro</title></head><body><fieldset><legend>Formulário de cadastro de livros</legend><formaction="http://localhost:8080/minha-biblioteca/cadastro"><label>Livro</label><inputtype="text"name="nome" /><>Autor ISBN Valor Data da compra Cadastrar
E na nossa Servlet? Como fazemos para pegar esses inputs? Lembra que o parâmetro HttpServletRequest req refere-se à própria requisição? Em outras palavras, podemos utilizar o método getParameter() desse parâmetro e retornar o valor do input por meio do nome dele!
Agora que temos as informações do livro, que tal mostrá-las na página de cadastro? Dessa forma verificamos todas as informações do livro enviado! Primeiro, vamos indicar que a nossa resposta será em HTML ao invés de texto:
resp.setContentType("text/html");
Modificaremos o primeiro texto também:
PrintWriter writer = resp.getWriter(); writer.println("<h1>Livro enviado com sucesso</h1>");
Por fim, vamos imprimir as informações do livro:
String nome = req.getParameter("nome");
String autor = req.getParameter("autor");
String isbn = req.getParameter("isbn");
String valor = req.getParameter("valor");
String data = req.getParameter("data");
writer.println("<ul>");
writer.println("<li>nome: " + nome + "</li>");
writer.println("<li>autor: " + autor + "</li>");
writer.println("<li>isbn: " + isbn + "</li>");
writer.println("<li>valor: " + valor + "</li>");
writer.println("<li>data: " + data + "</li>");
writer.println("</ul>");
Reiniciando o Tomcat e enviando o mesmo formulário de antes:
Excelente! Agora sim nós conseguimos enviar uma informação desse livro para o nosso servidor!
Nesse post, aprendemos como podemos direcionar uma requisição para uma página HTML que está contida no nosso projeto. Além disso, vimos também que, a partir da API de Servlet 3.0, podemos registrar uma Servlet utilizando a anotação @Webervlet. Por fim, vimos que, para mandar as informações para o servidor a partir de um formulário em HTML, precisamos informar a URL por meio do atributo action da tag form.
E aí? Curtiu a API de Servlets? Quer aprender mais a fundo sobre Servlets? Pensando nisso, o instrutor Guilherme Silveira, criou o curso de Servlets e fundamento de Java web, onde ele aborda toda a base para desenvolvermos uma aplicação de Java Web!