SpringMVC+Freemarker+JSTL支持
前提:
网页编程中,我的思路是,通用的模块不仅仅只有后台代码,前端页面也可以独立为模块. 这个和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.但是我确实需要用到他
- <bean id="freemarkerConfig"
- 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支持的更多相关文章
- freemarker学习 (servlet + freemarker -> Struts2+freemarker -> springMVC+freemarker)
什么是freemarker? freemarker类似于jsp,但不是jsp!怎么说呢?freemarker文件后缀是.ftl,它不像jsp本质是servlet,它将构建模板.解析模板.使用模板分离开 ...
- sonne_game网站开发03 spring-mvc+freemarker整合
今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...
- springMVC+freemarker中Could not resolve view with name... 问题解决
用到springMVC+freemarker,自己在做demo过程中报: 严重: Servlet.service() for servlet springmvc threw exception jav ...
- IntelliJ IDEA:给web应用提供JSTL支持
最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...
- SpringMvc跨域支持
SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...
- 给JSP应用提供JSTL支持(IntelliJ IDEA)
===========手动分割线===2018-12-26============================================= Maven项目直接添加如下依赖即可: <de ...
- spring-mvc+freemarker整合(sonne_game网站开发03)
今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...
- IntelliJ IDEA:给 web 应用提供 JSTL 支持
最近在看<Head First Servlet JSP>学习JSP,看到JSTL一章,为了添加JSTL支持折腾了好久. 网上的教程五花八门,而且多数比较旧. 我尝试了各种方法都没有成功,很 ...
- SpringMVC+FreeMarker
前言: 最近在学习SpringMVC,模板引擎用的是FreeMarker,之前没有接触过.利用SpringMVC开发其实还有许多的步骤,比如控制层,服务层,持久化层,实体等等,先弄了一个小demo来总 ...
随机推荐
- DAO模式设计步骤
1.DAO 全称是data access object,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作. 2.分成架构 企业分层架构 客户层:因为现在都采用了 ...
- Android签名机制
Android APK 签名比对 发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的.签名机制在Android应用和框架中有着十分重要的作用. 例如,Android系 ...
- javascript 取整,取余数
1.丢弃小数部分,保留整数部分 parseInt(5/2) 2 2.向上取整,有小数,则整数部分加1 Math.ceil(5/2) 3 3.四舍五入 Math.round(5/2) 3 4.向下取整 ...
- 前端菜鸟的编程之路之css的用法
/* * * 固定特殊类 * */ /* ===========固定宽度*============= */ .ld-with80{width: 80px} .ld-with50{width: 50px ...
- Parse the main function arguments
int main(int argc, char **argv) { std::string reportDir; std::string transURL; std::string visualEle ...
- java类型占用字节数&类型转换
1.整型类型 存储需求 bit数 取值范围 备注int 4字节 4*8 short ...
- SpringMVC学习笔记(一)
一.MVC的流程图 分析流程图 1. 首先用户发送请求---->前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分:图 ...
- Ajax的封装03
一.Ajax 1.原理:基于http协议的 内置对象:XMLHttpRequest 发起请求 那会相应 步骤: var xhr=new XMLHttpRequest(); // 请 ...
- java能不能自己写一个类叫java.lang.System/String正确答案
原文: http://www.wfuyu.com/php/22254.html 未做测试 ! 最近学习了下java类加载相干的知识.然后看到网上有1道面试题是 能不能自己写个类叫java.lang.S ...
- {Reship}{Code}{CV}
UIUC的Jia-Bin Huang同学收集了很多计算机视觉方面的代码,链接如下: https://netfiles.uiuc.edu/jbhuang1/www/resources/vision/in ...