Como fazer a manutenção de arquivos HTML estáticos externos na Primavera Bota tomcat incorporado?

votos
8

Eu sou novo para framework Spring e Spring Bota.
Eu tenho implementado um muito simples aplicação web RESTful Primavera de inicialização.
Você pode ver o código fonte quase cheio em outra pergunta: Primavera Bota: Como externalizar configuração de fonte de dados JDBC?

Como pode o serviço de aplicativo HTML estática externa, arquivos css js?
Por exemplo, a estrutura de directórios pode ser como se segue:

MyApp\
   MyApp.jar (this is the Spring Boot app that services the static files below)
   static\
       index.htm
       images\
           logo.jpg
       js\
           main.js
           sub.js
       css\
           app.css
       part\
           main.htm
           sub.htm

Eu li o método para construir um arquivo .war que contém arquivos HTML estáticos, mas desde que requer reconstruir e reimplantar de arquivo WAR mesmo na modificação único arquivo HTML, esse método é inaceitável.

Uma resposta exata e concreta é preferível desde o meu conhecimento da Primavera é muito limitado.

Publicado 19/11/2013 em 06:56
fonte usuário
Em outras línguas...                            


3 respostas

votos
5

Eu vejo de outra de suas perguntas que o que você realmente quer é ser capaz de alterar o caminho para recursos estáticos em sua aplicação dos valores padrão. Deixando de lado a questão de por que você iria querer fazer isso, existem várias respostas possíveis.

  • Uma delas é que você pode fornecer um Spring MVC normais @Beando tipo WebMvcConfigurerAdaptere usar o addResourceHandlers()método para adicionar caminhos adicionais para recursos estáticos (ver WebMvcAutoConfigurationpara os padrões).
  • Outra abordagem é usar os ConfigurableEmbeddedServletContainerFactoryrecursos para definir o caminho servlet contexto raiz.
  • A "opção nuclear" completo para que é fornecer uma @Beandefinição do tipo EmbeddedServletContainerFactoryque criou o servlet container da maneira que você quer. Se você usar uma das implementações concretas existentes eles estendem a Abstract*classe que você já encontrou, por isso eles ainda têm um setter para uma propriedade chamada documentRoot. Você também pode fazer um monte de manipulações comuns usando um @Beando tipo EmbeddedServletContainerCustomizer.
Respondeu 20/11/2013 em 09:18
fonte usuário

votos
3

É suficiente se você especificar '-cp.' opção no comando 'java -jar blabla.jar' e no diretório atual é o diretório 'estática'

Respondeu 11/08/2014 em 14:17
fonte usuário

votos
0

Dê uma olhada esta implementação a resposta de Dave Syer.

Você pode definir o diretório raiz do documento que será usado pelo contexto web para servir arquivos estáticos usando ConfigurableEmbeddedServletContainer.setDocumentRoot(File documentRoot).

Exemplo de trabalho:

package com.example.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.io.File;
import java.nio.file.Paths;

@Configuration
public class WebConfigurer implements ServletContextInitializer, EmbeddedServletContainerCustomizer {
    private final Logger log = LoggerFactory.getLogger(WebConfigurer.class);

    private final Environment env;
    private static final String STATIC_ASSETS_FOLDER_PARAM = "static-assets-folder";
    private final String staticAssetsFolderPath;

    public WebConfigurer(Environment env, @Value("${" + STATIC_ASSETS_FOLDER_PARAM + ":}") String staticAssetsFolderPath) {
        this.env = env;
        this.staticAssetsFolderPath = staticAssetsFolderPath;
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        if (env.getActiveProfiles().length > 0) {
            log.info("Web application configuration, profiles: {}", (Object[]) env.getActiveProfiles());
        }
        log.info(STATIC_ASSETS_FOLDER_PARAM + ": '{}'", staticAssetsFolderPath);
    }

    private void customizeDocumentRoot(ConfigurableEmbeddedServletContainer container) {
        if (!StringUtils.isEmpty(staticAssetsFolderPath)) {
            File docRoot;
            if (staticAssetsFolderPath.startsWith(File.separator)) {
                docRoot = new File(staticAssetsFolderPath);
            } else {
                final String workPath = Paths.get(".").toUri().normalize().getPath();
                docRoot = new File(workPath + staticAssetsFolderPath);
            }
            if (docRoot.exists() && docRoot.isDirectory()) {
                log.info("Custom location is used for static assets, document root folder: {}",
                        docRoot.getAbsolutePath());
                container.setDocumentRoot(docRoot);
            } else {
                log.warn("Custom document root folder {} doesn't exist, custom location for static assets was not used.",
                        docRoot.getAbsolutePath());
            }
        }
    }

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        customizeDocumentRoot(container);
    }

}

Agora você pode personalizar seu aplicativo com linha de comando e perfis ( src\main\resources\application-myprofile.yml):

> java -jar demo-0.0.1-SNAPSHOT.jar --static-assets-folder="myfolder"
> java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=myprofile
Respondeu 11/04/2017 em 15:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more