您的位置:首页 > 编程语言 > Java开发

spring mvc + freemarker 的简单实现全步骤

2014-07-24 09:05 260 查看
第一步:新建立一个web项目

第二步:引入需要的jar包

spring.web-3.0.5.jar

freemarker-2.3.16.jar

spring.web.servlet-3.0.5.jar

依赖包

jcl-over-slf4j-1.6.1.jar

第三步:配置web.xml

<!--  Spring 上下文参数 -->  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext.xml</param-value>  
</context-param>  
  
<!--  Spring 容器启动器 -->  
<listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener>  
<servlet>  
    <servlet-name>springmvc</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
</servlet>  
<!--为DispatcherServlet建树映射 -->  
<servlet-mapping>  
    <servlet-name>springmvc</servlet-name>  
    <url-pattern>/*</url-pattern>  
</servlet-mapping> 

四、添加applicationContext.xml文件

src/applicationContext.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"  

           xsi:schemaLocation="http://www.springframework.org/schema/beans   

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  

      <bean id="cms_test" class="com.jeecms.cms.action.directive.TestCms"/>

        <bean id="freemarkerConfig"  

          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" >  

        <property name="templateLoaderPath" value="/WEB-INF/view/" />  

        <property name="freemarkerVariables">

            <map>

            <!-- 自定义标签 -->

            <entry key="cms_test" value-ref="cms_test"/>

            </map>

        </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">true</prop>  

                <prop key="template_exception_handler">ignore</prop>  

            </props>  

        </property>  

        

    </bean>  

      

    </beans> 

五、添加spring MVC的servlet配置文件,命名规则(servlet-name+servlet.xml)

WEB-INF/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"  

           xsi:schemaLocation="http://www.springframework.org/schema/beans   

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  

      

              <!--视图解释器 -->  

         <bean id="cms_test" class="com.jeecms.cms.action.directive.TestCms"/>

        <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>  

        </bean>

      

     <!-- 地址转发器 -->  

    <bean name="HelloAction" class="com.qisentech.springmvc.action.HelloWordController" />  

    <bean id="urlMapping"  

          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  

    <property name="mappings">  

        <props>  

      <!-- 映射URL地址 -->  

            <prop key="/hello.do">HelloAction</prop>  

        </props>  

    &l
4000
t;/property>  

    </bean>  

    

    </beans> 

六、创建控制器Controller类

com.qisentech.springmvc.action.HelloWordController.java

    /*

     * 文 件 名 : com.qisentech.springmvc.action.HelloWordController.java

     * 创建日期 : 2013-8-7 11:40:04

     * 创 建 者 : yuyong

     */  

    package com.qisentech.springmvc.action;  

      

    import javax.servlet.http.HttpServletRequest;  

    import javax.servlet.http.HttpServletResponse;  

    import org.springframework.web.servlet.ModelAndView;  

    import org.springframework.web.servlet.mvc.Controller;  

      

    /**

     * <p>Title: </p>

     *

     * <p>Description: </p>

     *

     * @author yuyong

     * @version 1.0

     */  

    public class HelloWordController implements Controller {  

        public ModelAndView handleRequest(HttpServletRequest hsr  

                , HttpServletResponse hsr1) throws Exception {  

            ModelAndView mv = new ModelAndView("hello");  

            mv.addObject("title", "Spring MVC And Freemarker");  

            mv.addObject("content", " Hello world , test my first spring mvc ! ");  

            return mv;  

        }  

    } 

七、将控制器交给Spring MVC进行拦截

添加以下内容到springmvc-servlet.xml

见5的<!-- 地址转发器 -->  

八、建立一个自定义标签

package com.jeecms.cms.action.directive;

import java.io.IOException;

import java.io.Writer;

import java.util.Map;

import freemarker.core.Environment;

import freemarker.template.TemplateDirectiveBody;

import freemarker.template.TemplateDirectiveModel;

import freemarker.template.TemplateException;

import freemarker.template.TemplateModel;

import freemarker.template.TemplateModelException;

public class TestCms implements TemplateDirectiveModel  {

    public void execute(Environment env, Map params, TemplateModel[] loopVars,

            TemplateDirectiveBody body) throws TemplateException, IOException {

        

         if (!params.isEmpty()) {

             throw new TemplateModelException(

               "parameters 此处没有值!");

            }

           if (loopVars.length != 0) {

           throw new TemplateModelException(

          " variables 此处没有值!");

          }

         if (body != null) {

         //执行nested body  与FTL中 <#nested> 类似。

     body.render(new UpperCaseFilterWriter(env.getOut()));

         } else {

        throw new RuntimeException("missing body");

         }

        

    }

       private static class UpperCaseFilterWriter extends Writer {

           private final Writer out;

           UpperCaseFilterWriter (Writer out) {

            this.out = out;

        }        

        public void write(char[] cbuf, int off, int len)

            throws IOException {

            char[] transformedCbuf = new char[len];

                for (int i = 0; i < len; i++) {

                               transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]);

                }

                    out.write(transformedCbuf);

            }

        public void flush() throws IOException {

                out.flush();

            }

                public void close() throws IOException {

                out.close();

                }

           }

 }

九、在applicationContext.xml中进行配置

   <property name="freemarkerVariables">

            <map>

            <!-- 自定义标签 -->

            <entry key="cms_test" value-ref="cms_test"/>

            </map>

        </property>

 <bean id="cms_test" class="com.jeecms.cms.action.directive.TestCms"/>

十、在hello.ftl中引用并且显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   

     "http://www.w3.org/TR/html4/loose.dtd">  

    <html>  

        <head>  

            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

            <title>${title}</title>  

        </head>  

        <body>  

            ${content}  

dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

     <@cms_test>

             bar

             <#list ["red", "green", "blue"] as color>

                  ${color}

            </#list>

            baaz

     </@cms_test>

        </body> 

    </html> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息