我正在开发spring boot 2 thymeleaf web应用程序。我想从jar文件中呈现一个模板及其静态资源。js、CSS和消息出现404错误。属性文件,而模板正在浏览器上渲染,但相关的js、css没有。为了从jar文件呈现模板,我配置了ClassLoaderTemplateResolver,如下所述:
@Bean
public ClassLoaderTemplateResolver secondaryTemplateResolver() throws IOException {
ClassLoaderTemplateResolver secondaryTemplateResolver = new
ClassLoaderTemplateResolver(getCustomeClassLoader());
secondaryTemplateResolver.setPrefix("mytemplates/");
secondaryTemplateResolver.setSuffix(".html");
secondaryTemplateResolver.setTemplateMode(TemplateMode.HTML);
secondaryTemplateResolver.setCharacterEncoding("UTF-8");
secondaryTemplateResolver.setOrder(2);
secondaryTemplateResolver.setCheckExistence(true);
return secondaryTemplateResolver;
}
其中getCustomClassloader()将返回加载我的测试的URLclassloader实例。jar文件(当前类的类加载器作为父类加载器传递)。这个jar文件包含所有我的模板(html文件)静态文件(JS、CSS、属性)。下面是jar文件的结构:
test.jar
|
|- mytemplates -> myhtml.html
|- static
|- js ->my.js
|- css ->my.js
|- i18N -> message.properties
看起来spring boot或thymeleaf无法从类加载器/jar文件中找到可以找到模板的资源。你能帮我解决这个问题吗?如何让spring boot thymeleaf查看特定的类加载器以找到静态资源?
我已经尝试设置ClassLoaderTemplateResources,但它入侵。
@Bean
public ClassLoaderTemplateResource secondaryResouceResolver() throws IOException
{
ClassLoaderTemplateResource secondaryResoucreResolver = new ClassLoaderTemplateResource(getCustomeClassLoader(),
"static/", "UTF-8");
return secondaryResoucreResolver;
}
如果我正确理解了您的需求,那么就不需要编写此代码。开始吧。Springio并让工具创建构建文件(maven或gradle),然后选择JAR类型。将文件放在工具创建的关联文件夹中。然后从IDE启动它。
我找不到任何可以使用jar文件或类加载器指向外部静态资源的机制。因此,为了从不在类路径中的jar文件中指向静态资源(Js/css)和消息文件,您需要覆盖一些Spring启动默认配置。首先,您需要提取某个文件夹中的jar文件,然后您需要覆盖WebMvcConfigrer接口的addResourceHandler()方法,如下所示:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry
.addResourceHandler("js/**") /*This must be relative request url for js*/
.addResourceLocations("file:/C:/MyStuff/jarfolder/js/")
.setCachePeriod(3600)
.resourceChain(true)
.addResolver(new PathResourceResolver());
registry
.addResourceHandler("css/**")/*This must be relative request url for css*/
.addResourceLocations("file:/C:/MyStuff/jarfolder/css/")
.setCachePeriod(3600)
.resourceChain(true)
.addResolver(new PathResourceResolver());
}
以便从jar文件引用消息源,而不是在类路径中。您需要提取它,然后提供它的路径,如下所示:
@Bean
public MessageSource messageSource() throws IOException
{
ReloadableResourceBundleMessageSource messageSource =
new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.addBasenames("classpath:i18n/messages");
messageSource.addBasenames("file:/C:/MyStuff/jarfolder/messages");
return messageSource;
}
这将有助于从外部来源获取静态资源和消息源。如果有人知道更好的解决方案,请在此处留下您的评论。
我有以下bean配置 以下函数用于发送解析模板和发送电子邮件。 但这会给出一个FileNotFound异常。
当我使用Spring Boot1.4.0+Thymeleaf时,我发现静态资源无法访问,并抛出错误“模板可能不存在或任何配置的模板解析器都无法访问”。 关于我的静态资源的文件夹结构 浏览器显示500错误
我使用spring为我的项目,我排除了所有模板文件到另一个“HTML项目”。我这样做是因为我可以在没有任何重新部署的情况下进行更改,而且对我来说,它的方式更加清晰。它工作良好,spring应用程序找到所有模板。但现在,模板找不到任何css或js文件。模板试图搜索我的spring项目中的文件,但它们包含在html项目中。我该怎么修好它?我想我需要一条相对路径。 项目 SpringApp -----l
我有一个使用thymeleaf的Spring启动程序。网页加载。但是网页找不到我的css文件。我看到以下由Spring启动记录。网页加载了这个url:http://localhost:9090/lotto/rawdataocc. GET /lotto/lotto.css没有映射 CSS文件位于resources/static目录下 Thymleleaf模板在模板目录下。
问题内容: 如何使用诸如Velocity或FreeMarker之类的模板引擎构造电子邮件正文来实现i18n? 通常,人们倾向于创建如下模板: 并创建具有以下属性的资源包: 这就产生了一个基本的问题:如果我的文件很大,包含很多行文本,那么在单独的资源包()文件中翻译和管理每个文件就变得很麻烦。 我想做的是,为每种语言创建一个单独的文件,类似,然后以某种方式告诉Velocity / Spring根据输
我正在使用库贝css框架(https://imperavi.com/kube/css/buttons/)。但是我不能在我的项目中实现这个框架。 当我尝试这样使用按钮时,会出现以下异常: 与元素类型“button”关联的属性名“small”后面必须跟“=”字符 这个按钮有小的和轮廓的属性吗。