Servlet com Command

Bom dia,

Gostaria de saber como aplicar o Command Pattern no Servlet. Ainda não consegui entender direito como funcionaria na prática.

Olá, o Padrão Command, define uma interface com um metodo execute(), desta forma:


public interface Command {
 public void execute();
}

Ai você teria Servlets que iriam implementar essa interface, algo como:

AdicionaUsuarioServlet implements Command(){

  public void execute(){
   //Aqui colocaria o codigo 
  // para adicionar um funcionario.
}
  
}
RemoveUsuarioServlet implements Command(){

  public void execute(){
   //Aqui colocaria o codigo 
  // para remover um funcionario.
}
  
}

Basicamente, é isso.

Valeu

Complementando o que o danielbussade falou, você precisará arrumar uma forma de passar parâmetros para o método execute(). Uma instância de java.util.Map<String, Object> é uma opção.

Acho q entendi sim!
Mas naum sei se eu to pensando alguma coisa q naum eh comum, mas eu queria algo do tipo N Views para um único Servlet utlizando o Command para distinguir qual a ação deverá ser executada.

Por exemplo:
Um CRUD de usuário. Eu pensei em algo como várias views e um único Servlet, um UsuarioServlet. Ai o Command seria usado no momento de distinguir se a ação.
Mas eu não consegui visualizar como eu poderia fazer isso.

Soh naum tenho certeza se isso faz sentido.

Olá, você poderia usar um Façade, como este:

public class GerenciadorUsuario(){

  public void adiciona(){
    //logica para adicionar
  }

  public void remove(){
    //logica para remover
  }

    public void atualiza(){
    //logica para atualizar
  }

}

Assim, você poderia usar o mesmo Servlet para várias views!

Segue um exemplo abaixo, existem muitos frameworks que faz isso e muito mais.

Não compilei, é só pra ter uma idéia.

Controller Principal

public class ControllerPrinciapl extends HttpServlets{

    //Substitua po um Properties e leia uma arquivo *.properties pra facilitar
    private Map mappings = null;

    public void init(ServletConfig config) throws ServletException{
        mappings = new HashMap();

        //Adicione
        mappings.put("Create", "br.com.exemplo.CreateCommand");
        mappings.put("Read", "br.com.exemplo.ReadCommand");
        mappings.put("Update", "br.com.exemplo.UpdateCommand");
        mappings.put("Delete", "br.com.exemplo.DeleteCommand");
        
    }

    public void doPost(...){

        //Vem da web, poder ser via queryString ou campo oculto
        String cmd = request.getParameter("cmd");
        String actionClass = mappings.get("cmd");

        try{
            Action action = Class.forName(actionClass).newStance();
        }catch(ClassNotFound cnf){

        }//Digite as outras exceções
    
        action.setRequest(request);
        acttion.setResponse(response);
        action.setServletContext(getServletContext());
        action.execute();

    }


}

Commands

public abstract class Command {

    private ServletContext context;

    private HttpServletRequest request;

    private HttpServletResponse response;

    //gets and sets

    public void setServletContext(ServletContext context){
        this.context = context;
    }

    public abstract void execute();

    public void forward(String forward){

        try{
            RequestDispatch rd = getRequest().getRequestDispatcher(forward);
            rd.forward(getRequest(), getResponse());
        }catch(....){

        }

    }

}
public class CreateCommand extends Command{

    public void execute(){
        //sua lógica
        forward("sua_pagina.jsp");
    }    

}
public class Delete extends Command{

    public void execute(){
        //sua lógica
        forward("sua_pagina.jsp");
    }    

}
public class UpdateCommand extends Command{

    public void execute(){
        //sua lógica
        forward("sua_pagina.jsp");
    }

}
public class Delete extends Command{

    public void execute(){
        //sua lógica
        forward("sua_pagina.jsp");
    }

}

Acho q compreendi ±!

Mas entaum acho q eh melhor eu concentrar meus esforços para tentar entender o funcionamento de algum framework, tipo Struts

Sim, com o tempo você começará a entender +/- como eles implementam/funcionam os frameworks.