SpringMVC + Freemarker 之 经典的HelloWorld实现

简单介绍一下 Spring 中 Freemarker 的配置。

开发环境:

  1. 开发工具 : IntelliJ IDEA 2017.3.2 x64
  2. 项目部署 : Tomcat 7.0
  3. JDK版本 : Java 1.8
  4. 工程 : maven-archertype-webapp Project

一. pox.xml 依赖包配置

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3   <modelVersion>4.0.0</modelVersion>
  4   <groupId>spring.freemarker.helloworld</groupId>
  5   <artifactId>spring-freemarker-helloworld</artifactId>
  6   <packaging>war</packaging>
  7   <version>1.0</version>
  8   <name>spring-freemarker-helloworld Maven Webapp</name>
  9   <url>http://maven.apache.org</url>
 10 
 11   <properties>
 12     <spring.version>4.3.12.RELEASE</spring.version>
 13   </properties>
 14 
 15   <dependencies>
 16     <!-- Test -->
 17     <dependency>
 18       <groupId>junit</groupId>
 19       <artifactId>junit</artifactId>
 20       <version>4.12</version>
 21       <scope>test</scope>
 22     </dependency>
 23     <!-- Spring  -->
 24     <dependency>
 25       <groupId>org.springframework</groupId>
 26       <artifactId>spring-core</artifactId>
 27       <version>${spring.version}</version>
 28     </dependency>
 29     <dependency>
 30       <groupId>org.springframework</groupId>
 31       <artifactId>spring-orm</artifactId>
 32       <version>${spring.version}</version>
 33     </dependency>
 34     <dependency>
 35       <groupId>org.springframework</groupId>
 36       <artifactId>spring-test</artifactId>
 37       <version>${spring.version}</version>
 38     </dependency>
 39     <dependency>
 40       <groupId>org.springframework</groupId>
 41       <artifactId>spring-beans</artifactId>
 42       <version>${spring.version}</version>
 43     </dependency>
 44     <dependency>
 45       <groupId>org.springframework</groupId>
 46       <artifactId>spring-aop</artifactId>
 47       <version>${spring.version}</version>
 48     </dependency>
 49     <dependency>
 50       <groupId>org.springframework</groupId>
 51       <artifactId>spring-tx</artifactId>
 52       <version>${spring.version}</version>
 53     </dependency>
 54     <dependency>
 55       <groupId>org.springframework</groupId>
 56       <artifactId>spring-context</artifactId>
 57       <version>${spring.version}</version>
 58     </dependency>
 59     <dependency>
 60       <groupId>org.springframework</groupId>
 61       <artifactId>spring-web</artifactId>
 62       <version>${spring.version}</version>
 63     </dependency>
 64     <dependency>
 65       <groupId>org.springframework</groupId>
 66       <artifactId>spring-webmvc</artifactId>
 67       <version>${spring.version}</version>
 68     </dependency>
 69     <dependency>
 70       <groupId>org.springframework</groupId>
 71       <artifactId>spring-context-support</artifactId>
 72       <version>${spring.version}</version>
 73     </dependency>
 74     <!-- Spring Compile Dependencies/Spring 编译依赖 -->
 75     <dependency>
 76       <groupId>org.aspectj</groupId>
 77       <artifactId>aspectjweaver</artifactId>
 78       <version>1.8.4</version>
 79     </dependency>
 80     <dependency>
 81       <groupId>org.aspectj</groupId>
 82       <artifactId>aspectjrt</artifactId>
 83       <version>1.8.4</version>
 84     </dependency>
 85     <dependency>
 86       <groupId>commons-logging</groupId>
 87       <artifactId>commons-logging</artifactId>
 88       <version>1.2</version>
 89     </dependency>
 90     <dependency>
 91       <groupId>log4j</groupId>
 92       <artifactId>log4j</artifactId>
 93       <version>1.2.17</version>
 94     </dependency>
 95     <!-- Freemarker/模板引擎 -->
 96     <dependency>
 97       <groupId>org.freemarker</groupId>
 98       <artifactId>freemarker</artifactId>
 99       <version>2.3.23</version>
100     </dependency>
101   </dependencies>
102   <build>
103     <finalName>spring-freemarker-helloworld</finalName>
104     <plugins>
105       <plugin>
106         <groupId>org.apache.maven.plugins</groupId>
107         <artifactId>maven-compiler-plugin</artifactId>
108         <configuration>
109           <source>1.8</source>
110           <target>1.8</target>
111         </configuration>
112       </plugin>
113     </plugins>
114   </build>
115 </project>
  • commons-logging、log4j 用于记录日志。
  • aspectjweaver Spring依赖包。

 

 

二. /webapp/WEB-INF/web.xml 简单配置

 1 <!DOCTYPE web-app PUBLIC
 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app>
 6   <display-name>Archetype Created Web Application</display-name>
 7 
 8   <!-- Spring mvc 配置 -->
 9   <servlet>
10     <servlet-name>springmvc</servlet-name>
11     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
12     <init-param>
13       <param-name>contextConfigLocation</param-name>
14       <param-value>classpath*:springmvc-servlet.xml</param-value>
15     </init-param>
16   </servlet>
17   
18   <servlet-mapping>
19     <servlet-name>springmvc</servlet-name>
20     <url-pattern>/*</url-pattern>
21   </servlet-mapping>
22   
23   <welcome-file-list>
24     <welcome-file>index.jsp</welcome-file>
25   </welcome-file-list>
26   
27 </web-app>
  • org.springframework.web.servlet.DispatcherServlet 是Spring中的核心,用于拦截请求,解析请求参数,渲染视图,并且返回响应。
  • springmvc-servlet.xml 是SpringMVC的配置文件

 

三.springmvc-servlet.xml 简单配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 默认的注解映射的支持 -->
    <mvc:annotation-driven/>

    <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
    <mvc:default-servlet-handler/>

    <!-- 如果当前请求为“/”时,则转发到“/hello/index” -->
    <mvc:view-controller path="/" view-name="/index"/>

    <!-- 开启controller注解支持 -->
    <context:component-scan base-package="com.tt.sys.controller" />

    <!--视图解释器 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix">
            <value>.ftl</value>
        </property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
    </bean>

    <!-- FreeMarker模板路径 -->
    <bean id="freemarkerConfig"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>/WEB-INF/templates/</value>
        </property>
        <property name="freemarkerVariables">
            <map>
                <entry key="xml_escape" value-ref="fmXmlEscape" />
            </map>
        </property>
        <property name="defaultEncoding">
            <value>utf-8</value>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">0</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="number_format">0.##########</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="classic_compatible">false</prop>
                <prop key="template_exception_handler">ignore</prop>
            </props>
        </property>
    </bean>
    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />

</beans>

 

 

四.在开启注解对于的包 com.tt.sys.controller 中添加 HelloController 类

 1 package com.tt.sys.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @Controller
 8 @RequestMapping(value = "/hello")
 9 public class HelloController {
10 
11     /**
12      * 默认欢迎页面
13      * @return
14      */
15     @RequestMapping(value = "/index", method = RequestMethod.GET)
16     public String index() {
17         return "index";
18     }
19 
20 }

 

  • @Controller 注解用于标识对应类是Spring可以解析的 Controller 
  • @RequestMapping 注解在类上标识表示是一个映射的请求,在方法上标识表示是一个Action
  • 返回值 index 标识表示视图名称,视图的解析会根据 springmvc-servlet.xml 配置的视图文件夹寻找对应视图

 

五.视图代码阅读

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Hello World</title>
 6 </head>
 7 <body>
 8 
 9     <h1>Hello World Freemarker!</h1>
10 
11 </body>
12 </html>

 

  • Freemarker中的代码和 Html中的相同

 

六. 程序最终效果

 

 

七.源码

 https://github.com/tangtaiming/spring-demo

posted on 2018-01-17 02:56  波雅HKK  阅读(224)  评论(0)    收藏  举报

导航