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 Maven项目后,使用Freemarker步骤:
1. pom文件添加freemarker依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring‐boot‐starter‐freemarkerartifactId>
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文件所在位置,并修改对应模板文件加载路径
1. src/resources/templates/hello.ftl
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FREEMARKER PAGEtitle>
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. 浏览器访问
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=/**
src/resources/templates/freemarker/login.ftl
src/resources/static/css/login.css
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"]}
,即可获取。