Boa tarde Galera,
Estou fazendo um formulário usando o Netbeans, e preciso fazer uma servlet Via POST para gravar os dados em um arquivo .CSV separando os caracteres por “;”, e chamar uma servlet diretamente via GET deve exibir uma tabela com os dados gravados linha por linha.
Consegui fazer o formulário, mas fiz 2 formulário um chamando o GET e outro o POST como mostra abaixo e a servlet chamando os 2 métodos, mas quando chamo a servlet GET os dados não estão gravando linha por linha quando cadastro novos clientes.
O que posso estar fazendo de errado?
Formulário:
<head>
<title>Cadastro Clientes</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="css/estilo.css">
</head>
<font size="5" color="#083a90" style="font-weight: 900">Cadastro de Clientes</font> </br>
</br>
</br>
<body>
<div id="area">
<form action="ServletCadastro" method="get">
<fieldset>
<legend><font style="font-weight: 900">Informações do Cliente - doGet</font></legend>
<label for="nome"> Nome: </label>
<input type="text" name="txtnome" size="40" placeholder="Inserir Nome" required="required"></br></br>
<label for="Telefone"> Telefone: </label>
<input type="text" name="txttelefone" placeholder="inserir Telefone" size="30" required="required"><br><br>
<label for="endemail"> E-mail: </label>
<input type="text" name="txtemail" size="40" placeholder="Digitar um e-mail válido" required="required"> <br><br>
<input type="submit" value="Enviar" />
</fieldset>
</form>
</div> <br>
<div id="area2">
<form action="ServletCadastro" method="post">
<fieldset>
<legend><font style="font-weight: 900">Informações do Cliente - doPost</font></legend>
<label for="nome"> Nome: </label>
<input type="text" name="txtnome" size="40" placeholder="Inserir Nome" required="required"></br></br>
<label for="Telefone"> Telefone: </label>
<input type="text" name="txttelefone" placeholder="inserir Telefone" size="30" required="required"><br><br>
<label for="endemail"> E-mail: </label>
<input type="e-mail" name="txtemail" size="40" placeholder="Digitar um e-mail válido" required="required"> <br><br>
<input type="submit" value="Enviar" />
</fieldset>
</form>
</div>
</body>
Servlets:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import modelo.Cadastro;
public class ServletCadastro extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
private static final long serialVersionUID = 1L;
public ServletCadastro() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/html;charset=UTF-8");
String name = request.getParameter("txtnome");
String telefone = request.getParameter("txttelefone");
String email = request.getParameter("txtemail");
// CRIAR O OBJETO Cadastro
Cadastro objCadastro = new Cadastro (name, telefone, email);
String csv = objCadastro.getNome() + ";" + objCadastro.getTelefone() + ";" + objCadastro.getEmail();
createCsvFile(csv);
try {
//Criação de um buffer para a ler de uma stream
BufferedReader StrR = new BufferedReader(new FileReader("C:\\Users\\carlosalexandre\\Documents\\tabela.csv"));
String Str;
String[] TableLine = null;
//Essa estrutura do looping while é clássica para ler cada linha
//do arquivo
while((Str = StrR.readLine())!= null){
//Aqui usamos o método split que divide a linha lida em um array de String
//passando como parametro o divisor ";".
TableLine = Str.split(";");
String html = "<html><head><title>Dados do Cliente</title>" +
"</head><body><h1 align='center'>Cliente cadastrado</h1>" +
"<table><tr><th>Nome</th><th>Telefone</th><th>Email</th></tr><tr><td>"+
TableLine[0].toString()+ "</td><td>"+
TableLine[1].toString()+ "</td><td>"+
TableLine[2].toString()+ "</td></tr></table></body></html>" ;
out.print(html);
StrR.close();
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException ex){
ex.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/html;charset=UTF-8");
String name = request.getParameter("txtnome");
String telefone = request.getParameter("txttelefone");
String email = request.getParameter("txtemail");
// CRIAR O OBJETO Cadastro
Cadastro objCadastro = new Cadastro (name, telefone, email);
response.setContentType("text/html");
String csv = objCadastro.getNome() + ";" + objCadastro.getTelefone() + ";" + objCadastro.getEmail();
createCsvFile(csv);
}
public void createCsvFile(String csv){
//A estrutura try-catch é usada pois o objeto BufferedWriter exige que as
//excessões sejam tratadas
try{
//Criação de um buffer para a escrita em uma stream
BufferedWriter StrW = new BufferedWriter(new FileWriter("C:\\Users\\carlosalexandre\\Documents\\tabela.csv"));
//Escrita dos dados da tabela
StrW.write(csv + "\n");
//Fechamos o buffer
StrW.close();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace(); }
}
public void readCsvFile(){
//A estrutura try-catch é usada pois o objeto BufferedWriter exige que as
//excessões sejam tratadas
try {
//Criação de um buffer para a ler de uma stream
BufferedReader StrR = new BufferedReader(new FileReader("C:\\Users\\carlosalexandre\\Documents\\tabela.csv"));
String Str;
String[] TableLine;
//Essa estrutura do looping while é clássica para ler cada linha
//do arquivo
while((Str = StrR.readLine())!= null){
//Aqui usamos o método split que divide a linha lida em um array de String
//passando como parametro o divisor ";".
TableLine = Str.split(";");
//O foreach é usadao para imprimir cada célula do array de String.
for (String cell : TableLine) {
System.out.print(cell+" ");
}
System.out.println("\n");
}
//Fechamos o buffer
StrR.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException ex){
ex.printStackTrace();
}
}
}