(八)改为Spring Boot+enjoy模板的说明
博客专区 > sskicgah 的博客 > 博客详情
(八)改为Spring Boot+enjoy模板的说明
sskicgah 发表于1周前
(八)改为Spring Boot+enjoy模板的说明
  • 发表于 1周前
  • 阅读 218
  • 收藏 3
  • 点赞 0
  • 评论 4

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

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

共有 人打赏支持
粉丝 5
博文 40
码字总数 30560
评论 (4)
等待美丽的花儿
其实你可以springboot:run运行就不会报那个servlet错误
sskicgah

引用来自“等待美丽的花儿”的评论

其实你可以springboot:run运行就不会报那个servlet错误
试了一下,确实不会报错了:+1:最早是直接运行main的,后来用了springboot:run就没去试了,又学到一点:grin:3Q
小小编辑
厉害
sskicgah

引用来自“小小编辑”的评论

厉害
:relaxed:
×
sskicgah
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: