(八)改为Spring Boot+enjoy模板的说明


声明:本文转载自https://my.oschina.net/u/2274874/blog/1573610,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

Spring Boot很火,于是也这么试试,代码在git的springboot分支

用了Spring Boot,去掉了很多maven依赖的引入。在idea开发,用内置的tomcat,这个依赖会引发servlet找不到的异常,注释掉就可以解决。

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-tomcat</artifactId>    <!-- <scope>provided</scope>--> </dependency>

在改造时折腾了几天,就是关于使用默认的jsp,和改成其他模板的问题。Spring Boot不推荐用jsp,参考FreeMarker、Thymeleaf、Enjoy 模板引擎性能测试,决定用jfinal的enjoy模板。实际上也很少用到模板的模块,因为前端代码大部分是用js完成的。

	@Override 	public void addViewControllers(ViewControllerRegistry registry) { 		registry.addViewController("/").setViewName("forward:/index"); 		registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 		super.addViewControllers(registry); 	} 

过程大概是这样,首先原来的管理后台,默认首页是在web.xml配置的,在继承WebMvcConfigurerAdapter之后,可以设置首页,这里的forward,也可以转发到index.html,但是,网页里面用到了${ctx}的变量,直接访问jsp会被Spring Boot跳转到error页面,而访问html页面,这个变量没有解析,导致页面的样式路径404。最后幡然醒悟,直接访问页面是不会经过ViewResolver处理页面的变量,也就达不到想要的结果。于是访问页面的操作都由Spring做跳转,不是直接访问静态页面的url。

而在用#(ctx)这个变量的时候,一直想要自动获取,试了很久也没弄出来,方法太麻烦,想到application.properties有个地方是配置服务根路径的,直接配置了server.context-path,注入配置文件中的配置到contextPath,于是 jfr.addSharedObject("ctx", contextPath); 就完成设置,也不用去做其他复杂操作。

在页面有个获取js文件时间戳的方法,写到Function的静态方法,之后通过enjoy设置SharedMethod,页面就可以直接用。这个也没有太好的方法去获取静态文件的路径,直接按照约定写死static目录。

//Java中设置 jfr.addSharedMethod(Function.class);  //js中使用 <script type="text/javascript" src="#(ctx)/js/frame/main.js?v=#(getTime('js/frame/main.js'))"></script> 

页面还有个地方需要注意的,就是页面用了layui的模板,这里和enjoy有冲突,加个换行稍微改一下就行。

	<script type="text/html" id="nodeTpl"> 		{{# if(d.nodetype == '0') { 			return '父节点'; 		} else { 			return '子节点'; 		} }} 	</script>     // 改为 -->     <script type="text/html" id="nodeTpl"> 		{{# 		if(d.nodetype == '0') { 			return '父节点'; 		} else { 			return '子节点'; 		} }} 	</script>

接下来说说mybatis遇到的问题,配置里直接配置,看到有mybatis.type-aliases-package,mybatis.mapper-locations这两个可以配置的参数,想起以前这两个配置是直接写在SqlMapConfig.xml的,这次就一起换掉,配置文件只留下setting的内容。

    sqlSessionFactory.setTypeAliasesPackage(aliasPackage);     try {         sqlSessionFactory.setMapperLocations(             new PathMatchingResourcePatternResolver().getResources(mapperLocations));     } catch (IOException e) {         e.printStackTrace();     }

这里设置别名的时候,遇到找不到别名的问题。1.mybatis默认是用类的短名小写作为别名的key,所以在xml用到类的改成小写。2.typeAliasesPackage是设置别名的基础包名,会扫描指定包及子包的类,自动加载到别名的map中,这里要写具体的包名,不能写正则表达式。p.s.就是因为写了正则表达式导致找不到的,可以考虑把所有用到的类按照业务归类到子包中。

以上就是这次改造的总结,完。

本文发表于2017年11月15日 00:33
(c)注:本文转载自https://my.oschina.net/u/2274874/blog/1573610,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2938 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1