1. 程式人生 > >spring與freemarker整合,順帶spring mvc的helloword部署

spring與freemarker整合,順帶spring mvc的helloword部署

      spring與freemarker整合的文章在網上有很多,我就是照著做的,不過按照慣例,我每次搞這種玩意都會出現問題,這次也一樣,出現了下面這個錯誤(請允許我先說錯誤,再說怎麼部署):

      嚴重: Servlet.service() for servlet hello threw exception

       javax.servlet.ServletException: Could not resolve view with name ' 

            hellouser.ftl ' in servlet with name 'hello'

       at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029)

       at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)

       at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)

       at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)

       at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)

       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)

       at java.lang.Thread.run(Thread.java:595)

       這個問題遇到的人應該不會很多,所以網上相關的解決方案也不多,很多很不靠譜啊,靠人不如靠自己,咱有原始碼,自己查問題唄,其實也就是debug啦。

       通過原始碼發現,報出這個錯誤的地方的程式碼是

        

       view為null就報這樣的錯誤,那為什麼view為null呢?靠唄,你好歹也把freemaker的錯誤給我打出來麼,這樣一個錯誤讓人怎麼查呢?好吧,只有檢視view為什麼會null了,這裡甚至要看freemaker的程式碼了。

       中間省略幾百字,知道源頭了

       查詢過程如下:

       1.org.springframework.web.servlet.DispatcherServlet.render的1027

       2.org.springframework.web.servlet.DispatcherServlet.resolveViewName的1078

                     View view = viewResolver.resolveViewName(viewName, locale);

       3.org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName的77行

                     view = createView(viewName, locale);

       4.org.springframework.web.servlet.view.UrlBasedViewResolver.createView的384行

                     return super.createView(viewName, locale);

       5.org.springframework.web.servlet.view.AbstractCachingViewResolver.createView的158行        6.org.springframework.web.servlet.view.AbstractCachingViewResolver.loadView的421行                      return (view.checkResource(locale) ? result : null);        7.org.springframework.web.servlet.view.freemarker.FreeMarkerView.checkResource的203行                      getTemplate(getUrl(), locale);        8.org.springframework.web.servlet.view.freemarker.FreeMarkerView.getTemplate的350行                      getConfiguration().getTemplate(name, locale))        //下面是freemarker的原始碼        9.freemarker.template.getTemplate的459行        10.freemarker.template.getTemplate的487行   這裡出錯。         好吧,其實如果你的日誌記錄是debug模式的,那麼你會看到以下錯誤:         No FreeMarker view found for URL:        hellouser.ftl          其實就是找不到對應的模板檔案,檢查了下我的配置:                   不知道各位看官看出問題沒,揭曉答案:         <property name="viewPage">               <value>                     hellouser.ftl                </value>        </property>          由於hellouser.ftl的前後不但有空格,還有回車符,怪不得丫的找不到模板檔案,就為這玩意,浪費老子半天時間,奶奶個熊得,抱怨完畢。          查這個問題的時候,有人說這個問題的解決方法只有兩個:          1.檢查你的配置是否正確(一般如果你按照網上人家的配置方式做,那肯定沒問題)          2.檢查你的模板檔案位置是否對(我咋看起來是對的,其實有空格符,回車符這些玩意在,導致不準確了)          如果各位遇到同樣的問題,不妨先檢查下這兩個原因,實在不行,就除錯原始碼吧~ ---------------------------------------------------分割線--------------------------------------------------------------------------          好了問題描述完畢,接下來我大致說下如何配置一個簡單的springfamework mvc程式碼,用freemarker做頁面引擎的          首先自然要先下載spring的jar包         1. 建立一個常規的web工程,         2. 幫上述jar包引入,順便再引入              commons-logging-1.1.jar              freemarker.jar              jstl.jar         3.配置web.xml如下                     4.配置hello-servlet.xml,需要放在/WEB-INF/classes/裡,當然這是根據上述的web.xml的contextConfigLocation的配置而定                     5.寫個java程式碼                      6.寫個頁面檔案,hellouser.ftl放在/WEB-INF/view/下面,這個當然又是根據hello-servlet.xml的templateLoaderPath來定的,你可以隨便修改目錄,只要對的上既可。           

        ---------------------------------------------------分割線--------------------------------------------------------------------------

       這裡再加個題外話,hello-servlet.xml裡的viewResolver的配置中我們配置的是freemarker,spring以AOP注入屬性值,

org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver這個類中有個屬性值是suffix,網上關於spring與freemarker的整合的時候,經常會有人配置這個屬性值為.ftl,比如:

        

       從屬性值上看是指字尾名,我一開始還以為是隻解析以.ftl為字尾的檔案,後來除錯的時候發現它是給原來的url路徑再加個後最,比如我的url路徑是hellouser.ftl,結果到後面獲取模板的時候就變成了hellouser.ftl.ftl,不知道有沒有人深受這個禍害,我還沒有自己看原始碼,所以有可能會出現這個問題,還需要多加註意那。

相關推薦

springfreemarker整合順帶spring mvc的helloword部署

      spring與freemarker整合的文章在網上有很多,我就是照著做的,不過按照慣例,我每次搞這種玩意都會出現問題,這次也一樣,出現了下面這個錯誤(請允許我先說錯誤,再說怎麼部署):       嚴重: Servlet.service() for servlet

spring mybatis整合mybatis註解不起作用

一、首先配置好基礎的資料來源及註解管理器 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><pro

spring+redis的整合使用spring-data-redis來整合

1、參考:https://www.cnblogs.com/qlqwjy/p/8562703.html  2、首先建立一個maven專案。然後加入依賴的jar包就行了。我加入的jar包很多,反正加入了也沒啥壞的影響。 1 <project xmlns="http://maven.a

springquartz整合實現分布式動態創建刪除改變執行時間定時任務(mysql數據庫)

ces value 我們 job clu xsd collect 註解 common 背景:因為在項目中用到了定時任務,當時想到了spring的quartz,寫完發現費了很大功夫,光是整合就花了一上午,其中最大的問題就是版本問題,項目中用的是spring3.2.8的版本,查

整理不易且整且珍惜 2.開發環境的搭建 3.Eclipse的相關配置 4.使用maven建立web專案 5.Spring+Mybatis+SpringMVC整合 6.mybatis自動生成程式碼 7.springmybatis整合中Junit的測試 8.maven專案的啟動 9.Restful

整理不易,且整且珍惜 2.開發環境的搭建 3.Eclipse的相關配置 4.使用maven建立web專案 5.Spring+Mybatis+SpringMVC整合 6.mybatis自動生成程式碼

Spring Cloud ConfigGitLab整合並使用webhook實時更新配置

        大家都知道Spring Cloud Config統一配置中心預設支援GitHub。由於公司使用的是內部的GitLab來管理程式碼,因此配置還是有一點出入的。在這記錄下來,方便有同樣需求的小夥伴。 一、在後臺專案的bootstrap.yml配置git地址:

淘淘商城系列——springfreemarker整合

spring要與freemarker整合的話,需要兩個包,一個是freemarker的jar包,另一個是spring-context-support的jar包。所以我們需要在taotao-item-web工程中確保對這兩個jar包的依賴,如下所示。 <

SpringMybatis整合

base package div classpath conf data pac 是否 ner 一 概述 1.整合的目的 將Mapper映射器的創建任務交給Spring容器。 二 具體實現 1.創建sqlSessionFactory: <bean id="sql

springstruts2整合出現錯誤HTTP Status 500 - Unable to instantiate Action

alt 問題 blog src nbsp 文件 spa XML color 在進行spring和struts2整合的時候因為大意遇到了一個問題,費了半天神終於找到了問題所在,故分享出來望廣大博友引以為戒!! 我們都知道在spring和struts2整合時,spring接管了

springmybati整合方法

interface start face mapper con tro p s org lose (1)spring配置文件: <!-- 引入jdbc配置文件 --> <context:property-placeholder lo

SSM整合(2): spring mybatis 整合

分享 eth point names space json cal 返回 autowired 在進行完spring與springmvc整合之後, 繼續 spring與mybatis的整合. 既然是操作數據庫, 那必然不能缺少了連接屬性 一. db.properties j

Spring boot + Freemarker 整合

ext temp har 默認 htm star HA artifact AR 1.首先要添加freemarker依賴包 <dependency> <groupId>org.springframework.boot</groupId>

springshiro整合

web.xml map life servle cti 我認 ref init for spring與shiro整合 (1)加入所需要是jar包 (2)配置shiro Filter(web.xml) <!-- shiro過慮器,DelegatingFilte

spring學習 六 springmybatis整合

spring整合 acl nfa stat 工廠設計 eas ctype tin http   在mybatis學習中有兩種配置文件 :全局配置文件,映射配置文件。mybatis和spring整合,其實就是把mybatis中的全局配置文件的配置內容都變成一個spring容器

022 springRabbitmq整合

ring config resource 進行 virt vat gte urn address 一 .概述   本次我們使用spring幫助我們完成Rabbitmq的使用. 二 .環境的搭建   本次使用springboot的jar文件幫助整合rabbitmq,但是

springJDBC整合操作

spring依賴注入jdbc: jdbc配置通過硬編碼方式實現: 首先例項類 package com.offcn.pojo; import java.io.Serializable; public class ACount implements Serializable { private

applicationContext-mail.xml SpringjavaMail整合配置檔案

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XM

SpringMyBatis整合

準備工作(MyBatis基本): 1.匯入mybatis-spring、spring-jdbc、spring-tx三個jar包 2.編寫實體類、Mapper介面、Mapper.xml 3.編寫mybatis-config.xml核心配置檔案 整合步驟(基本): 1.匯入commons-dbc

spring redis 整合及使用

1、實現目標   通過redis快取資料。(目的不是加快查詢的速度,而是減少資料庫的負擔)   2、所需jar包     注意:jdies和commons-pool兩個jar的版本是有對應關係的,注意引入jar包是要配對使用,否則將會報錯。因為commons-pooljar的目錄根據

Spring(4)之 SpringMybatis整合

Spring與Mybatis整合 整合思路 Spring管理:Mybatis的 SqlSessionFactory、Mapper 第一步:整合dao 第二步:新增事務管理 第三步:整合service、Spring管理Service介面、service通過IOC容器呼叫Dao(ma