如何分离前端和前端Spring-boot中的后端机器?

时间:2015-10-10 17:27:38

标签: java spring spring-mvc spring-boot

我想分离后端和前端(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";
    }

}

我想将“问候”视图放在另一台服务器(前端)中。

3 个答案:

答案 0 :(得分:2)

您没有透露使用哪种模板技术(例如JSP,Thymeleaf,...),但无论哪种方式,Spring都需要将模型中的变量注入HTML模板。

AFAIK,无法在一个JVM中托管视图,并且无法在其他JVM上填充控制器。您可以将视图提取到单独的JAR中,但是在一天结束时它需要托管在同一个Servlet容器中。

如果要真正分离客户端和服务器,请在客户端(单页应用程序)上调查模板,并仅使用AJAX从REST后端获取数据。

答案 1 :(得分:2)

您可以启动两个服务器,一个用于后端,另一个用于前端。这两个将通过REST调用进行通信。后端服务器将数据提供给前端服务器,前端服务器将收集它并将其发送到前端服务器中的html模板。模板引擎集成可以节省您完成任务的时间。 Springboot与Thymeleaf有很好的集成,所以我建议你使用它。

准备好原型后,实际上非常简单。我已经为frontendbackend分离了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链接。