前提:

   网页编程中,我的思路是,通用的模块不仅仅只有后台代码,前端页面也可以独立为模块. 这个和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. 洛谷P2409 Y的积木

    P2409 Y的积木 77通过 491提交 题目提供者zhouyonglong 标签云端评测 难度普及+/提高 提交  讨论  题解 最新讨论 这组数据几乎可以卡掉所有程- 第一个题解有点问题 求教大 ...

  2. iOS中的round ceil floorf表示的含义

    round:如果参数是小数,则求本身的四舍五入. ceil:如果参数是小数,则求最小的整数但不小于本身. floor:如果参数是小数,则求最大的整数但不大于本身.  

  3. 安卓仿照QQ工单数实现

    1.使用BadgeView 控件,可以在网上下载源码或者Jar包 2.使用方法 holder.badgeView = new BadgeView(holder.item_layout.getConte ...

  4. JS 弹出层

    var name='提示';   //网页名称,可为空; var iWidth=550;      //弹出窗口的宽度; var iHeight=250;     //弹出窗口的高度; var iTo ...

  5. qsort库函数的用法

    qsort 功 能: 使用快速排序例程进行排序  用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *, ...

  6. 未能加载文件或程序集“MySql.Web.v20, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件

    未能加载文件或程序集“MySql.Web.v20, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖 ...

  7. C#绘制传感器代码

    //以下代码添加到任一窗口下即可        private int 旋转角度 = 0;        private int 边长 = 10;        protected override ...

  8. Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis

     本节内容: RabbitMQ队列 Memcached Redis 1.  RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...

  9. CSS 文本和表格中文字溢出显示省略号

    CSS控制文本超出指定宽度后用省略号代替,CSS控制文本不换行. 一般的文字截断(适用于内联与块): .text-overflow {     display:block;/*内联对象需加*/     ...

  10. innodb buffer pool小解

    INNODB维护了一个缓存数据和索引信息到内存的存储区叫做buffer pool,他会将最近访问的数据缓存到缓冲区.通过配置各个buffer pool的参数,我们可以显著提高MySQL的性能. INN ...