前言:

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

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

二、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.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://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>

三、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);}}

四、实体类

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

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

六、访问路径

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

七、流程说明

  摘自: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

转载于:https://www.cnblogs.com/hujunzheng/p/5292769.html

SpringMVC+FreeMarker相关推荐

  1. 怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker

    项目中,想实现一个功能. 直接访问某个需要登录的url,比如/addArticle,可能会跳转到登录页面login.html. 登录成功之后,自动跳转到/addArticle这个登录前的页面,继续登录 ...

  2. spring框架教程 Spring开发实例 spring mvc视频教程下载

    基于SpringMVC.MyBatis.FreeMarker架构实战CMS大型门户网站(自定义模板) spring框架教程 Spring开发实例 spring mvc视频教程下载地址: http:// ...

  3. springmvc使用freemarker

    一.导入freemarker的jar包 freemarker-2.3.15.jar 二.在springmvc.xml文件中配置freemarker的视图解析器 <!-- freemarker的视 ...

  4. SpringMvc多视图整合(jsp、velocity、freemarker)

    2019独角兽企业重金招聘Python工程师标准>>> 说明一下目录结构   Spring配置文件 <?xml version="1.0" encoding ...

  5. freemarker结合springMVC配置

    摘自:http://yk94wo.blog.sohu.com/128484189.html freemarker 我就不用多说什么了,大家都知道它. 在spring项目中使用时,做一下配置: 1.&l ...

  6. springmvc结合freemarker,非自定义标签

    参考:http://viralpatel.net/blogs/spring-mvc-freemarker-ftl-example/ 上图: 目录层级: 启动后的访问地址:http://localhos ...

  7. SpringMVC Java config freemarker

    freemaker 默认的TemplateLoader是FileTemplateLoader所以: 1 /** 2 * 3 * Description:FreeMarker视图配置 4 * @retu ...

  8. springmvc下解析模板生成Excel ,用freemarker

    工具类解析模板生成Excel public class TemplateParseUtil {/** * 解析模板生成Excel * @param templateDir 模板目录 * @param ...

  9. SpringMVC工作原理详解

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMV ...

最新文章

  1. map vs hash_map
  2. tcp/ip 协议栈Linux源码分析四 IPv4分片 ip_fragment函数分析
  3. 计算机网络原理第一章习题3-24 3-25
  4. 全国计算机二级等级考试项目有什么,全国计算机等级考试二级内容
  5. java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计
  6. python 遍历文件夹
  7. linux 设置时钟 教程,Linux hwclock命令参数及用法详解--Linux显示/设置硬件时钟命令...
  8. sql limit 子句_SQL按子句排序
  9. 对数字信号处理中各种频率以及分辨率的理解
  10. 2014全新增强版迅捷PDF转换器介绍
  11. UML图绘制(三)-----用例图的画法
  12. 干货分享:常见的十种破解密码方法!赶紧收藏!
  13. 蓝牙BLE测试市面上常用的几种测试设备
  14. 自编记单词小程序项目(自定义词库,多功能)C/C++语言实现
  15. 【管理学视频课程】关键链的本质--…
  16. Ubuntu 12.04系统天嵌Linux交叉编译开发工具的安装
  17. char*与string的区别
  18. python回调廖雪蜂_廖雪峰Python总结4
  19. 个人账本软件---界面设计
  20. 工具推荐|2019年UI设计师必备工具清单

热门文章

  1. centos8安装mysql_CentOS8+FreeRadius+Mysql8.0+daloRadius建立Radius服务器
  2. mac 电脑android环境变量设置,mac上Android环境变量配置
  3. RuoYi-Cloud 部署篇_03(linux环境 Oracle +nginx版本)
  4. 【基于注解方式】Spring整合Kafka
  5. Git添加为远程仓库
  6. git Could not read from remote repository.Please make sure you have the correct access rights.
  7. VBA 网页提取特定内容 - 网抓实践总结
  8. Java-instanceof和类型转换
  9. 四个变量的图表怎么做_品牌策划方案怎么做?5步图文帮你绘制专业策划图表...
  10. java socket数据传输_Java Socket编程(一) Socket传输模式