我想分离后端和前端(HTML页面)机器。后端将由Spring-Boot开发。如何在后端(Spring-Boot ---> Apache Tomacat)机器中将控制器中的View返回到前端机器而不是“资源/模板”?
例如:
@Controller
public class GreetingController {
@RequestMapping("/greeting")
public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
我想将“问候”视图放在另一台服务器(前端)中。
答案 0 :(得分:2)
您没有透露使用哪种模板技术(例如JSP,Thymeleaf,...),但无论哪种方式,Spring都需要将模型中的变量注入HTML模板。
AFAIK,无法在一个JVM中托管视图,并且无法在其他JVM上填充控制器。您可以将视图提取到单独的JAR中,但是在一天结束时它需要托管在同一个Servlet容器中。
如果要真正分离客户端和服务器,请在客户端(单页应用程序)上调查模板,并仅使用AJAX从REST后端获取数据。
答案 1 :(得分:2)
您可以启动两个服务器,一个用于后端,另一个用于前端。这两个将通过REST调用进行通信。后端服务器将数据提供给前端服务器,前端服务器将收集它并将其发送到前端服务器中的html模板。模板引擎集成可以节省您完成任务的时间。 Springboot与Thymeleaf有很好的集成,所以我建议你使用它。
准备好原型后,实际上非常简单。我已经为frontend和backend分离了springboot应用程序制作了原型。这里使用的模板引擎是thymeleaf,数据库是mysql,语言是java。您可以删除不需要的部分,然后开始工作!
答案 2 :(得分:0)
您可能需要实现一个WebMvcConfigurerAdapter
接口。
这是一个代码示例:
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Value("${spring.thymeleaf.prefix}")
private String thymeleafTemplatePath;
@Value("${node_modules.path}")
private String nodeModulesPath;
public void addResourceHandlers(ResourceHandlerRegistry registry){
if (thymeleafTemplatePath != null && !thymeleafTemplatePath.isEmpty()){
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**")
.addResourceLocations(thymeleafTemplatePath);
}
}
if (nodeModulesPath != null && !nodeModulesPath.isEmpty()){
if (!registry.hasMappingForPattern("/node_modules/**")) {
registry.addResourceHandler("/node_modules/**")
.addResourceLocations(nodeModulesPath);
}
}
}
}
以下代码用于属性文件中的配置变量。
此示例具有Windows文件路径模式。您可能需要更改环境的模式。
spring.thymeleaf.prefix=file:///C:/Users/young.k.jun/workspaces/separated-front-end/front-end/src/
node_modules.path=file:///C:/Users/young.k.jun/workspaces/separated-front-end/front-end/node_modules/
我制作了一个示例项目来分离前端和后端工作区,以免与他们的工作目录冲突。
请参阅this link。您可以在该页面上找到GitHub链接。