前提:

   网页编程中,我的思路是,通用的模块不仅仅只有后台代码,前端页面也可以独立为模块. 这个和asp.net中的UserController很像

   比如有个人员基本信息的展示界面,需要在多个界面中嵌入,都重新来写一遍肯定不合适.

   那么衍生到: 我的字典模块,枚举类型的读取,展示为下拉框,地址选择控件等....

   在用Jsp的时候,jsp:include 或者引入jstl 直接c:import 都可以,而且支持传参

     在用struts2 的时候,s:action executeResult="true" 也是个不错的选择.

   换到springmvc了,虽然他貌似也有spring:import (猜的,我不太喜欢用框架自带标签)....

问题来了,我从jsp到struts2再到springMVC,需要学习struts2的标签,然后换到spring的标签么? 个人认为不需要. 因为我从接触jstl后,接触到的javaEE所有的环境,都能用jstl,我为什么要学那么多随时可能淘汰的标签.而且写的代码生成工具,每次都因为要换框架,要对其中的一些代码进行扩展重构,代码冗余太多. 那么我想把标签库统一.减少学习难度

SpringMVC +freemarker+Sitemesh的配置网上太多了. 而在探讨freemarker中加入jstl支持这个问题,大多数人认为freemarker本身就是标记语言,不需要再加入jstl.(我在想说这个的人是不是把jstl和el表达式搞混了).

 freemarker引入jstl

  传统方式:

  在每个模版页面增加 : <#assign c=JspTaglibs["http://java.sun.com/jstl/core_rt"]>

  然后在模版中就可以使用(注意,不可以在一个header中引入,其他页面包含,这样不生效,需要每个模版页面都写):

  <@c.import url="someurl" /> 这样的方式进行页面的引入了

  ############ 要说实现功能,上面已经达到目的了.不过我不喜欢,程序员开发中,还需要关心这些和业务无关的标签是不是引入了.页面也不干净

  我的方式:

    1.  把网上那些传统的freemarker配置,从springmvc的 servlet-config.xml 中移动到非springMVC配置文件中

      怎么配置的,找了一家博客  看看配置. 注意: 他里面的一句话 spring的配置文件applicationContext.xml中加入以下配置

这个配置一定要在applicationContext*.xml , 不能在 mvc的配置文件中. 因为我在实际的操作中,通过Spring的ApplicationContext中,没有找到这个bean.但是我确实需要用到他

    1. <bean id="freemarkerConfig"
    2. class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

    2. 重写Spring的 ContextLoaderListener ,并把新的类型配置到web.xml

      

public class ServletContextInitListener extends ContextLoaderListener {
@Override
public void contextInitialized(ServletContextEvent event) {
super.contextInitialized(event); //先运行,让spring初始化
initFreemarkerJSTLTaglibFactory(event.getServletContext());
}
private void initFreemarkerJSTLTaglibFactory(ServletContext context){
try {
      //SpringUtils 网上太多了,随便拷贝一个
FreeMarkerConfigurer config=SpringUtils.getBean(FreeMarkerConfigurer.class);
TaglibFactory taglibFactory = config.getTaglibFactory();
context.setAttribute("c", taglibFactory.get("/WEB-INF/tlds/c.tld")); //读取taglib,并放到 application 中
context.setAttribute("fn", taglibFactory.get("/WEB-INF/tlds/fn.tld"));
System.out.println("初始化jstl库");
} catch (Exception e) {
e.printStackTrace();
}
}
}

这样,系统运行后,模版页面不需要做任何事情,可以直接使用 <@c.import /> 等所有c和fn标签的功能了,代价就是 占用全局变量 c 和 fn.

这个方式和我在Struts2+freemarker中处理struts2的s标签类似,只不过Struts2中,我把这个在拦截器里面,每次压入ActionContext ,但是读取tld还是在listener中,一开始读取也放到拦截器,并且没有缓存,造成整个网站响应都很慢,原因就是每次都去读取tld....

SpringMVC+Freemarker+JSTL支持的更多相关文章

  1. freemarker学习 (servlet + freemarker -> Struts2+freemarker -> springMVC+freemarker)

    什么是freemarker? freemarker类似于jsp,但不是jsp!怎么说呢?freemarker文件后缀是.ftl,它不像jsp本质是servlet,它将构建模板.解析模板.使用模板分离开 ...

  2. sonne_game网站开发03 spring-mvc+freemarker整合

    今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...

  3. springMVC+freemarker中Could not resolve view with name... 问题解决

    用到springMVC+freemarker,自己在做demo过程中报: 严重: Servlet.service() for servlet springmvc threw exception jav ...

  4. IntelliJ IDEA:给web应用提供JSTL支持

    最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...

  5. SpringMvc跨域支持

    SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins  : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...

  6. 给JSP应用提供JSTL支持(IntelliJ IDEA)

    ===========手动分割线===2018-12-26============================================= Maven项目直接添加如下依赖即可: <de ...

  7. spring-mvc+freemarker整合(sonne_game网站开发03)

    今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...

  8. IntelliJ IDEA:给 web 应用提供 JSTL 支持

    最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...

  9. SpringMVC+FreeMarker

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

随机推荐

  1. ACM知识点

    基础算法 高精 模拟 分治 贪心 排序 DFS 迭代加深搜索 BFS 双向BFS 动态规划 DAG上DP 树上DP 线性DP 图算法 最短路 FLYD DJATL BF 最大流 Dinic ISAP ...

  2. angularjs上传图片

    通过AngularJS实现图片上传及缩略图展示(读取文件内容) AngularJS图片上传功能的实现(读取文件内容) AngularJs实现Multipart/form-data 文件的上传(上传文件 ...

  3. 快速卸载VS2015的办法

    1.以管理员身份运行CMD: 2.在CMD里输入F:\>vs_enterprise.exe /uninstall /force

  4. js 小工具-- 按长度截取字符串

    function cutstr(str,len){ var temp; var icount = 0; var stren = ""; //这段正则表示匹配所有汉字以及全角字符 v ...

  5. Unix目录结构的来历(转)

    原文:http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html Unix(包含Linux)的初 ...

  6. .net MVC 中枚举类型Enum 转化成 下拉列表的数据源

    第一次写技术博文,记录下工作中遇到的问题,给自己的知识做个备份,也希望能帮助到其他的同学 最近接手了公司的一个新的项目.有个页面涉及相关设计. 分享一个经常用到的吧. 方法一: 直入主题吧 我们的目的 ...

  7. jQuery iframe之间相互调用

    ,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...

  8. Spring AOP /代理模式/事务管理/读写分离/多数据源管理

    参考文章: http://www.cnblogs.com/MOBIN/p/5597215.html http://www.cnblogs.com/fenglie/articles/4097759.ht ...

  9. 在html中关于如果function的函数名和input的name一样会发生怎样的现象

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="2_PageMethods. ...

  10. LIKE模糊查询的通配符

    LIKE模糊查询的通配符 通配符 说明 示例 % 包含零个或多个字符的任意字符串. WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "comput ...