Bom dia,
Gostaria de saber como aplicar o Command Pattern no Servlet. Ainda não consegui entender direito como funcionaria na prática.
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.