jsp & thymeleaf 整合springboot 的雙模板
阿新 • • 發佈:2018-12-12
由於之前的系統寫了大量的jsp 要將模板升級到thymeleaf會造成工作繁瑣 所以整合成了雙模板 這裡對雙模板的整合做詳細記錄 一邊以後檢視。
一、專案結構
二、application.properties
三、java配置(展示檢視解析的配置)
/** * */ package cn.smarthse.admin.bootstrap; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.HashMap; import java.util.List; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServletRequest; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySources; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.DateSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import cn.smarthse.admin.interprecetor.HomeInteceptor; import cn.smarthse.admin.interprecetor.LogInterceptor; import cn.smarthse.modules.platform.core.framework.interceptor.repeatform.RepeatUrlFormInterceptor; import cn.smarthse.modules.platform.core.framework.mapper.JsonMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring4.view.ThymeleafView; import org.thymeleaf.spring4.view.ThymeleafViewResolver; /** * 《Web配置器》 */ @Component @Configuration @PropertySources({ @PropertySource("classpath:smarthsetech.properties"), @PropertySource("classpath:application.properties")}) public class WebConfiguration extends WebMvcConfigurationSupport implements ServletContextListener{ private Logger logger = LogManager.getLogger(this.getClass()); // #===============================# // #===== 檢視檔案配置 settings =====# // #===============================# @Value("${web.view.prefix}") private String web_view_prefix = "/WEB-INF/"; @Value("${web.view.suffix}") private String web_view_suffix = ".jsp"; @Value("${web.view.order}") private int web_view_order = 10; /** * thymeleaf配置 */ @Value("${spring.thymeleaf.encoding}") private String characterEncoding; @Value("${spring.thymeleaf.content-type}") private String contentType; @Value("${spring.thymeleaf.mode}") private String mode; @Value("${spring.thymeleaf.prefix}") private String prefix; @Value("${spring.thymeleaf.suffix}") private String suffix; public void addResourceHandlers(ResourceHandlerRegistry registry) { logger.info("配置 靜態資源訪問"); registry.addResourceHandler("/static/**").addResourceLocations("/static/").setCachePeriod(3600); registry.addResourceHandler("/upload/**").addResourceLocations("/upload/").setCachePeriod(3600); registry.addResourceHandler("/versionLog.txt").addResourceLocations("/versionLog.txt").setCachePeriod(3600); super.addResourceHandlers(registry); } /** * 配置jsp請求檢視對映 * @return */ @Bean public InternalResourceViewResolver resourceViewResolver() { logger.info("配置 InternalResourceViewResolver prefix:{},suffix:{}",web_view_prefix,web_view_suffix); InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); //請求檢視檔案的字首地址 internalResourceViewResolver.setPrefix(web_view_prefix); //請求檢視檔案的字尾 internalResourceViewResolver.setSuffix(web_view_suffix); internalResourceViewResolver.setOrder(web_view_order); internalResourceViewResolver.setViewClass(JstlView.class); internalResourceViewResolver.setViewNames("views/*"); return internalResourceViewResolver; } /** * 配置thymeleaf檢視 */ @Bean public SpringResourceTemplateResolver getTemplateResolver(){ //模板解析器 logger.info("配置ServletContextTemplateResolver,prefix:{},suffix:{}",prefix,suffix); SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setSuffix(suffix); templateResolver.setPrefix(prefix); templateResolver.setTemplateMode(mode); templateResolver.setCacheable(false); templateResolver.setCharacterEncoding(characterEncoding); templateResolver.setOrder(0); return templateResolver; } @Bean public SpringTemplateEngine getTemplateEngine(){ logger.info("配置SpringTemplateEngine"); SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(getTemplateResolver()); return templateEngine; } @Bean //Thymeleaf檢視解析器 public ThymeleafViewResolver getThymeleafViewResolver(){ logger.info("配置ThymeleafViewResolver"); ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(getTemplateEngine()); viewResolver.setViewClass(ThymeleafView.class); viewResolver.setContentType(contentType); viewResolver.setViewNames(new String[] {"thymeleaf/*"}); viewResolver.setCache(false); return viewResolver; } }
如圖所示,使用thymeleaf模板的html檔案我會放在resource/templates/thymeleaf下,jsp檔案我會放在webapp/WEB-INF/views/路徑下。
四、Controller
使用jsp模板:
@GetMapping(produces = "text/plain;charset=utf-8")
public String page_List(Model model) {
return "views/admin/sys/legal/legal_list";
}
使用thymeleaf模板:
@GetMapping(produces = "text/plain;charset=utf-8") public String page_List(Model model) { model.addAttribute("msg", "thymeleaf歡迎你"); return "thymeleaf/index"; }
五、靜態頁面及展示
jsp頁面及展示:
thymeleaf頁面及展示: