springboot干货——(二十一)整合freemarker

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gwd1154978352/article/details/83149518

springboot——汇总篇

博主本身不擅长前端,最近在做项目的时候需要整合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");
	    }
}

验证结果

成功

如有疑问可关注微信公众号进行提问,博主看到后会第一时间回复

猜你喜欢

转载自blog.csdn.net/gwd1154978352/article/details/83149518