Dúvida com MVC com selvlet e JSP

4 respostas
M

Boma tarde pessoal, esta é minha primeira mensagem neste fórumque ja me ajudou muito. Bom minha dúvida é sobre utiliar o modelo MVC para aplicações java EE. PAra melhorar vou explicar com um exemplo:
Tenho os seguintes arquivos:

Usuario.java (modelo do usuário, com atributos getters …)
UsuarioDAO.java (acesso ao banco de dados)
UsuarioCT.java (selvlet de controle)
cadastra.jsp (cadastra usuário)
lista.jsp (lista usuário)

bom a minha dúvida é a seguinte, as paginas cadastra e lista (minhas views) acessam o selvlet UsuarioCT(meu controller) que acessa o modelo usuário. (isto está certo?)
Bom mas é correto eu ter somente uma página de controle para cada modelo? eu acessar qualquer página com ações relativas aos usuários em um controller e ele decidir qual metodos chamar etc.
ou deveria ter um controller para cadastro, um para exclusão, um para listar etc…?
Começei a estudar java EE estes dias e algumas dúvidas infelizmente os livros não esclarecem…
Abraços

4 Respostas

Giulliano

MVC com Servlets ficam meio a desejar eu acho…mas é o que tem então vamos lá…

Seu primeiro controller acho q é o web.xml afinal é lá q ficam os mapeamentos das servlets…depois de decidido qual servlet irá receber seu form vc pode ter apenas um controller q recebe a ação e possua todos os métodos lá dentro…

não fica ruim assim e já é considerado um bom MVC. Embora existam outros modos…se vc esta começando acho q esse é o ideal pra vc.

Um Bean;

Uma Servlet divida se possível por negócios ou beans (Controle + Negócios)

Um DAO + Conexões

e suas JSPs
Pedrosa

Eu usaria no mesmo controller que represente esse objeto com um pouquinho de Reflection para não ter uma emaranhado de ifs:

public void gerenciaAcoes(HttpServletRequest request,HttpServletResponse response){
		try {
			Class<?> c = Class.forName("br.com.pedrosa.Classe");
			Classe a = (Classe) c.newInstance(); 
			Method method = a.getClass().getMethod(request.getParameter("acao"),HttpServletRequest.class, HttpServletResponse.class);
			method.invoke(a,new Object[]{request,response});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Onde acionaria direto os métodos:

public void inclui(HttpServletRequest request,HttpServletResponse response){}
public void altera(HttpServletRequest request,HttpServletResponse response){}
public void exclui(HttpServletRequest request,HttpServletResponse response){}
public void lista(HttpServletRequest request,HttpServletResponse response){}

De uma forma transparente acionaria os métodos

SuaServlet?acao=inclui
SuaServlet?acao=altera
...
Pedrosa

Quando quizer ganhar mais produtividade e simplicidade comece a usar um framework mvc para ajudar sua vida:
http://www.vraptor.org/pt/first-example.html

M

valeeu pessoal, outra dúvida:

as regras de negógio ficam no meu modelo ou em outra classe. por exemplo no modelo usuario tenho os metodos validaUsuario,CadastraUsuario etc…
abraços

Criado 27 de dezembro de 2007
Ultima resposta 27 de dez. de 2007
Respostas 4
Participantes 3