Dúvidas utilizando Servlet e JSP

10 respostas
A

Fala ai galerinha!!
To etudando JSP com Servlet aqui, para que futuramente consiga desenvolver sistemas Web com JAVA... mas durante meus estudos surgiu uma dúvida em relação a chamado do servlet, tenho um arquivo JSP que contem o formulário de cadastro, esse arquivo se encontra dentro do WebContent, tenho um Servlet responsável pela regra de negócio do cadastro que se encontro dentro do pacote br.com.caelum.agenda.Servlet, e também tenho um arquivo XML que mapeio o Servlet lá dentro, os dados estão sendo passado do formulário JSP para o Bando de Dados normalmente, mas agora que vem minha dúvida, onde está sendo chamado minha classe que contem o Servlet para capturar os dados do arquivo JSP e passar para o Banco??
Vou postar todos os aquivos que citei acima, a classe Servlet, o arquivo JSP que contem o formulário de cadastro, e o arquivo XML..
Obrigado!!

CLASSE QUE CONTEM O SERVLET
package br.com.caelum.agenda.servlet;

import java.io.*;
import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.http.*;
import br.com.caelum.agenda.dao.ContatoDAO;
import br.com.caelum.agenda.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {
	
	public void service(HttpServletRequest request, HttpServletResponse response) 
			            throws IOException, ServletException{
		
		PrintWriter out = response.getWriter();
		
		String nome = request.getParameter("nome");
		String email = request.getParameter("email");
		String endereco = request.getParameter("endereco");
		
		Contato cont = new Contato();
		ContatoDAO dao = new ContatoDAO();
		
		cont.setNome(nome);
		cont.setEmail(email);
		cont.setEndereco(endereco);
		
		try {
			dao.adiciona(cont);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		RequestDispatcher rd = request.getRequestDispatcher("/contato-adicionado.jsp");
		rd.forward(request, response);
	}

}
FORMULÁRIO JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <title>Página para Adicionar Contatos</title>
    </head>
    
    <body>
         <c:import url="cabecalho.jsp"></c:import>
         
         <form action="adicionaContato" method="post">
              Nome: &lt;input type="text" name="nome"/&gt; <br/>
              Email: &lt;input type="text" name="email"/&gt; <br/>
              Endereço: &lt;input type="text" name="endereco"/&gt; <br />
              
              &lt;input type="submit" value="Gravar"/&gt;
         
         &lt;/form&gt;
    &lt;/body&gt;
    &lt;c:import url="rodape.jsp"&gt;&lt;/c:import&gt;
&lt;/html&gt;
ARQUIVO XML
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"&gt;
  &lt;display-name&gt;fj21-agenda&lt;/display-name&gt;
  &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;adiciona-contato.jsp&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;
  &lt;servlet&gt;
      &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;
      &lt;servlet-class&gt;br.com.caelum.agenda.servlet.AdicionaContatoServlet&lt;/servlet-class&gt;
  &lt;/servlet&gt;
  &lt;servlet-mapping&gt;
       &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;
       &lt;url-pattern&gt;/adicionaContato&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;
  
&lt;/web-app&gt;

10 Respostas

Andre_Fonseca

oi,

O servlet é chamado através da action do formulário que deve ser igual ao nome mapeado para a servlet, incluindo o nome da sua aplicação

abs

A

André Fonseca:
oi,

O servlet é chamado através da action do formulário que deve ser igual ao nome mapeado para a servlet, incluindo o nome da sua aplicação

abs

Ainda ficou meio vago!!! :frowning:

leandronsp

O seu web container (tomcat, jetty, whatever) é quem vai instanciar essa servlet por trás. Ele vai olhar pra esse mapeamento:

&lt;servlet-mapping&gt;  
   &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;  
   &lt;url-pattern&gt;/adicionaContato&lt;/url-pattern&gt;  
&lt;/servlet-mapping&gt;

Aí ele vai olhar pra url “adicionaContato” e vai dizer “OPA…tem uma servlet que ja configuraram pra essa rota”:

&lt;servlet&gt;  
      &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;  
      &lt;servlet-class&gt;br.com.caelum.agenda.servlet.AdicionaContatoServlet&lt;/servlet-class&gt;  // Aqui que tá a sacada...
  &lt;/servlet&gt;

Entao essa servlet será criada em um determinado momento, inicializada em outro, aí envolve voce se aprofundar um pouco mais nesse processo. Indico a leitura do JSP & Servlets, da serie Use a Cabeca (Head First)

romarcio

Quando você clica no botão, sua action busca o servlet mapeado no web.xml.

&lt;form action="adicionaContato" method="post"&gt;

Aqui no web.xml você da uma nome ao Servlet e indica a qual classe ele pertence.
Quando clica no botão, a sua action chama a taq <url-pattern> que indica qual servlet ela representa através do <servlet-name>. E então ela procura qual classe pertence a esse <servlet-name>, no caso <servlet-class>.

&lt;servlet&gt;  
      &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;  //no do servlet
      &lt;servlet-class&gt;br.com.caelum.agenda.servlet.AdicionaContatoServlet&lt;/servlet-class&gt;  //classe que ele pertence
  &lt;/servlet&gt;  
  &lt;servlet-mapping&gt;  
       &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt;  //nome do servlet
       &lt;url-pattern&gt;/adicionaContato&lt;/url-pattern&gt;  //qual action executa esse servlet
   &lt;/servlet-mapping&gt;
A

romarcio:
Quando você clica no botão, sua action busca o servlet mapeado no web.xml.

&lt;form action="adicionaContato" method="post"&gt;

Aqui no web.xml você da uma nome ao Servlet e indica a qual classe ele pertence.
Quando clica no botão, a sua action chama a taq <url-pattern> que indica qual servlet ela representa através do <servlet-name>. E então ela procura qual classe pertence a esse <servlet-name>, no caso <servlet-class>.

&lt;servlet&gt; &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt; //no do servlet &lt;servlet-class&gt;br.com.caelum.agenda.servlet.AdicionaContatoServlet&lt;/servlet-class&gt; //classe que ele pertence &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;AdicionaContato&lt;/servlet-name&gt; //nome do servlet &lt;url-pattern&gt;/adicionaContato&lt;/url-pattern&gt; //qual action executa esse servlet &lt;/servlet-mapping&gt;

Então quer dizer que o URL-Pattern tem que ter o mesmo nome que está no Action certo…
Para que após clicar no botão o action buscar o servlet que se refere a esse URL-Pattern…
ou estou errado…

romarcio

Então quer dizer que o URL-Pattern tem que ter o mesmo nome que está no Action certo…
Para que após clicar no botão o action buscar o servlet que se refere a esse URL-Pattern…
ou estou errado…

Isso mesmo.

A

Surgiu uma outra dúvida aqui, tenho uma outra página JSP que serve para deletar, dentro da minha classe AdcionaContatoServlet eu tenho um método chamado Service() que é responsável por toda lógica de cadastro do contato, ai vamos supor que dentro dessa classe AdicionaContatoServlet eu crie um outro método chamado deleta(), como irei fazer para Mapear essa classe no arquivo Web.xml no sentido que quando eu clicar no botão deletar da pagina deleta.jsp, o action do formulário invoque o método deleta() da classe AdicionaContatoServlet e não o método service() da classe… essa é a dúvida!! Ou o Processo é outro, eu terei que criar outra classe Servlet para deletar os contatos… ou da pra fazer todos os processos utilizando uma só classe Servlet???

romarcio

Cria outra classe e mapeia ela no web.xml

romarcio

Groovin:
Da uma olhada neste site.
Tem muita coisa boa.

Estranho esse site. Vende video cursos de outros autores a 20 - 30 reais, enquanto no site dos autores os cursos custam 200 vezes mais.

A

Obrigado Romarcio!!!
Eu dei uma olhadinha aqui na postila da Caelum que tava estudando e eles desenvolveram essa súvida minha lá de uma maneira lógica…
Vlw…

To com outras dúvidas aqui mais eu acho interessante abrir outro tópico… Obrigado!!

Criado 6 de agosto de 2011
Ultima resposta 8 de ago. de 2011
Respostas 10
Participantes 4