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

第一步:新建立一个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

  1. <!--  Spring 上下文参数 -->  
  2. <context-param>  
  3.     <param-name>contextConfigLocation</param-name>  
  4.     <param-value>classpath:applicationContext.xml</param-value>  
  5. </context-param>  
  6.   
  7. <!--  Spring 容器启动器 -->  
  8. <listener>  
  9.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  10. </listener>  
  11. <servlet>  
  12.     <servlet-name>springmvc</servlet-name>  
  13.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  14.     <load-on-startup>1</load-on-startup>  
  15. </servlet>  
  16. <!--为DispatcherServlet建树映射 -->  
  17. <servlet-mapping>  
  18.     <servlet-name>springmvc</servlet-name>  
  19.     <url-pattern>/*</url-pattern>  
  20. </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> 

  1. 五、添加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>  
        </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> 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值