SpringBoot整合Freemarker

一、SpringBoot 项目常见目录结构

常见目录:
SpringBoot项目目录结构

1. 代码层(src/main/java)结构

根目录:com.wfxuni

  • 启动类(SpringBootStructureApplication.java)推荐放在根目录com.wfxuni包下;

  • 实体类:jpa项目com.wfxuni.domain,mybatis项目com.wfxuni.pojo/entity

  • 数据接口访问层(Dao):jpa项目com.wfxuni.repository,mybatis项目com.wfxuni.mapper

  • 数据服务接口层(Service):com.wfxuni.service

  • 数据服务实现层(Service Implements):com.wfxuni.service.impl

  • 前端控制器层(Controller):com.wfxuni.controller

  • 工具类库(utils):com.wfxuni.utils

  • 配置类(config):com.wfxuni.config

  • 数据传输对象(dto):com.wfxuni.dto,- - 数据传输对象(Data Transfer Object)用于封装多个实体类(domain)之间的关系,不破坏原有的实体类结构;

  • 视图包装对象(vo):com.wfxuni.vo,- - 视图包装对象(View Object)用于封装客户端请求的数据,防止部分数据泄露(如:管理员ID),保证数据安全,不破坏 原有的实体类结构。


2. 资源目录resources结构

  • 项目配置文件:resources/application.yml或者resources/application.properties

  • 静态资源目录:resources/static/,用于放置html、css、js和图片等静态资源,该目录下的所有文件可以被直接访问;

  • 视图模板目录:resources/templates/,用于存放freemarker、thymeleaf等模板文件;

  • mybatis映射文件:mybatis项目,resources/mapper/

  • mybatis配置文件:mybatis项目,resources/mapper/config/

补充:SpringBoot工程是没有webapp文件夹的,静态文件放在src/main/resources/static文件夹下,可以被直接访问,而模板文件放在src/main/resources/templates下,该文件夹没有被映射,模板文件无法直接访问。


二、SpringBoot使用Freemarker

创建一个基本的SpringBoot Maven项目后,使用Freemarker步骤:

1. pom文件添加freemarker依赖

<!-- freemarker 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐freemarker</artifactId>
</dependency>

2. 配置文件中添加配置

# 设置返回页面的后缀名,默认后缀名为.ftl,前提是加载了freemarker依赖
spring.freemarker.suffix=.ftl
# 设置模板文件加载路径,默认是/templates/
spring.freemarker.template-loader-path=classpath:/templates/

# 设置freemarker页面编码格式
spring.freemarker.charset=UTF-8
# 设置视图输出HTML的contentType
spring.freemarker.content-type=text/html

# 开放过程中关闭freemarker缓存方便调试
# 关闭freemarker页面缓存
spring.freemarker.cache=false
# 设置刷新模板的时间间隔
spring.freemarker.settings.template_update_delay=0

3. controller跳转到目标页面

@Controller
@RequestMapping("/to")
public class WelcomeController {

    @RequestMapping("/freemarker")
    public String toFreemarker(){
        return "welcome";
    }
}

注意freemarker文件所在位置,并修改对应模板文件加载路径
配置freemarker默认加载路径

4. 访问成功
浏览器访问成功

三、Controller层返回后台数据到Freemarker

1. src/resources/templates/hello.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FREEMARKER PAGE</title>
</head>
<body>

    <h2>Hello,${user.username},${user.address}好玩吗?</h2>

</body>
</html>

2. HelloController

@Controller
@RequestMapping("/to")
public class HelloController{

    @RequestMapping("/hello")
    public String toHelloFtl(ModelMap map) {

        User user = new User();
        user.setUsername("小李");
        user.setAddress("深圳");
        map.addAttribute("user", user);
        return "hello";
    }

    @RequestMapping("/hello2")
    public ModelAndView toHelloFtl2() {
        ModelAndView mv = new ModelAndView();
        User user = new User();
        user.setUsername("小薛");
        user.setAddress("北京");

        mv.addObject("user", user);
        mv.setViewName("hello");
        return mv;
    }

}

3. 浏览器访问

controller层返回数据到Freemarker

controller层返回数据到Freemarker

四、Freemarker加载静态资源

1. 配置资源映射

SpringBoot 默认配置的/**映射到/static 或 /public、/resources、/META-INF/resources)/webjars/**会映射到classpath:/META-INF/resources/webjars/,注意:/static等目录都是在classpath:下。

静态资源映射还有一个配置选项,为了简单这里用.properties方式书写:

spring.mvc.static-path-pattern=/** # Path pattern used for static resources.

这个配置会影响默认的/**,假如修改为/static/**后,只能映射如/static/js/sample.js这样的请求(修改前是/js/sample.js),此外这个配置只能写一个值,不像大多数可以配置多个用逗号隔开的。


2. 编写代码加载静态资源

.properties中不配置,则默认为spring.mvc.static-path-pattern=/**

  • freemarker页面路径:src/resources/templates/freemarker/login.ftl
  • 样式文件路径:src/resources/static/css/login.css

Freemarker页面加载静态资源
成功访问:
成功访问登录页面
如果配置文件改成:

spring.mvc.static-path-pattern=/static/** 

路径${base}/css/login.css要改为${base}/static/css/login.css


3. freemarker中获取项目根路径

.ftl文件头部加上:

<#assign base=springMacroRequestContext.contextPath />

引用:

<script src="${base}/js/demo.js" type=text/javascript"></script>

4. freemarker获取session

  • 实现多页面获取当前登录用户名
@RequestMapping("/")
public String showHome(HttpSession httpSession) {
    String name = SecurityContextHolder.getContext().getAuthentication().getName();
    // username存储到session中 前台根据 ${Session["username"]} 获取
    httpSession.setAttribute("username", name);
    return "main";
}

freemarker中用${Session["username"]},即可获取。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值