java 如何分离前端和后端机在Spring启动?

kdfy810k  于 2023-01-16  发布在  Java
关注(0)|答案(4)|浏览(170)

我想分开后端和前端(HTML页面)机器。后端将由Spring-Boot开发。如何将控制器中的视图返回到前端机器,而不是后端(Spring-Boot---〉Apache Tomacat)机器中的"资源/模板"?
例如:

@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";
    }

}

我想把"问候"视图在另一个服务器(前端)。

i2byvkas

i2byvkas1#

您没有透露您使用的是哪种模板技术(例如JSP、Thymeleaf ......),但无论哪种方式,Spring都需要将您的变量从模型注入HTML模板。
AFAIK,没有办法在一个JVM中托管视图,而控制器在另一个JVM中填充它。你可以将视图提取到单独的JAR中,但最终它需要托管在同一个Servlet容器中。
如果您希望真正分离客户机和服务器,请研究客户机上的模板(单页应用程序),并只使用 AJAX 从REST后端获取数据。

06odsfpq

06odsfpq2#

你可以启动两个服务器,一个用于后端,另一个用于前端。这两个服务器将通过REST调用进行通信。后端服务器将数据提供给前端服务器,前端服务器将收集数据并将其发送到前端服务器中的html模板。模板引擎集成将保存你完成工作的时间。Springboot与Thymeleaf有很好的集成,所以我建议你使用相同的。
原型做好后其实很简单,我做了frontendbackend分离的springboot应用程序的原型,这里使用的模板引擎是thymeleaf,数据库是mysql,语言是java,你可以去掉不需要的部分,开始你的工作!

nnsrf1az

nnsrf1az3#

您可能需要实现/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链接。

4dc9hkyq

4dc9hkyq4#

使用REST-Web-Service可以做到这一点,但Thymeleaf的目标不是作为前端应用程序单独工作。如果您绝对需要一个单独的前端应用程序,您应该使用任何现代的js框架,如Angular/React/Vue,并使用spring Boot for rest API。

相关问题