前言:
jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
下面具体讲解如何配合SpringMVC与JSP搭建Freemarker:
1.maven依赖的引入
org.freemarker
freemarker
2.3.25-incubating
org.springframework
spring-context-support
4.3.10.RELEASE
## 如果变量为null,转化为空字符串,比如做比较的时候按照空字符串做比较
classic_compatible=true
##去掉多余的空格,非常有用
whitespace_stripping=true
##模板更新事件,设置为1秒,正式环境设置为3600秒
#template_update_delay=3600
##模板更新时间,这里配置是1秒更新一次,正式环境,模板不会改变,可以降这个值很大,提高效率,就是被这个参数害死了,老是不更新
template_update_delay=1
##中国
locale=zh_CN
##编码utf8
default_encoding=utf_8
##url编码utf8
url_escaping_charset=utf_8
##显示日期格式
date_format=yyyy-MM-dd
##显示时间格式
time_format=HH:mm:ss
##显示日期格式
datetime_format=yyyy-MM-dd HH:mm:ss
##数字显示格式
number_format=0.######
output_encoding=UTF-8
#template_update_delay=1
boolean_format=true,false
#auto_import="/common/index.ftl" as ui
tag_syntax=auto_detect
public class FtlResourceView extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) throws Exception {
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists();// 判断该页面是否存在
}
}
@RequestMapping(value = "/product",method = RequestMethod.GET)
public ModelAndView product(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
mv.setViewName("/product");
PageBounds pageBounds = new PageBounds(1,5, Order.formString("prod_price.asc"));
PageList products = productService.getList(null,pageBounds);
products.getPaginator().getTotalCount();
mv.addObject("products",products);
return mv;
}
Title
${products[0].vendor.vendAddress}
javax.servlet.ServletException: Could not resolve view with name 'test/product' in servlet with name 'DispatcherServlet'
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1237)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:169)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:120)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:163)
错误的ModelAndView导入:
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.servlet.ModelAndView;
当你重要搞定配置运行了,发现成功了,你好开心啊,然后你动态取数据会发现,这尼玛freemarker视图层数据咋不刷新呢?这是因为你没有配置下面这个参数,不要怀疑,就是这样:
##模板更新时间,这里配置是1秒更新一次,正式环境,模板不会改变,可以降这个值很大,提高效率,就是被这个参数害死了,老是不更新
template_update_delay=1
到此你已经成功配置好springmvc+jsp+freemarker的整合!!!
觉得对你有帮助就点个赞吧!!
有钱的大爷赞助一下更好了: