从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器

最近在做SSM整合freemarker的时候遇到许多的问题,在网络上搜罗的资料大部分源自复制粘贴,今天终于通过不断调试,把整体的freemarker视图解析器融入到了SSM框架中,本篇文章总结一下Springmvc配置freemarker视图解析器以及jsp与freemarker双视图解析器。从零开始,每一步都会贴出代码,希望能解决您的问题。

首先是我的配置环境:

idea2018+普通web项目+jdk1.8+tomcat8.5

注:这里可以使用maven项目搭建,这样会省去很大的一部分麻烦,这里我为了演示,故使用普通的项目来搭建。

声明:因为文章字数限制,这里只演示核心的配置与简单的测试,文章后边会有推荐其他博主的文章以帮助你更好的解决问题,如遇到其他问题可以在左侧侧边栏联系我。

 一、创建项目结构

这里需要说明一下:

本人使用的是普通的web项目,大家可以为了便捷的开发使用maven项目。

本人创建基本项目后导入文件产生的基本文件结构如下:

从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器_第1张图片从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器_第2张图片

下图中的jar包需要导入,两个标注箭头的jar很关键,经常就会忘记导入,导致各种报错。

从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器_第3张图片

maven的pom.xml配置:


  4.0.0
  xxxx
  xxx
  0.0.1-SNAPSHOT
  war

  
  
                  5.0.1.RELEASE
                  3.4.5
                  1.7.7
                  1.2.17
  

  
                  
                          junit
                          junit  
            4.11  
              
            test
                  

                    
          
            org.springframework  
            spring-core  
            ${spring.version}  
          

          
            org.springframework  
            spring-web  
            ${spring.version}  
          
          
            org.springframework  
            spring-oxm  
            ${spring.version}  
          
          
            org.springframework  
            spring-tx  
            ${spring.version}  
          

          
            org.springframework  
            spring-jdbc  
            ${spring.version}  
          

          
            org.springframework  
            spring-webmvc  
            ${spring.version}  
          
          
            org.springframework  
            spring-aop  
            ${spring.version}  
          

          
            org.springframework  
            spring-context-support  
            ${spring.version}  
          

          
            org.springframework  
            spring-test  
            ${spring.version}  
          
          
          
            org.mybatis  
            mybatis  
            ${mybatis.version}  
          
          
          
            org.mybatis  
            mybatis-spring  
            1.2.2  
          
          
          
            javax  
            javaee-api  
            7.0  
          
          
          
            mysql  
            mysql-connector-java  
            5.1.30  
          
          
          
            commons-dbcp  
            commons-dbcp  
            1.2.2  
          
          
          
            jstl  
            jstl  
            1.2  
          
          
          
          
            log4j  
            log4j  
            ${log4j.version}  
          

          
          
            com.alibaba  
            fastjson  
            1.1.41  
          

          
            org.slf4j  
            slf4j-api  
            ${slf4j.version}  
          

          
            org.slf4j  
            slf4j-log4j12  
            ${slf4j.version}  
          
          
          
          
            org.codehaus.jackson  
            jackson-mapper-asl  
            1.9.13  
         

          
          
            commons-fileupload  
            commons-fileupload  
            1.3.1  
          
          
            commons-io  
            commons-io  
            2.4  
          
          
            commons-codec  
            commons-codec  
            1.9  
          

                
                    org.aspectj
                    aspectjweaver
                    1.8.10
                

                
                    org.freemarker
                    freemarker
                    2.3.23
                

                
                    com.fasterxml.jackson.core
                    jackson-core
                    2.7.5
                

                
                    com.fasterxml.jackson.core
                    jackson-databind
                    2.7.5
                

                
                    com.fasterxml.jackson.core
                    jackson-annotations
                    2.7.5
                

  


 

二、核心配置

1、applicationContext.xml



    
	 
	

	
	
					
					
					
					
	
   
   
	
	
	
		
		
		
		
		
		
		
		
		
		
		
	
	
	
	
	
		
	
	
	
	
		
			
			
			
			
			
			
			
			
			
			
					
		
	
	
	
	
		
		
		
		
	

	
	
	
	
	
	
	
	
	
		
		
		
	
	

2、数据源配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bw_practice?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.username=root
jdbc.password=123456

注:本人这里使用的数据库连接驱动包版本为5.1.44,druid数据源包版本为1.0.15;数据库连接驱动包若高于等于8的,需要在连接的url后边加上时区(serverTimezone=Asia/Shanghai)等相关配置,否则会遇到数据库报错。

3、日志文件配置

log4j.rootLogger = ERROR,stdout

#MyBatis logging configuration...
log4j.logger.com.bw=TRACE
# Console output...
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{HH:mm:ss} %5p %c - %m%n

4、springMVC配置(重要)




    
    

    
    

    
    
    

    


    
    

    
    
        
        
        
    


    
    
        
    

    
    
        
        
        
            
                
            
        
    
    
    



    
    
        
        
        
        
        
        
        
        
        
        
        
        
    

        
    


我这里面打满了注释,大部分的配置都会有注释,若还有没有明白的,欢迎下方留言。

同时我在这里提供一份比较干净整洁的双解析器模板:





    
    
    
    

    
    
    

    

    
    
        
        
        
        
    

    
    
        
        
        
        
        
    

    
    
        
        
        
            
                
            
        
        
            
                3600
            
        
    
    

注:在实际开发中单解析器一般都无法满足实际需要,所以双解析器经常是一般配置;若只需要其中一个,就不用提示了吧。

 5、web.xml配置




    
    
        default
        *.js
        *.css
        /img/*
        /fonts/*
        /font/*
    

    
        org.springframework.web.context.ContextLoaderListener
    

    
        spMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath*:springMVC.xml
        
        1
    
    
        spMVC
        /
    
    
        charset
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        charset
        /*
    
    
        contextConfigLocation
        classpath*:applicationContext*.xml
    

 

6、其他配置

关于mybatis的mapper文件(省略)。

config与ehcache的配置:







    
    
        
        
        
        
        
        
    


    
    
        
    


    
    
	
	
	
	
	
	
    

	 



mybatis的延迟加载配置也能配置在spring中,但是那样子做不是很推荐。

 

三、测试

1、创建视图层与控制层

视图层结构:

从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器_第4张图片

controller:

package com.cc.controller;

import com.cc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
public class UserController {
    @Autowired
    private UserService service;

    @RequestMapping("/index")
    public String index(Map map){
        map.put("name","张三");
        return "index";//index.ftl
    }

    @RequestMapping("/list")
    public String list(Map map){
        map.put("name","张三");
        return "list";//list.jsp
    }
}

页面的话随便写一下够测试使用就可以了。查看是否能够正确的解析视图。

总结:

这里全是干货哦:

1、问题总结

①:jar缺失问题:

Caused by: 
java.lang.NoClassDefFoundError: org/springframework/ui/freemarker/FreeMarkerConfigurationFactory

这个是由于jar包的问题导致的,查看是否缺失我在文章开头部分的jar,第二个原因可能就是jar冲突的问题,更换某些jar版本尝试,也可以在下方留言。

②:视图解析404,页面调试提示:“HTML 文档的字符编码未声明。如果该文件包含 US-ASCII 范围之外的字符,该文件将在某些浏览器配置中呈现为乱码。页面的字符编码必须在文档或传输协议层声明。”

在页面头部加入以下的声明:




③: 不解析ftl或htm,错误解析jsp(只用jsp视图解析)

这个一定是配置时马虎大意导致的,可以对照前文认真检查。本人在配置ftl的后缀格式时写为了:*.ftl,倒至无法解析ftl,修改为 .ftl后恢复正常解析。

2、注意事项

1.在视图解析器中有一个的配置,这个配置表示解析器的优先级别。我们将FreeMarkerViewResolver的级别设为0,将InternalResourceViewResolver的级别设为1。这样,解析器就会优先使用 FreeMarkerViewResolver 进行解析,如果找不到相应的模板,就使用InternalResourceViewResolver进行解析,如果还找不到页面,就会产生一个404错误!
2.InternalResourceViewResolver比较特殊的,只要视图名传给他,都不会再交给下一个order,而是直接forward,所以他的order应该最大,否则后面的视图解析器都不能有机会处理。 

3、相关有价值的文章推荐:

搭建最基本的Spring+Spring MVC+MyBatis+freemarker整合框架https://www.52pojie.cn/thread-691159-1-1.html

freemarker、jsp多视图解析器Spring配置https://blog.csdn.net/qq_34021712/article/details/71147364

赠送一图:图片较大,推荐打开一个新的页面或下载进行查看

从零开始搭建SSM框架整合freemarker加入html(ftl)与JSP双视图解析器_第5张图片

感谢大家的批评与建议,感谢能够帮助到您。

你可能感兴趣的:(Web学习笔录)