《转》Spring4 Freemarker框架搭建学习
这里原帖地址:http://www.cnblogs.com/porcoGT/p/4537064.html
完整配置springmvc4,最终视图选择的是html,非静态文件。
最近自己配置spring的时候,遇到很多问题,由于开发环境和版本的变化导致网友们给出的建议很多还是不能用的,可能还会有很多人会遇到和我一样的问题,希望能帮到遇到困难的人。
环境:jdk8,spring4.2.0,tomcat8,使用idea14编辑器,maven管理,git版本控制器,项目远程库地址github:https://github.com/627135316/on_line。
基本的环境搭建就不啰嗦了,这个网上资料一般还是很全的。下面会介绍很多细节的东西,都是我自己搭建环境的时候遇到的头疼的问题,主要是第一次自己搭建,没有经验。不要笑哈。我就直接贴代码出来吧。关于maven的信息我放在了最后面,因为可能有的包你们并不需要
这个是本次项目的文件目录。
  
接下来进入大名鼎鼎的web.xml。网上的配置大同小异。目录下我优先配置的spring的监听器——ContextLoaderListener,这个类我之前是在该文件的servlet标签下方配置的,但是一直报错,试了很多方法都不行。有人说监听器类的配置是为了能让controller拦截到url地址请求,其实没有的事,我不配置监听的时候controller照样可以进去。web.xml里还配置另外两个xml文件,接下来就进入他们吧
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xmlversion="1.0" encoding="UTF-8"?>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <!-- 加载Spring容器配置,配置监听器 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- 设置Spring容器加载配置文件路径 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/config/applicationContext.xml</param-value>    </context-param>    <servlet>        <servlet-name>spring</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>/WEB-INF/spring-servlet.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>spring</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app> | 
接下来是applicationContext.xml。这里是对freemarker的基本配置,没有错,我们就是使用freemarker作为html解析器的。网上很多人都是org.springframework.web.servlet.view.InternalResourceViewResolver这个类,它只能解析jsp,并且它的配置非常简单。需要注意的是我优先在applicationContext里配置了FreeMarkerConfigurer 这个类,很多文章都是没有配置它的,这个类不配置也会报错,而且这个类必须优先在FreeMarkerViewResolver 之前置 ,关于FreeMarkerViewResolver 会在下面介绍。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xmlversion="1.0" encoding="UTF-8"?>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans    <beanid="freemarkerConfig"          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        <propertyname="templateLoaderPath" value="/WEB-INF/views/" />        <propertyname="freemarkerSettings">            <props>                <propkey="template_update_delay">0</prop>                <propkey="default_encoding">UTF-8</prop>                <propkey="number_format">0.##########</prop>                <propkey="datetime_format">yyyy-MM-dd HH:mm:ss</prop>                <propkey="classic_compatible">true</prop>                <propkey="template_exception_handler">ignore</prop>            </props>        </property>    </bean></beans> | 
接着是spring-servlet.xml。大家直接看注释吧,我已经在注释里写的很详细了。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?xmlversion="1.0" encoding="UTF-8"?>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"       xmlns:task="http://www.springframework.org/schema/task" xmlns:cache="http://www.springframework.org/schema/cache"       xmlns:p="http://www.springframework.org/schema/p"       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <!--<context:annotation-config />-->    <!-- 把标记了@Controller注解的类转换为bean -->    <context:component-scanbase-package="controller" />    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->    <beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />    <!-- 设置freeMarker的配置文件路径 -->    <beanid="freemarkerConfiguration"          class="org.springframework.beans.factory.config.PropertiesFactoryBean">        <!--注释掉的下方代码是指引freemarker的基本信息的配置位置,因为我已经将配置信息移到了applicationContext文件下,所以这里就没必要存在了,不注释也不会有问题的 -->        <!--<property name="location" value="classpath:/WEB-INF/config/freemarker.properties" />-->    </bean>    <beanid="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">        <propertyname="exposeRequestAttributes" value="true" />        <propertyname="exposeSessionAttributes" value="true" />        <propertyname="viewClass">            <value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>        </property>        <propertyname="cache"><value>true</value></property>        <!--这里需要注意一下,我注释了下面这样一行代码,这行代码的意思就是指引freemarker需要解析的文件的位置。注释掉原因是因为         applicationContext.xml里有这样一行代码:<property name="templateLoaderPath" value="/WEB-INF/views/" /> 已经指定了视图位置。如果我们这里依然保留下方代码,页面回报406的找不到的错误 -->        <!--<property name="prefix"><value>/WEB-INF/views/</value></property>-->        <propertyname="suffix"><value>.html</value></property>        <propertyname="contentType">            <value>text/html; charset=UTF-8</value>        </property>    </bean>    <!--这里为可选项-->    <beanid="multipartResolver"          class="org.springframework.web.multipart.commons.CommonsMultipartResolver"          p:defaultEncoding="utf-8" /></beans> | 
下面是我的maven的配置信息,大家可根据需要选择。不过基本就保留这些吧。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | <dependencies>        <!--spring4  begin-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>            <!--<version>${org.springframework-version}</version>-->        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-oxm</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>4.2.0.BUILD-SNAPSHOT</version>        </dependency>        <!--spring  end-->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>3.8.1</version>            <scope>test</scope>        </dependency>        <!--  log4j  -->        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency>        <!-- servlet api -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.0.1</version>            <scope>provided</scope>        </dependency>        <!-- start apache -->        <dependency>            <groupId>commons-logging</groupId>            <artifactId>commons-logging</artifactId>            <version>1.1.3</version>        </dependency>        <dependency>            <groupId>commons-collections</groupId>            <artifactId>commons-collections</artifactId>            <version>3.2.1</version>        </dependency>        <dependency>            <groupId>commons-fileupload</groupId>            <artifactId>commons-fileupload</artifactId>            <version>1.3</version>        </dependency>        <!-- end apache -->        <dependency>            <groupId>org.freemarker</groupId>            <artifactId>freemarker</artifactId>            <version>2.3.22</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>4.1.6.RELEASE</version>        </dependency> | 
大家需要注意这一段maven信息,之前我也是没有配置,结果greemarker一直报org.springframework.ui.freemarker.FreeMarkerConfigurationFactory这个类找不到,原因就是因为FreeMarkerConfigurationFactory这个类实际是在下面的包里的。感觉中了彩蛋。
| 1 2 3 4 5 | <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>4.1.6.RELEASE</version>    </dependency> | 
controller:只做了一步跳转的工作。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | packagecontroller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.servlet.ModelAndView;/** * Created by Porco on 2015/5/21 0021. */@RestControllerpublicclassLoginController {    @RequestMapping("/login")    publicModelAndView login(){        returnnewModelAndView("login");    }} | 
html:
| 1 2 3 4 5 6 7 8 9 10 | <!DOCTYPEhtml><html><headlang="en">    <metacharset="UTF-8">    <title>welcome Porco</title></head><body><h1>welcome Porco zhang</h1></body></html> | 
  最终启动项目,运行结果:
《转》Spring4 Freemarker框架搭建学习的更多相关文章
- 一周一话题之一(EF-CodeFirst、MEF、T4框架搭建学习)
		本话题是根据郭明峰博客<MVC实用架构系列>的搭建学习总结. -->目录导航 一.数据仓储访问的构建 1.UnitOfWork的构建 2.Repository的构建 ... 
- mybatis框架搭建学习初步
		mybatis框架搭建步骤:1. 拷贝jar到lib目录下,而且添加到工程中2. 创建mybatis-config.xml文件,配置数据库连接信息 <environments default=& ... 
- springMVC4+spring4+hibernate4框架搭建
		最近项目不是很忙,整理了一个springMVC框架给大家分享下,框架结构:springMVC4+spring4+hibernate4,主要是spring配置.springmvc配置.hibernate ... 
- struts2框架搭建学习遇到的问题
		遇到的两个问题 1Dispatcher initialization failed: 严重: Dispatcher initialization failed java.lang.RuntimeExc ... 
- 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建
		概述 从0到1教你搭建spring+springMVC+hibernate整合框架,基于注解. 本教程框架为基于全注解的SpringMVC+Spring4.2+hibernate4.3,开发工具为my ... 
- 学习MVC之租房网站(二)-框架搭建及准备工作
		在上一篇<学习MVC之租房网站(一)-项目概况>中,确定了UI+Service的“双层”架构,并据此建立了项目 接下来要编写Common类库.配置AdminWeb和FrontWeb 一.编 ... 
- Spring4 mvc+maven 框架搭建(1)
		这篇博客其实很早就应该写,早在半年前,因为对SpringMVC感兴趣,便自学了一下Spring.一段时间的学习后,对Spring有了一个基本的了解,于是想着自己动手搭建一个SpringMvc的框架出来 ... 
- SSH框架搭建和整合(struts2、spring4、hibernate5)
		声明: 本博文是个人通过对ssh框架的学习.理解还有一些看法而描述出来的,可能有不足之处,请大家谅解,但希望能帮助到大家! 目的: 使初学者能更好的去了解SSH框架. 给以后的自己,也给别人一个参考. ... 
- angular2框架搭建,angular-cli使用,angular2学习
		angular红红火火很多年了,一眨眼ng4都出来了,我也只能叹息前端的日新月异,以及感叹自己永远追赶不上时代的步伐,但是没关系,一个优秀的前端不在于他懂的无数的框架,而在于遇到问题时候懂得如何学习, ... 
随机推荐
- Spring In Action(第三版)读书笔记
			第一章 Spring之旅 POJO: plain old java object 简单的java对象 DI:Dependency Injection 依赖注入 构造器注入:构造时作为构造器参数传入 p ... 
- Extjs tree的相关方法及配置项
			Ext.tree.TreePanel 主要配置项: root:树的根节点. rootVisible:是否显示根节点,默认为true. ... 
- 微软曝光眼球追踪新专利,未来或将可以使用眼球控制HoloLens
			想要在增强现实(AR)和虚拟现实(VR)中获得感官能力,计算机的配合非常重要.如何能够更好的追踪我们所感知的,计算机判断用户目光所向的能力就必须进一步提高.根据微软新曝光的专利,可能已经有一个解决方案 ... 
- UVa 11082 & 最大流的行列模型
			题意: 给出一个矩阵前i行的和与前j列的和,(i∈[1,r],j属于[1,c]),每个元素ai,j∈[1,20],请你还原出这个矩阵,保证有解. SOL: 给网络流建模跪了,神一样的建图,如果我我会怎 ... 
- 51Nod 1001 数组中和等于K的数对 Label:Water
			给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ... 
- c#的学习
			C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp".C#是一种安全的.稳定的.简单 ... 
- java mail(发送邮件--163邮箱)
			package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderIn ... 
- PHP 操作MySQL———来自copy
			学习要点:1.PHP 连接到MySQL2.增删改查3.其他常用函数 如果你已经具有了使用PHP.SQL 和MySQL 的丰富经验,现在就可以把所有这些技术组合在一起.PHP 与MySQL 之间稳固的集 ... 
- Sortable Observable Collection in C#
			Sorting outside the collection protected override void OnNavigatedTo(NavigationEventArgs e) { if (Se ... 
- [LintCode] Sort Integers II 整数排序之二
			Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(n ... 
