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

springboot——汇总篇

 

博主本身不擅长前端,最近在做项目的时候需要整合freemarker模板,在此过程中碰到一些坑,故做记录

 

博主此处使用的springboot版本如下

2.0.5.RELEASE

项目结构

static下面放置js,css,images等静态文件

templates下放置页面模板

springboot干货——(二十一)整合freemarker_第1张图片

 

依赖


	    
	        org.springframework.boot
	        spring-boot-starter-freemarker
	     

 

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





jQuery特效百度搜索









 您的浏览器不支持canvas标签,请您更换浏览器 

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");
	    }
}

 

验证结果

成功

springboot干货——(二十一)整合freemarker_第2张图片

 

 

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

springboot干货——(二十一)整合freemarker_第3张图片

 

你可能感兴趣的:(Spring,Boot,Springboot干货系列)