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,不知道有沒有人深受這個禍害,我還沒有自己看原始碼,所以有可能會出現這個問題,還需要多加註意那。
相關推薦
spring與freemarker整合,順帶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
spring與quartz整合實現分布式動態創建,刪除,改變執行時間定時任務(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.spring與mybatis整合中Junit的測試 8.maven專案的啟動 9.Restful
整理不易,且整且珍惜 2.開發環境的搭建 3.Eclipse的相關配置 4.使用maven建立web專案 5.Spring+Mybatis+SpringMVC整合 6.mybatis自動生成程式碼
Spring Cloud Config與GitLab整合,並使用webhook實時更新配置
大家都知道Spring Cloud Config統一配置中心預設支援GitHub。由於公司使用的是內部的GitLab來管理程式碼,因此配置還是有一點出入的。在這記錄下來,方便有同樣需求的小夥伴。 一、在後臺專案的bootstrap.yml配置git地址:
淘淘商城系列——spring與freemarker的整合
spring要與freemarker整合的話,需要兩個包,一個是freemarker的jar包,另一個是spring-context-support的jar包。所以我們需要在taotao-item-web工程中確保對這兩個jar包的依賴,如下所示。 <
Spring與Mybatis整合
base package div classpath conf data pac 是否 ner 一 概述 1.整合的目的 將Mapper映射器的創建任務交給Spring容器。 二 具體實現 1.創建sqlSessionFactory: <bean id="sql
spring與struts2整合出現錯誤HTTP Status 500 - Unable to instantiate Action
alt 問題 blog src nbsp 文件 spa XML color 在進行spring和struts2整合的時候因為大意遇到了一個問題,費了半天神終於找到了問題所在,故分享出來望廣大博友引以為戒!! 我們都知道在spring和struts2整合時,spring接管了
spring與mybati整合方法
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>
spring與shiro整合
web.xml map life servle cti 我認 ref init for spring與shiro整合 (1)加入所需要是jar包 (2)配置shiro Filter(web.xml) <!-- shiro過慮器,DelegatingFilte
spring學習 六 spring與mybatis整合
spring整合 acl nfa stat 工廠設計 eas ctype tin http 在mybatis學習中有兩種配置文件 :全局配置文件,映射配置文件。mybatis和spring整合,其實就是把mybatis中的全局配置文件的配置內容都變成一個spring容器
022 spring與Rabbitmq整合
ring config resource 進行 virt vat gte urn address 一 .概述 本次我們使用spring幫助我們完成Rabbitmq的使用. 二 .環境的搭建 本次使用springboot的jar文件幫助整合rabbitmq,但是
spring與JDBC整合操作
spring依賴注入jdbc: jdbc配置通過硬編碼方式實現: 首先例項類 package com.offcn.pojo; import java.io.Serializable; public class ACount implements Serializable { private
applicationContext-mail.xml Spring與javaMail整合配置檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XM
【Spring與MyBatis整合】
準備工作(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)之 Spring與Mybatis整合
Spring與Mybatis整合 整合思路 Spring管理:Mybatis的 SqlSessionFactory、Mapper 第一步:整合dao 第二步:新增事務管理 第三步:整合service、Spring管理Service介面、service通過IOC容器呼叫Dao(ma