前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >idea+springboot+freemarker+devtools

idea+springboot+freemarker+devtools

作者头像
问问计算机
发布2021-05-08 11:18:21
5620
发布2021-05-08 11:18:21
举报
文章被收录于专栏:问问计算机问问计算机

一整套技术栈,四个元素包括:idea、springboot、freemarker、devtools。

idea:开发工具

springboot:开发框架

freemarker:模板引擎

devtools:热部署组件

在使用spring boot创建mvc项目的时候,自然需要明确的是 m、v和c。

那么在view层如何使用controller和template中的模板关联上呢?

controller:

代码语言:javascript
复制
package com.cyd.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/test")
public class CJFXController {
    @RequestMapping("/index")
    public ModelAndView index(ModelAndView mv) {
        mv.setViewName("index");
        return mv;
    }
}

view层级关系:

代码语言:javascript
复制
resource
    template 
                index.html

紧接着需要解决的关键点是在index.html中对于css、js、以及图片等文件的引入,需要使用基本路径如下图这样:

配置拦截器:

代码语言:javascript
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Arrays;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Autowired
    PathInterceptor pathInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {     registry.addInterceptor(pathInterceptor).addPathPatterns("/**");
}
}

PathInterceptor

代码语言:javascript
复制
@Component
public class PathInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String path = request.getContextPath();
        String scheme = request.getScheme();
        String serverName = request.getServerName();
        int port = request.getServerPort();
        String basePath = scheme + "://" + serverName + ":" + port + path;
        request.setAttribute("basePath", basePath);//通过这种方式的拦截器的配置,才能够在html中使用basePath,否则就会导致模板报错,无法正常进行
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
    }

上面是从controller到view以及view中的静态文件引入的几个关键点。

但是如果你开始着手做这个流程的时候会发现,每次修改后都需要手动重启调试,这样过于浪费时间。那么我们就想办法配置自动运行的热部署环境。

①配置pom.xml

代码语言:javascript
复制
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <!-- optional=true,依赖不会往下传递,如果有项目依赖本项目,并且想要使用devtools,需要重新引入 -->
    <optional>true</optional>
    <scope>runtime</scope>
</dependency>

②配置自动编译项目

File->Settings->Build,Execution,Deployment->Complier->Build project automatically

③关键是registry的设置,有的同学找不到,下面告诉你这个东西它在哪儿?

设置完成 complier.automake.allow.when.app.running 后可以发现,修改project下的文件,保存后,对应的项目会自启动。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 changyandou 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档