为什么freemarker比jsp慢?

fengyangchao1107 2011-08-18 05:00:18
本人昨天做了这样一个测试,测试环境为:struts2+freemarker+tomcat6
在action中声明两个方法,方法中其他的都一样,就是最后return不一样
配置为:
1)、<result name="test" type="freemarker">${templePath}/vote/tmp1_vote.ftl</result>
很显然,这儿是struts2整合了freemarker
2)、getRequest().getRequestDispatcher(voteWrapper.getFilePath() + "/vote/tmp1_vote.jsp").forward(getRequest(), getResponse());
return null;
这个在action的方法中使用forward跳转。
然后使用linux中的ab测试工具进行测试,
./ab -n 10000 -c 100 "http://118.118.110.167:8181/test/jsp/baseMgnt\!initPage2.action?object.objectId=2717&object.typeId=1/"
./ab -n 10000 -c 100 "http://118.118.110.167:8181/test/jsp/baseMgnt\!initPage.action?object.objectId=2717&object.typeId=1/"
令人意外的事情发生了,测试出来的结果竟是:
第一次测试结果:
1)的tps为:7000
2)的tps为:14000
就等于说,jsp 的效率比freemarker快了整整一倍,这个与预想结果完全颠倒,不太清楚为什么了???
第二次,增加了并发数和请求数,测试结果两个都是14000,估计跟缓存有关系了
ftl和jsp中内容的区别:
jsp中使用el表达式
ftl中使用自带的标签
内容完全一样。
...全文
4008 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
yipiantu 2013-09-26
  • 打赏
  • 举报
回复
就是来学习一下,刚接触fm,之前都是JSP
程序员济癫 2013-09-20
  • 打赏
  • 举报
回复
直接跟你说吧: velocity,选择它,你不会后悔。
码农下的天桥 2013-05-14
  • 打赏
  • 举报
回复
freemarker 性能可以超过 jsp才奇怪---假如说静态化以后就超过jsp的话,jsp可以静态化到时候就是html与html的性能比较了。
javalhl 2012-02-04
  • 打赏
  • 举报
回复
对freemarker的性能持怀疑态度
原来 2011-08-23
  • 打赏
  • 举报
回复
不懂的东西太多了@
fengyangchao1107 2011-08-23
  • 打赏
  • 举报
回复
有人说csdn没有高手,我不相信,高手快现身哦。
Sky_slh 2011-08-23
  • 打赏
  • 举报
回复
我还是喜欢用jsp
fengyangchao1107 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liuyuhua0066 的回复:]

直接用ftl替代jsp
[/Quote]
我现在就是这样做的啊,效率上不怎么好哦
fengyangchao1107 2011-08-23
  • 打赏
  • 举报
回复
继续等待中。。。
luohuijun619 2011-08-22
  • 打赏
  • 举报
回复
FreeMarket静态化要自己写代码,就是一个CMS系统了,你到网上找个CMS系统就知道了
fengyangchao1107 2011-08-22
  • 打赏
  • 举报
回复
?没人了解吗?
liuyuhua0066 2011-08-22
  • 打赏
  • 举报
回复
直接用ftl替代jsp
fengyangchao1107 2011-08-22
  • 打赏
  • 举报
回复
感觉是越来越复杂了,如果要使用CMS系统,完全可以把freemarker分离,在高并发要求高性能的系统中,freemarker存在的理由道理是什么?真令人费解。
休谱诺斯 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 luohuijun619 的回复:]
FreeMarket静态化要自己写代码,就是一个CMS系统了,你到网上找个CMS系统就知道了
[/Quote]
= =!貌似那样比较费劲呢
坐观垂钓者 2011-08-19
  • 打赏
  • 举报
回复

fm转成静态的页面就比jsp快了啊
beiouwolf 2011-08-19
  • 打赏
  • 举报
回复
freemarker这东西..怎么说哪
我用下来,fm的优势在于可以自定义标签,如果是很多类似结构的页面的话,用fm可以节省大量的重复代码
但是,fm的解释速度的确不是很快,毕竟这东西实在太复杂了,相比jsp那种标签解释来说

然后,你测试的话...小声告诉你,其他你应该在jsp页面多用些struts2标签的,struts2标签是用fm写的
你直接用el表达式来写,jsp本身就没有执行多少操作,当然速度很快了

velocity没用过,就不发表评论了

不过说实话,即使稍微慢了一点,fm的总体性能还是值得肯定的,也不是慢的不能接受,是吧?~
fengyangchao1107 2011-08-19
  • 打赏
  • 举报
回复
顶一下
fengyangchao1107 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wu_wenjie 的回复:]
fm转成静态的页面就比jsp快了啊
[/Quote]
请问怎么转换成静态html?
fengyangchao2 2011-08-18
  • 打赏
  • 举报
回复
关注一下,remark
fengyangchao1107 2011-08-18
  • 打赏
  • 举报
回复
的确牛b哦,O(∩_∩)O
加载更多回复(2)
前言................................................................................................................................. 7 什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .......................................................................................... 8 文档规约................................................................................................................... 8 联系我们................................................................................................................... 8 几点说明................................................................................................................... 9 第一部分 模板开发指南 ................................................................................................. 10 第一章 模板开发入门 ............................................................................................. 10 1.1 简介 .......................................................................................................... 10 1.2 模板 + 数据模型 = 输出 ........................................................................... 10 1.3 数据模型一览 ............................................................................................ 11 1.4 模板一览 ................................................................................................... 14 第二章 数值和类型 ................................................................................................. 20 2.1 基本内容 ................................................................................................... 20 2.2 类型 .......................................................................................................... 22 第三章 模板 ........................................................................................................... 26 3.1 总体结构 ................................................................................................... 26 3.2 指令 .......................................................................................................... 27 3.3 表达式 ....................................................................................................... 28 3.4 插值 .......................................................................................................... 43 第四章 其它 ........................................................................................................... 46 4.1 自定义指令 ................................................................................................ 46 4.2 在模板中定义变量 ..................................................................................... 51 4.3 命名空间 ................................................................................................... 54 4.4 空白处理 ................................................................................................... 57 4.5替换(方括号)语法 ................................................................................... 60 第二部分 程序开发指南 ................................................................................................. 62 第一章 程序开发入门 ............................................................................................. 62 1.1 创建配置实例 ............................................................................................ 62 1.2 创建数据模型 ............................................................................................ 62 1.3 获得模板 ................................................................................................... 63 1.4 合并模板和数据模型 .................................................................................. 64 1.5将代码放在一起 .......................................................................................... 64 第二章 数据模型 .................................................................................................... 66 2.1 基本内容 ................................................................................................... 66 2.2 标量 .......................................................................................................... 66 2.3 容器 .......................................................................................................... 67 2.4 方法 .......................................................................................................... 68 2.5 指令 .......................................................................................................... 69 2.6 节点变量 ................................................................................................... 75 2.7 对象包装 ................................................................................................... 76 第三章 配置 ........................................................................................................... 80 3.1 基本内容 ................................................................................................... 80 3.2 共享变量 ................................................................................................... 80 3.3 配置信息 ................................................................................................... 81 3.4 模板加载 ................................................................................................... 83 3.5 错误控制 ................................................................................................... 86 第四章 其它 ........................................................................................................... 90 4.1 变量 .......................................................................................................... 90 4.2 字符集问题 ................................................................................................ 90 4.3 多线程 ....................................................................................................... 92 4.4 Bean的包装 ................................................................................................ 92 4.5 日志 .......................................................................................................... 98 4.6 在Servlet中使用FreeMarker ...................................................................... 99 4.7 为FreeMarker配置安全策略......................................................................106 4.8 遗留的XML包装实现 ................................................................................107 4.9 和Ant一起使用FreeMarker.......................................................................111 4.10 Jython 包装器 ..........................................................................................112 第三部分 XML处理指南................................................................................................114 前言.......................................................................................................................114 第一章 揭示XML文档 ...........................................................................................115 1.1 节点树 ......................................................................................................115 1.2 将XML放到数据模型中 ............................................................................117 第二章 必要的XML处理 ........................................................................................119 2.1 通过例子来学习 ........................................................................................119 2.2 形式化描述 ...............................................................................................126 第三章 声明的XML处理 ........................................................................................131 3.1 基础内容 ..................................................................................................131 3.2 详细内容 ..................................................................................................133 第四部分 参考文档 .......................................................................................................136 第一章 内建函数参考文档 .....................................................................................136 1.1 处理字符串的内建函数 .............................................................................136 1.2 处理数字的内建函数 .................................................................................150 1.3 处理日期的内建函数 .................................................................................153 1.4 处理布尔值的内建函数 .............................................................................158 1.5 处理序列的内建函数 .................................................................................158 1.6 处理哈希表的内建函数 .............................................................................164 1.7 处理节点(XML)的内建函数....................................................................164 1.8 很少使用的和专家级的内建函数 ...............................................................166 第二章 指令参考文档 ............................................................................................170 2.1 if,else,elseif指令 ...................................................................................170 2.2 switch,case,default,break指令..............................................................172 2.3 list,break 指令 .........................................................................................173 2.4 include指令 ...............................................................................................174 2.5 import 指令 ...............................................................................................177 2.6 noparse指令 ..............................................................................................178 2.7 compress指令 ............................................................................................179 2.8 escape,noescape指令...............................................................................180 2.9 assign 指令 ................................................................................................182 2.10 global 指令 ..............................................................................................184 2.11 local 指令 ................................................................................................185 2.12 setting 指令 .............................................................................................185 2.13 用户自定义指令() ......................................................................187 2.14 macro,nested,return 指令 ....................................................................189 2.15 function,return 指令...............................................................................193 2.16 flush 指令 ................................................................................................195 2.17 stop 指令.................................................................................................195 2.18 ftl 指令 ....................................................................................................196 2.19 t,lt,rt 指令 ..........................................................................................197 2.20 nt 指令 ....................................................................................................198 2.21 attempt,recover 指令 .............................................................................199 2.22 visit,recurse,fallback 指令 .....................................................................200 第三章 特殊变量参考文档 .....................................................................................205 第四章 FTL中的保留名称.......................................................................................207 第五章 废弃的FTL结构 .........................................................................................208 5.1 废弃的指令列表 ........................................................................................208 5.2 废弃的内建函数列表 .................................................................................208 5.3 老式的macro和call指令 ..........................................................................208 5.4 转换指令 ..................................................................................................210 5.5 老式FTL语法 ............................................................................................211 5.6 #{…}式的数字插值 ......................................................................................212 第五部分 附录 ..............................................................................................................214 附录A FAQ .............................................................................................................214 1. JSPFreeMarker的对比 .............................................................................214 2. Velocity和FreeMarker的对比.......................................................................215 3. 为什么FreeMarker对null-s和不存在的变量很敏感,如何来处理它? ......215 4. 文档编写了特性X,但是好像FreeMarker并不知道它,或者它的行为和文档描述的不同,或者一个据称已经修改的BUG依然存在。 .....................................216 5. 为什么FreeMarker打印奇怪的数字数字格式(比如1,000,000或1 000 000而不是1000000)? ...............................................................................................216 6. 为什么FreeMarker会打印不好的小数和/或分组分隔符号(比如3.14而不是3,14).......................................................................................................................217 7. 为什么当我想用如格式打印布尔值时,FreeMarker会抛出错误,又如何来修正呢?................................................................................................................217 8. FreeMarker标签中的混淆了编辑器或XML处理器,应该怎么做? .........217 9. 什么是合法的变量名? ...............................................................................217 10. 如何使用包含空格,或其他特殊字符的变量(宏)名? ............................218 11. 当我试图使用JSP客户标签时为什么会得到非法参数异常:形式参数类型不匹配?................................................................................................................218 12. 如何像jsp:include一样的方式引入其它的资源?................................219 13. 如何给普通Java方法/ TemplateMethodModelEx/ TemplateTransformModel/ TemplateDirectiveModel的实现传递普通java.lang.* / java.util.*对象的参数? ...............................................219 14. 为什么在myMap[myKey]表达式中不能使用非字符串的键?那现在应该怎么做?................................................................................................................220 15. 当使用?keys/?values遍历Map(哈希表)的内容时,得到了混合真正map条目的java.util.Map的方法。当然,只是想获取map的条目。 ...............221 16. 在FreeMarker的模板中如何改变序列(lists)和哈希表(maps)? ...........221 17. 关于null在FreeMarker模板语言是什么样的? ......................................222 18. 我该怎么在表达式(作为另外一个指令参数)中使用指令(宏)的输出? 223 19. 在输出中为什么用“?”来代替字符X? ..................................................223 20. 在模板执行完成后,怎么在模板中获取计算过的值? ................................224 21. 我能允许用户上传模板吗?又如何保证安全呢? .......................................224 22. 如何在Java语言中实现方法或宏而不是在模板语言中?............................225 23. 为什么FreeMarker的日志压制了我的应用程序? ......................................225 24. 在基于Servlet的应用程序中,如何在模板执行期间发生错误时,展示一个友好的错误提示页面,而不是堆栈轨迹? ...........................................................226 25. 我正使用一个可视化的HTML割裂模板标记的编辑器。你们可以改变模板语言的语法来兼容我的编辑器么? .........................................................................226 26. FreeMarker有多快?真的是2.X版本的要比1.X版本(经典的FreeMarker)的吗?................................................................................................................226 27. 我的Java类怎么才能获取到关于模板结构的信息(比如所有变量的列表)?.......................................................................................................................227 28. 你会一直提供向后的兼容性吗? ...............................................................227 29. 如果我们把FreeMarker和我们的产品一起发行,我们需要发布我们产品的源代码么? ............................................................................................................228 附录B 安装FreeMarker..........................................................................................229 附录C 构建FreeMarker..........................................................................................230 附录D 版本 ...........................................................................................................231 2.3.18版 .........................................................................................................231 2.3.17版 .........................................................................................................233 2.3.16 版.........................................................................................................235 2.3.15 版.........................................................................................................236 2.3.14 版.........................................................................................................237 2.3.13 版.........................................................................................................238 2.3.12 版.........................................................................................................238 2.3.11 版.........................................................................................................239 2.3.10 版.........................................................................................................240 2.3.9 版 ..........................................................................................................241 2.3.8 版 ..........................................................................................................242 2.3.7 版 ..........................................................................................................242 2.3.7 RC1版 .....................................................................................................243 2.3.6 版 ..........................................................................................................244 2.3.5 版 ..........................................................................................................244 2.3.4 版 ..........................................................................................................245 2.3.3 版 ..........................................................................................................246 2.3.2 版 ..........................................................................................................247 2.3.1 版 ..........................................................................................................248 2.3 版 .............................................................................................................250 2.2.8 版 ..........................................................................................................262 2.2.7 版 ..........................................................................................................263 2.2.6 版 ..........................................................................................................263 2.2.5 版 ..........................................................................................................264 2.2.4 版 ..........................................................................................................264 2.2.3 版 ..........................................................................................................265 2.2.2 版 ..........................................................................................................265 2.2.1 版 ..........................................................................................................266 2.2 版 .............................................................................................................266 2.1.5 版 ..........................................................................................................275 2.1.4 版 ..........................................................................................................275 2.1.3 版 ..........................................................................................................275 2.1.2 版 ..........................................................................................................276 2.1.1 版 ..........................................................................................................276 2.1 版 .............................................................................................................277 2.01 版 ...........................................................................................................281 2.0 版 .............................................................................................................281 2.0 RC3版........................................................................................................282 2.0 RC2版........................................................................................................283 2.0 RC1版........................................................................................................284 附录E 许可 ...........................................................................................................287 词汇表 ..........................................................................................................................288
FreeMarker 手册 .......................................................................................................... 1 用于 FreeMarker 2.3.18 ........................................................................................... 1 目录................................................................................................................................. 2 前言................................................................................................................................. 7 什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .......................................................................................... 7 文档规约................................................................................................................... 8 联系我们................................................................................................................... 8 几点说明................................................................................................................... 8 第一部分 模板开发指南 ................................................................................................... 9 第一章 模板开发入门 ............................................................................................... 9 1.1 简介 ............................................................................................................ 9 1.2 模板 + 数据模型 = 输出 ............................................................................. 9 1.3 数据模型一览 ............................................................................................ 10 1.4 模板一览 ................................................................................................... 13 第二章 数值和类型 ................................................................................................. 19 2.1 基本内容 ................................................................................................... 19 2.2 类型 .......................................................................................................... 21 第三章 模板 ........................................................................................................... 25 3.1 总体结构 ................................................................................................... 25 3.2 指令 .......................................................................................................... 26 3.3 表达式 ....................................................................................................... 27 3.4 插值 .......................................................................................................... 42 第四章 其它 ........................................................................................................... 45 4.1 自定义指令 ................................................................................................ 45 4.2 在模板中定义变量 ..................................................................................... 50 4.3 命名空间 ................................................................................................... 53 4.4 空白处理 ................................................................................................... 56 4.5 替换(方括号)语法 ................................................................................... 59 第二部分 程序开发指南 ................................................................................................. 61 第一章 程序开发入门 ............................................................................................. 61 1.1 创建配置实例 ............................................................................................ 61 1.2 创建数据模型 ............................................................................................ 61 1.3 获得模板 ................................................................................................... 62 1.4 合并模板和数据模型 .................................................................................. 63 1.5 将代码放在一起 .......................................................................................... 63 第二章 数据模型 .................................................................................................... 65 2.1 基本内容 ................................................................................................... 65 2.2 标量 .......................................................................................................... 65 2.3 容器 .......................................................................................................... 66 2.4 方法 .......................................................................................................... 67 2.5 指令 .......................................................................................................... 68 2.6 节点变量 ................................................................................................... 74 2.7 对象包装 ................................................................................................... 75 第三章 配置 ........................................................................................................... 79 3.1 基本内容 ................................................................................................... 79 3.2 共享变量 ................................................................................................... 79 3.3 配置信息 ................................................................................................... 80 3.4 模板加载 ................................................................................................... 82 3.5 错误控制 ................................................................................................... 85 第四章 其它 ........................................................................................................... 89 4.1 变量 .......................................................................................................... 89 4.2 字符集问题 ................................................................................................ 89 4.3 多线程 ....................................................................................................... 91 4.4 Bean 的包装 ................................................................................................ 91 4.5 日志 .......................................................................................................... 97 4.6 在Servlet 中使用FreeMarker ...................................................................... 98 4.7 为FreeMarker 配置安全策略......................................................................105 4.8 遗留的XML 包装实现 ................................................................................106 4.9 和Ant 一起使用FreeMarker.......................................................................109 4.10 Jython 包装器 ..........................................................................................110 第三部分 XML 处理指南................................................................................................112 前言.......................................................................................................................112 第一章 揭示XML 文档 ...........................................................................................113 1.1 节点树 ......................................................................................................113 1.2 将XML 放到数据模型中 ............................................................................115 第二章 必要的XML 处理 ........................................................................................117 2.1 通过例子来学习 ........................................................................................117 2.2 形式化描述 ...............................................................................................124 第三章 声明的XML 处理 ........................................................................................129 3.1 基础内容 ..................................................................................................129 3.2 详细内容 ..................................................................................................131 第四部分 参考文档 .......................................................................................................134 第一章 内建函数参考文档 .....................................................................................134 1.1 处理字符串的内建函数 .............................................................................134 1.2 处理数字的内建函数 .................................................................................147 1.3 处理日期的内建函数 .................................................................................151 1.4 处理布尔值的内建函数 .............................................................................155 1.5 处理序列的内建函数 .................................................................................156 1.6 处理哈希表的内建函数 .............................................................................161 1.7 处理节点(XML)的内建函数....................................................................162 1.8 很少使用的和专家级的内建函数 ...............................................................163 第二章 指令参考文档 ............................................................................................167 2.1 if,else,elseif 指令 ...................................................................................167 2.2 switch,case,default,break 指令..............................................................169 2.3 list,break 指令 .........................................................................................170 2.4 include 指令 ...............................................................................................171 2.5 import 指令 ...............................................................................................174 2.6 noparse 指令 ..............................................................................................175 2.7 compress 指令 ............................................................................................176 2.8 escape,noescape 指令...............................................................................177 2.9 assign 指令 ................................................................................................179 2.10 global 指令 ..............................................................................................181 2.11 local 指令 ................................................................................................182 2.12 setting 指令 .............................................................................................182 2.13 用户自定义指令(<@...>) ......................................................................184 2.14 macro,nested,return 指令 ....................................................................186 2.15 function,return 指令...............................................................................190 2.16 flush 指令 ................................................................................................192 2.17 stop 指令.................................................................................................192 2.18 ftl 指令 ....................................................................................................193 2.19 t,lt,rt 指令 ..........................................................................................194 2.20 nt 指令 ....................................................................................................195 2.21 attempt,recover 指令 .............................................................................196 2.22 visit,recurse,fallback 指令 .....................................................................197 第三章 特殊变量参考文档 .....................................................................................202 第四章 FTL 中的保留名称.......................................................................................204 第五章 废弃的FTL 结构 .........................................................................................205 5.1 废弃的指令列表 ........................................................................................205 5.2 废弃的内建函数列表 .................................................................................205 5.3 老式的macro 和call 指令 ..........................................................................205 5.4 转换指令 ..................................................................................................207 5.5 老式FTL 语法 ............................................................................................208 5.6 #{…}式的数字插值 ......................................................................................209 第五部分 附录 ..............................................................................................................211 附录A FAQ .............................................................................................................211 1. JSPFreeMarker 的对比 .............................................................................211 2. Velocity 和FreeMarker 的对比.......................................................................212 3. 为什么FreeMarker 对null-s 和不存在的变量很敏感,如何来处理它? ......212 4. 文档编写了特性X,但是好像FreeMarker 并不知道它,或者它的行为和文档描 述的不同,或者一个据称已经修改的BUG 依然存在。 .....................................213 5. 为什么FreeMarker 打印奇怪的数字数字格式(比如1,000,000 或1 000 000 而不 是1000000)? ...............................................................................................213 6. 为什么FreeMarker 会打印不好的小数和/或分组分隔符号(比如3.14 而不是3,14) .......................................................................................................................214 7. 为什么当我想用如格式打印布尔值时,FreeMarker 会抛出错误,又如何来修正 呢?................................................................................................................214 8. FreeMarker 标签中的<和>混淆了编辑器或XML 处理器,应该怎么做? .........214 9. 什么是合法的变量名? ...............................................................................214 10. 如何使用包含空格,或其他特殊字符的变量(宏)名? ............................215 11. 当我试图使用JSP 客户标签时为什么会得到非法参数异常:形式参数类型不匹 配?................................................................................................................215 12. 如何像jsp:include 一样的方式引入其它的资源?................................216 13. 如何给普通Java 方法/ TemplateMethodModelEx/ TemplateTransformModel/ TemplateDirectiveModel 的实现传递普通 java.lang.* / java.util.*对象的参数? ...............................................216 14. 为什么在myMap[myKey]表达式中不能使用非字符串的键?那现在应该怎么 做?................................................................................................................217 15. 当使用?keys/?values 遍历Map(哈希表)的内容时,得到了混合真正map 条目的java.util.Map 的方法。当然,只是想获取map 的条目。 ...............218 16. 在FreeMarker 的模板中如何改变序列(lists)和哈希表(maps)? ...........218 17. 关于null 在FreeMarker 模板语言是什么样的? ......................................219 18. 我该怎么在表达式(作为另外一个指令参数)中使用指令(宏)的输出? 220 19. 在输出中为什么用“?”来代替字符X? ..................................................220 20. 在模板执行完成后,怎么在模板中获取计算过的值? ................................221 21. 我能允许用户上传模板吗?又如何保证安全呢? .......................................221 22. 如何在Java 语言中实现方法或宏而不是在模板语言中?............................222 23. 为什么FreeMarker 的日志压制了我的应用程序? ......................................222 24. 在基于Servlet 的应用程序中,如何在模板执行期间发生错误时,展示一个友 好的错误提示页面,而不是堆栈轨迹? ...........................................................223 25. 我正使用一个可视化的HTML 割裂模板标记的编辑器。你们可以改变模板语言 的语法来兼容我的编辑器么? .........................................................................223 26. FreeMarker 有多快?真的是2.X 版本的要比1.X 版本(经典的FreeMarker)的 吗?................................................................................................................223 27. 我的Java 类怎么才能获取到关于模板结构的信息(比如所有变量的列表)? .......................................................................................................................224 28. 你会一直提供向后的兼容性吗? ...............................................................224 29. 如果我们把FreeMarker 和我们的产品一起发行,我们需要发布我们产品的源代 码么? ............................................................................................................225 附录B 安装FreeMarker..........................................................................................226 附录C 构建FreeMarker..........................................................................................227 附录D 版本 ...........................................................................................................228
本项目详细介绍请看:http://www.sojson.com/shiro (强烈推荐) Demo已经部署到线上,地址是http://shiro.itboy.net, 管理员帐号:admin,密码:sojson.com 如果密码错误,请用sojson。 PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快,有问题加群解决。 声明: 本人提供这个Shiro + SpringMvc + Mybatis + Redis 的Demo 本着学习的态度,如果有欠缺和不足的地方,给予指正,并且多多包涵。 “去其糟粕取其精华”。如果觉得写的好的地方就给个赞,写的不好的地方,也请多多包涵。 使用过程: 1.创建数据库。 创建语句 :tables.sql 2.插入初始化数据 插入初始化数据:init.data.sql 3.运行。 管理员帐号:admin 密码:sojson ps:定时任务的sql会把密码改变为sojson.com 新版本说明:http://www.sojson.com/blog/164.html 和 http://www.sojson.com/blog/165.html 主要解决是之前说的问题:Shiro 教程,关于最近反应的相关异常问题,解决方法合集。 项目在本页面的附件中提取。 一、Cache配置修改。 配置文件(spring-cache.xml )中已经修改为如下配置: <!-- redis 配置,也可以把配置挪到properties配置文件中,再读取 --> <!-- 这种 arguments 构造的方式,之前配置有缺点。 这里之前的配置有问题,因为参数类型不一致,有时候jar和环境的问题,导致参数根据index对应,会处理问题, 理论上加另一个 name,就可以解决,现在把name 和type都加上,更保险。 --> 二、登录获取上一个URL地址报错。 当没有获取到退出前的request ,为null 的时候会报错。在(UserLoginController.java )135行处有所修改。 /** * shiro 获取登录之前的地址 * 之前0.1版本这个没判断空。 */ SavedRequest savedRequest = WebUtils.getSavedRequest(request); String url = null ; if(null != savedRequest){ url = savedRequest.getRequestUrl(); } /** * 我们平常用的获取上一个请求的方式,在Session不一致的情况下是获取不到的 * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE); */ 三、删除了配置文件中的cookie写入域的问题。 在配置文件里(spring-shiro.xml )中的配置有所修改。 <!-- 会话Cookie模板 --> <!--cookie的name,我故意取名叫xxxxbaidu --> <!--cookie的有效时间 --> <!-- 配置存储Session Cookie的domain为 一级域名 --> 上面配置是去掉了 Session 的存储Key 的作用域,之前设置的.itboy.net ,是写到当前域名的 一级域名 下,这样就可以做到N 个 二级域名 下,三级、四级....下 Session 都是共享的。 <!-- 用户信息记住我功能的相关配置 --> <!-- 配置存储rememberMe Cookie的domain为 一级域名 --> <!-- 30天时间,记住我30天 --> 记住我登录的信息配置。和上面配置是一样的道理,可以在相同 一级域名 下的所有域名都可以获取到登录的信息。 四、简单实现了单个帐号只能在一处登录。 我们在其他的系统中可以看到,单个帐号只允许一人使用,在A处登录了,B处再登录,那A处就被踢出了。如下图所示。 但是此功能不是很完美,当A处被踢出后,再重新登录,这时候B处反应有点,具体我还没看,因为是之前加的功能,现在凌晨了,下次我有空再瞧瞧,同学你也可以看看,解决了和我说一声,我把功能修复。 五、修复功能(BUG) 1.修复权限添加功能BUG。 之前功能有问题,每当添加一个权限的时候,默认都给角色为“管理员”的角色默认添加当前新添加的权限。这样达到管理员的权限永远是最大的。由于代码有BUG ,导致所有权限删除了。现已修复。 2.修复项目只能部署到Root目录下的问题。 问题描述:之前项目只能部署到Root 下才能正常运行,目前已经修复,可以带项目路径进行访问了,之前只能这样访问,http://localhost:8080 而不能http://localhost:8080/shiro.demo/ 访问,目前是可以了。 解决方案:在 FreeMarkerViewExtend.java 33行处 增加了BasePath ,通过BasePath 来控制请求目录,在 Freemarker 中可以自由使用,而 JSP 中是直接在 JSP 中获取BasePath 使用。 解决后遗症:因为我们的权限是通过URL 来控制的,那么增加了项目的目录,导致权限不能正确的判断,再加上我们的项目名称(目录)可以自定义,导致更不好判断。 后遗症解决方案:PermissionFilter.java 50行处 解决了这个问题,详情请看代码和注释,其实就是replace 了一下。 HttpServletRequest httpRequest = ((HttpServletRequest)request); /** * 此处是改版后,为了兼容项目不需要部署到root下,也可以正常运行,但是权限没设置目前必须到root 的URI, * 原因:如果你把这个项目叫 ShiroDemo,那么路径就是 /ShiroDemo/xxxx.shtml ,那另外一个人使用,又叫Shiro_Demo,那么就要这么控制/Shiro_Demo/xxxx.shtml * 理解了吗? * 所以这里替换了一下,使用根目录开始的URI */ String uri = httpRequest.getRequestURI();//获取URI String basePath = httpRequest.getContextPath();//获取basePath if(null != uri && uri.startsWith(basePath)){ uri = uri.replace(basePath, ""); } 3.项目启动的时候报错,关于JNDI的错误提示。 其实也不是错,但是看着不舒服,所以还得解决这个问题。解决这个问题需要在web.xml 中的开始部位加入以下代码。 spring.profiles.active dev spring.profiles.default dev spring.liveBeansView.mbeanDomain dev 4.项目Maven打包问题。 打包的时候,不同版本的 Eclipse 还有IDEA 会有打包打不进去Mapper.xml 文件,这个时候要加如下代码(群里同学提供的)。 src/main/java **/*.properties **/*.xml false 在 标签内加入即可,如果还是不能解决,那么请你加群(改名后)说明你的问题,有人会回答你。 5.Tomcat7以上在访问JSP页面的时候,提示JSTL错误。 这个错误是因为Tomcat7 中没有 JSTL 的jar包,现在已经在项目pom.xml 中增加了如下 jar 的引入管理。 javax.servlet jstl 1.2 javax.servlet jsp-api 2.0 provided 如果还是不能解决问题,请在官方群(群号:259217951)内搜索“jstl” 如图下载依赖包。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧