Olá Marcos, tudo bem? Eu particularmente não utilizo o Struts, mas vou tentar ajudar da melhor forma possível! Bem como mostra a imagem abaixo:
O ponto de entrada para acessar a partir do cliente é o ActionServlet
que por padrão fica registrado no web.xml da aplicação, e então o ActionServlet
utiliza o arquivo struts-config.xml
para fazer o mapeamento das rotas de entrada do objeto Action
que é o que recebemos do cliente, e esse Action
também nos permite criar objetos do tipo ActionForm
que é onde ficam temporariamente armazenados os dados do formulário, e o próprio objeto Action
processa a solicitação por meio do método execute
usando os dados do objeto ActionForm
ou Bean
do formulário e após a conclusão ele armazena novamente os dados no Bean
ou em outro novo Bean
e por fim ele encaminha os dadoa para a view
indicada.
Respondendo suas dúvidas:
1 - Sim, nesse framework o controller são os objetos do tipo Action, mas o mapeamento das rotas é feito apenas dentro do arquivo struts-config.xml;
2 - Nesse caso depende, você ainda pode implementar esses dois tipos de classes para fazer essa função, no esquema que comentei acima não fala sobre Service ou DAO, apenas que o Action processa a requisição, e ai você pode colocar tudo nele (o que não recomendo) ou então criar outros objetos responsáveis para essas funções.
3 - Não, as classes ou objetos DAO são da camada de acesso ao banco de dados, como o próprio nome indica (Data Access Object - DAO);
4 - Depende, poderíamos dizer que sim, mas as boas práticas e padrões de projetos indicam para não fazermos dessa forma, já que o formBean
vem com os dados da requisição e voltam com os dados também seria interessante eles serem utilizados apenas para esse fluxo e os modelos serem outras classes, isso também deixa o código mais desacoplado e vai facilitar a manutenção;
5 - Segue a mesma linha da resposta anterior (4), na minha visão não é interessante sejam os modelos, mas nada impede que na sua aplicação sejam da camada de modelo, nos projetos mais atuais eles estão mais para classes tipo DTO - Data Transfer Object, que são apenas para transferência dos dados do objeto.
Espero ter ajudado!