[Resolvido!]Como enviar dados de um form jsp para um Servlet?

6 respostas
M

Preciso enviar dados de uma pag. jsp para um Servlet (sem struts, etc) para depois persistir no BD. Preciso configurar o WEB.xml? Estou apanhando disso, por favor ajudem :lol:

Meu form:

<form name="cad" action="com.livro.capitulo3.crudannotations/Servlet" action="post">
            Codigo: <input type="text" name="codigo" />
            Nome: <input type="text" name="nome" />
            Telefone: <input type="text" name="telefone" />
            Email: <input type="text" name="email" />
            Data: <input type="text" name="dt_cad" />
            Obervacao <input type="text" name="obs" />
            <input type="submit" value="Enviar" />
        </form>

Meu Servlet:

public class Servlet extends HttpServlet {
    
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Servlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet Servlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
            */
        } finally { 
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);


    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);

            ContatoAnnotations contato = new ContatoAnnotations();
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

java.sql.Date d = null;
        contato.setCodigo(Integer.parseInt(request.getParameter("codigo")));
        contato.setNome(request.getParameter("nome"));
System.out.println("nome =" +request.getParameter("nome"));
        contato.setTelefone(request.getParameter("telefone"));
        contato.setEmail(request.getParameter("email"));

        try {
           d = (Date) df.parse(request.getParameter("dt_cad"));
        } catch (ParseException ex) {
           Logger.getLogger(Servlet.class.getName()).log(Level.SEVERE, null, ex);
        }
contato.setDt_cad(d);
        contato.setObs(request.getParameter("obs"));

        try {
                
            // Eu sei que está feio, em um futuro poderemos refatorar e aplicar princípios de OO e Design
           //valor1 = Integer.parseInt((String) req.getParameter("valor1"));
        } catch (NumberFormatException e) {
            // Tratando para caso seja digitado um valor inválido
            //valor1 = 0;
            //aviso = "Algum valor foi digitado incorretamente (em branco ou caractercs não numérimos), atribuímos 0";
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Meu WEB.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>com.livro.capitulo3.crudannotations.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/com.livro.capitulo3.crudannotations/Servlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

não sei se estou configurando certo o .xml ???

6 Respostas

R

Quando você referencia um Servlet ou JSP a partir de um trecho HTML puro, você precisa incluir o nome do contexto na tag action, por exemplo, se a raiz da sua aplicação é localhost:8080/webapp, você tem que referenciar seu servlet por webapp/com.livro.capitulo3.crudannotations/Servlet

Outra coisa, mas eu nunca vi usar . (ponto) no caminho de um recurso. Tente mudar a tag:

<url-pattern>/com.livro.capitulo3.crudannotations/Servlet</url-pattern>

para

<url-pattern>/Servlet</url-pattern>

simplesmente.

M

Se eu fizer isso, aparece:

descriptionThe requested resource () is not available.

ou seja, ele não encontra.

Esse caminho todo é pq criei um pacote com esse nome:

<url-pattern>/com.livro.capitulo3.crudannotations/Servlet</url-pattern>
R

[quote=marcello315]Se eu fizer isso, aparece:

descriptionThe requested resource () is not available.

ou seja, ele não encontra.

Esse caminho todo é pq criei um pacote com esse nome:

<url-pattern>/com.livro.capitulo3.crudannotations/Servlet</url-pattern>

Mas a url-pattern não precisa bater com o caminho da classe. O mapeamento de URL existe justamente para você abreviar os caminhos para os seus recursos.

Qual era o erro que acontecia antes ?

V

Tente as seguintes modificacoes no web.xml

<servlet>  
        <servlet-name>meuServlet</servlet-name>  
        <servlet-class>com.livro.capitulo3.crudannotations.Servlet</servlet-class>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>meuServlet</servlet-name>  
        <url-pattern>/chamarServlet</url-pattern>  
    </servlet-mapping>

e no .jsp

<form name="cad" action="chamarServlet" method="post">  
                Codigo: <input type="text" name="codigo" />  
                Nome: <input type="text" name="nome" />  
                Telefone: <input type="text" name="telefone" />  
                Email: <input type="text" name="email" />  
                Data: <input type="text" name="dt_cad" />  
                Obervacao <input type="text" name="obs" />  
                <input type="submit" value="Enviar" />  
            </form>

Abrs…

R

marcello315,
Tente fazer como o Vini te explicou, mapeando o seu servlet somente com o /Servlet.
No seu arquivo JSP ao invés de colocar action = “post” coloque [color=red]method= “post”[/color].
Faça isso e poste o resultado.
Abraço e boa sorte.

M

Caros rmendes08, vini Fernandes e rafael.olima, obrigado pela ajuda/atenção, consegui resolver. Fiz as alterações q vcs sugeriram, troquei equivocadamente method por action, mas na verdade o problema é que o formato de data que eu estava enviando era inválido e não gravava no banco, utilizei:

contato.setDt_cad(new Date(System.currentTimeMillis()));

Obrigado pela ajuda!

Criado 5 de setembro de 2012
Ultima resposta 5 de set. de 2012
Respostas 6
Participantes 4