SpringMVC+FreeMarker

v 前言:

   最近在学习SpringMVC,模板引擎用的是FreeMarker,之前没有接触过。利用SpringMVC开发其实还有许多的步骤,比如控制层,服务层,持久化层,实体等等,先弄了一个小demo来总结一下SpringMVC的开发流程。

v一、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <!-- 配置DispatcherServlet -->
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定spring mvc配置文件位置 不指定使用默认情况 -->
    <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/spring-mvc.xml,classpath*:/applicationContext.xml</param-value>
     </init-param>
      <!-- 设置启动顺序 -->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 配置映射 servlet-name和DispatcherServlet的servlet一致 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern><!-- 拦截以/所有请求 -->
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

v二、spring-mvc.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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- 自动扫描且只扫描@Controller -->
    <context:component-scan base-package="uap.web,uap.iweb" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    </context:component-scan>

    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="prettyPrint" value="true"/>
            </bean>
          </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- freemarker的配置 -->
    <bean id="freemarkerConfigurer"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/views/" />
        <property name="defaultEncoding" value="UTF-8" />
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">10</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
            </props>
        </property>
        <property name="freemarkerVariables">
              <map>
                <entry key="ctx" value="/web_example" />
            </map>
        </property>
    </bean>      

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

    <!-- 定义JSP文件的位置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>    

    <!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL-->
    <mvc:default-servlet-handler/>
</beans>

v三、Controler类

@Controller
@RequestMapping("/home")
public class FreeMarkerController {

    @RequestMapping("/getUser")
    public ModelAndView Add(HttpServletRequest request, HttpServletResponse response) {

        User user = new User();
        user.setUsername("hjzgg");
        user.setPassword("5211314");
        List<User> users = new ArrayList<User>();
        users.add(user);
        return new ModelAndView("index", "users", users);
    }

}

v四、实体类

public class User {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

v五、ftl模板(index.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>yonyou</title>
</head>
<body>
  <#list users as user>
    username : ${user.username}<br/>
    password : ${user.password}
  </#list>
</body>
</html>

 

v六、访问路径

  http://localhost:port/项目名称/home/getUser

v七、流程说明

  摘自:http://jinnianshilongnian.iteye.com/blog/1594806

1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、  HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、  ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、  View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;渲染的过程用到了相应的视图解析器,关于视图解析器的优先级的配置(http://www.cnblogs.com/rollenholt/archive/2012/12/27/2836035.html)。本例中,得到的默认视图解析器是FreeMarker的视图解析器,然后根据ModelAndView中的viewName或者Controler的返回值(对应ftl模板的名字)到FreeMarkerConfigurer配置的templateLoaderPath目录下寻找对应的模板文件,然后进行渲染。

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

  注:如果想要更清楚SpringMVC的流程,就要看一下DispatcherServlet的源码。

 

  学习中遇到的问题:http://www.cnblogs.com/hujunzheng/p/5293050.html

时间: 2024-08-03 21:39:32

SpringMVC+FreeMarker的相关文章

springMVC+freemarker中模板和自定义标签不加载

问题描述 最近刚开始学习springMVC+freemarker,模板和自定义标签不加载.不多少,上代码.jxycms-servlet-admin.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSche

spring mvc-SpringMVC freemarker 整合问题

问题描述 SpringMVC freemarker 整合问题 Spring mvc freemaker 配置了那个日期时间的转换 但是在ftl文件里面${参数}报错 难道要自己调用内部函数格式化吗 先上图吧 各位帮忙看看!spring freemaker 配置 解决方案 Properties文件中只是存放了你的配置信息,他自己不会自动帮你转换哦它只是以一种键值对的形式存在了那个文件中 解决方案二: freemarker 之 整合springMVC/struts2springMVC整合Freema

Freemarker常用指令使用示例_java

我的开发环境框架:springmvc+freemarker开发工具:springsource-tool-suite-2.9.0JDK版本:1.6.0_29tomcat版本:apache-tomcat-7.0.26 step1.编写controller文件,代码如下: 复制代码 代码如下: package www.asuan.com.controller; import java.util.ArrayList;import java.util.Date;import java.util.HashM

Spring MVC Test Framework不支持freemarker吗?

问题描述 web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns

使用junit运行freemarker找不到模板

问题描述 我们是jsp项目,使用spring装配freemarker,在跑项目的时候正常,但是在跑testcase的时候报找不到模板配置文件如下 <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" v

freemarker出现的页面问题

问题描述 freemarker出现的页面问题 我的ftl文件有一段代码 <#assign user=1> ${user} ,通过方法打开就能识别 ${user} 变量 ,输出1, 如果直接打开就会输出 <#assign user=1>${user},怎么能在直接打开ftl时执行 <#assign user=1> ${user} 需要配置什么吗? 我用的是Springmvc+freemarker 解决方案 写在页面的onload函数里面?

freemarker无法取得值

问题描述 各位大哥大姐,我的发帖给用给分只有50分了,不好意思!我的项目是springMVC+freemarker+jquery,freemaker无法取得MVC的controller层的值.controller代码:@RequestMapping("query")publicModelAndViewlistByManagerId(HttpServletRequestrequest,HttpServletResponseresponse){StringuserId=StringUtil

spring mvc-求大神,java项目除了ie浏览器以外,都报这个400错误,登录页面都不能找不开。

问题描述 求大神,java项目除了ie浏览器以外,都报这个400错误,登录页面都不能找不开. 开发环境为springMVC+freemarker,项目在IE下运行可正常显示,但在其他浏览器就无 法请求跳转到登录页面,请各位大吓帮忙看一下,感激不尽. 解决方案 <@g.htmlDocType /> <@g.htmlHead title="登录" cssPaths=[ "style/css/style.css" ] jsPaths=[ "js

请问freemarker如何用springmvc标签?

问题描述 请问freemarker如何用springmvc标签? spring mvc+freemarker ,我在做验证,想用spring mvc框架验证,最后一步不知如何引用form标签.或者通常情况下如何验证? 解决方案 先在spring-webmvc-xx.jar下的orgspringframeworkwebservletviewfreemarker下找到spring.ftl文件,copy到工程目录中,然后在ftl文件中引入<#import ""/spring.ftl&q