(八)改成Spring Boot+enjoy模板的說明

Spring Boot很火,因而也這麼試試,代碼在git的springboot分支javascript

用了Spring Boot,去掉了不少maven依賴的引入。在idea開發,用內置的tomcat,這個依賴會引起servlet找不到的異常,註釋掉就能夠解決。html

<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。java

而在用#(ctx)這個變量的時候,一直想要自動獲取,試了好久也沒弄出來,方法太麻煩,想到application.properties有個地方是配置服務根路徑的,直接配置了server.context-path,注入配置文件中的配置到contextPath,因而 jfr.addSharedObject("ctx", contextPath); 就完成設置,也不用去作其餘複雜操做。node

在頁面有個獲取js文件時間戳的方法,寫到Function的靜態方法,以後經過enjoy設置SharedMethod,頁面就能夠直接用。這個也沒有太好的方法去獲取靜態文件的路徑,直接按照約定寫死static目錄。git

//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有衝突,加個換行稍微改一下就行。web

<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

以上就是此次改造的總結,完。sql

相關文章
相關標籤/搜索