GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Por que ninguem usa doDelete() da Servlet?

servlet
Tags: #<Tag:0x00007f725a838140>

#1

Por que ao inves de usar o doDelete() só vejo as pessoas usando isso aqui

<td><a href="servlet?action=delete&id=<c:out value="${objeto.id}"/>"><img src="img/botaoDeletar.png" /></a></td>


#2

Cada um faz o que quer, portanto que funcione pro usuário.


#3

por favor, uma dúvida, não relacionada… em qual momento que o servlet context é destruido no ciclo de vida de servlets?


#4

Boa tarde Douglas,

Exemplos de servlets de Framework:

1 Servlet JSF - Varios Managed Bean para as funcionalidades

<servlet>
     <servlet-name>Faces Servlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

1 Servlet Struts - Varias actions para as funcionalidades

<servlet>
     <servlet-name>action</servlet-name>
     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
     <servlet-name>action</servlet-name>
     <url-pattern>*.do</url-pattern>
</servlet-mapping>

Quando estamos estudando é apresentado bastante exemplos utilizando um servlet para representar uma funcionalidade, seguindo essa logica dos exemplos, teriamos N servlets na aplicação, mas isso não é o ideal.

Segue um exemplo de um curso que fiz que apresenta somente 1 servlet como controlador e outras classes que representa as tarefas (ações):

@WebServlet(urlPatterns = "/executa")
public class Controller extends HttpServlet {
    
    //...

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		String tarefa = request.getParameter("tarefa");
		
		if (tarefa == null)
			throw new IllegalArgumentException("A tarefa é necessaria!");
				
		try {
			String nomeDaClasse = "br.com.alura.gerenciador.web." + tarefa;
			Class<?> tipo = Class.forName(nomeDaClasse);
			Tarefa instancia = (Tarefa) tipo.newInstance();
			
			String resultado = instancia.executa(request, response);
			
			RequestDispatcher dispatcher = request.getRequestDispatcher(resultado);
			dispatcher.forward(request, response);
			
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}
	
}
public interface Tarefa {
	public String executa(HttpServletRequest request, HttpServletResponse response) throws ServletException;	
}
public class NovaEmpresa implements Tarefa {

	@Override
	public String executa(HttpServletRequest request,
			HttpServletResponse response) {
		
		String nome = request.getParameter("nome");
		Empresa empresa = new Empresa(nome);
		new EmpresaDAO().adiciona(empresa);
		
		request.setAttribute("empresa", empresa);
		return "/WEB-INF/paginas/novaEmpresa.jsp";
	}
	
}
<form action="executa" method="post">
			<input type="hidden" name="tarefa" value="NovaEmpresa">
			<table>
				<tr>
					<td>Nome:</td>
					<td><input type="text" name="nome"></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" value="Enviar"></td>
				</tr>
			</table>	
		</form>

Não sei se deu pra ter uma ideia ±

Espero que te ajude

Aqui tem o projeto que utilizei como exemplo: