Printemps de Démarrage app pas de servir du contenu statique
Je suis à l'aide de Spring Boot, et suis en train de faire mes ressources statiques (CSS, JS, des Polices) disponible lorsqu'il est déployé. Le code source est disponible pour vous de regarder ou de clone de https://github.com/joecracko/StaticResourceError.
Maintenant mon CSS, JS, et les fichiers de Police ne sont pas visibles sur mon site web déployé.
Voici ma structure de répertoire du projet:
Ici est le répertoire racine de la compilation des JAR: je vous assure que les fichiers sont présents dans leurs dossiers respectifs.
Ici est le réseau d'erreur que je vois:
Et voici mes sources fournies par chrome outils. Notez que la barre.css s'affiche vide ici. Vous pouvez regarder mon code source pour voir qu'il n'est pas vide.
Voici mon homepage.html
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
<!-- Main Styles -->
<link rel="stylesheet" href="/css/bar.css" />
<script src="/js/foo.js"></script>
</head>
<body>
<div>Welcome to Foo!</div>
</body>
</html>
Voici mon Web App Initialiseur (FooWebAppInitializer.java)
public class FooWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(ServletConfig.class);
//Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
//Spring Security
container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain"))
.addMappingForUrlPatterns(null, false, "/*");
//Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcherServlet", new DispatcherServlet(rootContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/*");
dispatcher.addMapping("*.css");
dispatcher.addMapping("*.eot");
dispatcher.addMapping("*.svg");
dispatcher.addMapping("*.ttf");
dispatcher.addMapping("*.woff");
dispatcher.addMapping("*.map");
dispatcher.addMapping("*.js");
dispatcher.addMapping("*.ico");
}
}
Voici ma Servlet de Configuration (ServletConfig.java)
@Configuration
@EnableWebMvc
@ComponentScan({"com.foo"})
public class ServletConfig extends WebMvcAutoConfiguration{
@Bean
MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("messages");
return source;
}
}
Et pour les coups de pied, Ma source de Sécurité Config (WebSecurityConfig.java)
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().permitAll();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**"); //#3
}
}
OriginalL'auteur John Douglas George | 2015-03-20
Vous devez vous connecter pour publier un commentaire.
Mettre ressources statiques sous le répertoire:
Vous pouvez également utiliser
public
ouresources
au lieu destatic
comme nom de dossier.Explication: votre outil build (Maven ou Gradle) permet de copier tous le contenu de
/src/main/resources/
dans l'application classpath et, comme écrit dans Printemps de Démarrage de docs, tout le contenu d'un répertoire appelé/static
(ou/public
ou/resources
) dans le classpath sera servi sous forme de contenu statique.Ce répertoire fonctionne aussi, mais c'est déconseillé:
oui, il suffit de le lire.. : -) voir ma mise à jour
Vous cloué! Mettre mes fichiers statiques dans src/main/resources/static/ a fonctionné comme un charme! Et c'est comment je me suis retrouvé leur référencement dans mon code html. <link href="/css/bar.css" /> <script src="/js/foo.js"></script> Notez qu'il n'existe pas de "statique" en face d'eux. Les points de Bonus si vous pouvez me dire POURQUOI cela fonctionne.
Ces deux réponses sont mauvaises. Vous serez susceptibles de rencontrer des problèmes avec le live de rafraîchissement. Mieux suivre le printemps de démarrage docs et incluent des ressources en vertu de l' /static (qui est à la racine de votre dossier de projet - pas dans votre répertoire src/main/resources dossier). Ensuite, vous serez en mesure de faire des changements dans chrome, de les enregistrer dans votre chrome espace de travail et voir les mises à jour en direct avec aucun redémarrage. En outre, si vous déployez comme un pot, maven habitude de ramasser des ressources /static dossier, afin de corriger cela, vous aurez envie de le lire /questions/27566967/no-mapping-found-for-http-request-with-uri-web-inf-pages-mainpage-jsp-in-disp/27567879#27567879
Merci de remarquer les problèmes possibles. Je comprends bien le problème avec le live de rafraîchissement et de la ici il y a des solutions. L'autre problème, vous l'avez souligné semble apparenté à mettre du contenu dans
/src/main/webapp
et de l'emballage de la demande comme un pot, mais ce dossier est déconseillé dans la réponse. Donc, en restant sur/src/main/resources/static
, il y a d'autres problèmes que nous n'avons d'autre que de vivre de rafraîchissement?OriginalL'auteur Andrea
Il y a 2 choses à prendre en considération (Printemps Boot v1.5.2.De presse)-
1) Vérifiez toutes les classes de Contrôleur pour @EnableWebMvc annotation, les supprimer si il n'y a aucune
2) Vérifiez que le Contrôleur des classes dont l'annotation est utilisée - @RestController ou @Contrôleur. Ne mélangez pas des API Rest et MVC comportement dans une classe. Pour MVC utiliser @Contrôleur et pour le REPOS de l'API utiliser @RestController
Faire au-dessus de 2 choses résolu mon problème. Maintenant, mon printemps de démarrage est en cours de chargement statique de ressources avec toutes les questions.
@Controller => load index.html => charge les fichiers statiques.
index.html
OriginalL'auteur gjp