Diferença do empacotamento JAR e WAR na configuração do JSF com Spring Boot
Diferença entre WAR e JAR
WAR (Web Application Archive)
- 
É um formato tradicional para aplicações web Java
 - 
Segue a especificação Java EE/Jakarta EE para estrutura de aplicações web
 - 
Precisa ser implantado em um servidor de aplicação (como Tomcat, JBoss, etc.)
 - 
Tem uma estrutura específica definida pela especificação Java EE:
webapp/ ├── WEB-INF/ │ ├── web.xml │ ├── classes/ │ ├── lib/ │ └── faces-config.xml ├── resources/ ├── pages/ └── index.xhtml 
JAR (Java Archive)
- Formato mais simples e auto-contido
 - Usado tradicionalmente para bibliotecas Java
 - No contexto do Spring Boot, pode conter uma aplicação web completa
 - Estrutura mais flexível, seguindo o padrão do Maven:
src/main/ ├── java/ ├── resources/ │ ├── META-INF/ │ │ └── resources/ │ ├── static/ │ └── templates/ 
Por que essa diferença?
No caso do WAR:
- A pasta 
webappé parte da especificação Java EE - O servidor de aplicação sabe exatamente onde procurar os recursos
 - O 
web.xmldefine a configuração da aplicação web - A estrutura é padronizada para qualquer servidor Java EE
 
No caso do JAR com Spring Boot:
- Spring Boot usa um servidor embarcado (geralmente Tomcat)
 - O Spring Boot segue a convenção de “recursos no classpath”
 META-INF/resourcesé um diretório especial reconhecido pela especificação do Servlet 3.0- Permite que recursos sejam servidos diretamente do classpath
 
Estrutura do JAR
src/
├── main/
│   ├── java/                    # Código fonte Java
│   │   └── com/empresa/
│   │       ├── config/          # Configurações do Spring/JSF
│   │       ├── controller/      # Managed Beans do JSF
│   │       ├── model/           # Classes de domínio
│   │       └── service/         # Lógica de negócio
│   │
│   └── resources/              # Recursos da aplicação
│       ├── META-INF/
│       │   └── resources/      # Arquivos web (xhtml, css, js)
│       │       ├── pages/      # Páginas JSF
│       │       └── templates/  # Templates Facelets
│       │
│       ├── static/            # Recursos estáticos (imagens, css, js)
│       └── application.yml    # Configurações do Spring Boot- 
META-INF/resources/:- É um diretório especial reconhecido pela especificação Servlet 3.0
 - Permite que recursos sejam acessados diretamente através da URL
 - Os arquivos aqui são tratados como recursos web públicos
 - O Spring Boot automaticamente mapeia este diretório para a raiz da aplicação web
 
 - 
static/:- Usado para conteúdo estático que não precisa ser processado
 - Arquivos CSS, JavaScript, imagens
 - Acessível diretamente pela URL sem passar pelo FacesServlet
 
 - 
templates/:- Contém templates Facelets
 - Não são acessíveis diretamente pela URL
 - Usados para composição de páginas
 
 
Como o Spring Boot gerencia isso
@Configuration
public class JSFConfig {
    // O Spring Boot automaticamente configura o FacesServlet
    // e mapeia os recursos em META-INF/resources
    
    @Bean
    public ServletRegistrationBean<FacesServlet> facesServlet() {
        ServletRegistrationBean<FacesServlet> servlet = 
            new ServletRegistrationBean<>(new FacesServlet(), "*.xhtml");
        servlet.setLoadOnStartup(1);
        return servlet;
    }
}Benefícios do formato JAR com Spring Boot
- Aplicação auto-contida
 - Não precisa de servidor de aplicação externo
 - Mais fácil de distribuir e executar
 - Melhor para arquiteturas de microserviços
 - Configuração mais simples
 - Deploy mais rápido
 
Fluxo de requisição:
Request -> Embedded Tomcat -> Spring Boot -> FacesServlet -> JSF Pages
                                        |
                                        └-> Static ResourcesEm resumo, a diferença na estrutura de diretórios entre JAR e WAR existe porque:
- WAR segue uma especificação mais antiga e rígida do Java EE
 - JAR com Spring Boot usa uma abordagem mais moderna baseada em convenções
 META-INF/resourcesé um meio padrão de incluir recursos web em JARs- Spring Boot automatiza muito da configuração que precisaria ser feita manualmente em um WAR