版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gwd1154978352/article/details/83149518
博主本身不擅长前端,最近在做项目的时候需要整合freemarker模板,在此过程中碰到一些坑,故做记录
博主此处使用的springboot版本如下
<version>2.0.5.RELEASE</version>
项目结构
static下面放置js,css,images等静态文件
templates下放置页面模板
依赖
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
application.properties中添加配置
# FREEMARKER (FreeMarkerAutoConfiguration)
spring.freemarker.allow-request-override=false
spring.freemarker.allow-session-override=false
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.enabled=true
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.prefer-file-system-access=true
spring.freemarker.suffix=.ftl
#设定ftl文件路径
spring.freemarker.template-loader-path=classpath:/templates
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true
spring.freemarker.order=1
#设定静态文件路径,js,css等
#遗憾的是按照网上说的加上下面这个,依旧是访问不了
#spring.mvc.static-path-pattern=/static/**
# 修改默认的静态寻址资源目录 多个使用逗号分隔
#spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
创建ftl模板
在src/main/resources/templates/searchBook下创建对应文件index.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jQuery特效百度搜索</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
overflow: hidden;
}
</style>
<link href="/static/searchBook/css/font.css" rel="stylesheet">
<link rel="stylesheet" href="/static/searchBook/css/style.css">
<link rel="stylesheet" href="/static/searchBook/css/style-search.css" media="screen" type="text/css" />
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script>
function c(){
//location.href="http://localhost:8080/XXX/XXX?bookName="+$("#input").val();
location.href="http://XXX.XXX.XXX/XXX/XXX?bookName="+$("#input").val();
}
</script>
</head>
<body>
<canvas id="canvas" width="1280" height="1024"> 您的浏览器不支持canvas标签,请您更换浏览器 </canvas>
<script src="/static/searchBook/js/word.js"></script>
<p id="offscreen-text" class="offscreen-text"></p>
<p id="text" class="text"></p>
<div id="d" class="webdesigntuts-workshop"> <span>
<input class="input" id="input" type="search" placeholder="请输入您要搜索的内容"/>
<button onclick="c();">搜索</button>
</span> </div>
<script src='/static/searchBook/js/index.js'></script>
</body>
</html>
Controller
@Controller
@RequestMapping("/book")
public class BookController {
Logger logger=LoggerFactory.getLogger(BookController.class);
@Autowired
SearchBookService searchBookService;
@RequestMapping("/toSearchBook")
public String toSearchBook() {
return "/searchBook/index";
}
}
一般情况下,按照如上所说在配置文件中配置好了spring.mvc.static-path-pattern=/static/**后应该是能够访问静态文件的,然而不幸的是,依旧无法访问js,css等静态文件。
继续如下
创建拦截器
注意要加注解
package com.gwd.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* Description:
* 作者:gu.weidong(Jack)
* date:2018年10月18日
* ProjectName:core
*/
@Component
public class BaseInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println(">>>MyInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println(">>>MyInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println(">>>MyInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
return true;// 只有返回true才会继续向下执行,返回false取消当前请求
}
}
创建WebMvcConfig
注意要被扫描到
package com.gwd.config;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.gwd.interceptor.BaseInterceptor;
/**
* Description:
* 作者:gu.weidong(Jack)
* date:2018年10月18日
* ProjectName:core
*/
@Component
public class WebMvcConfig implements WebMvcConfigurer{
@Resource
private BaseInterceptor baseInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(baseInterceptor)
//需要配置2:----------- 告知拦截器:/static/admin/** 与 /static/user/** 不需要拦截 (配置的是 路径)
.excludePathPatterns("/static/**");
}
/**
* 添加静态资源文件,外部可以直接访问地址
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//需要配置1:----------- 需要告知系统,这是要被当成静态文件的!
//第一个方法设置访问路径前缀,第二个方法设置资源路径
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//设置映射页面
registry.addViewController("/book").setViewName("/searchBook/index");
}
}
验证结果
成功
如有疑问可关注微信公众号进行提问,博主看到后会第一时间回复