您的位置:首页 > 编程语言 > Java开发

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

2017-11-15 08:14 162 查看
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.就是因为写了正则表达式导致找不到的,可以考虑把所有用到的类按照业务归类到子包中。

以上就是这次改造的总结,完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Boot enjoy MyBatis