基於IDEA整合Spring,SpringMVC,Mybatis。
這是一段···(不可描述)的路程
首先附上文件結構圖:
主要是三層,Dao層,Service層,Controller層。
由於都是面向接口編程,耦合性更低。
Dao層只有Ixxdao 接口,他的實現是通過Mybatis的map配置文件代理注入的,查看Mybatis配置文件就可以知道。
而Service接口只負責聲明服務,serviceImpl則用來實現具體的業務操作。當然注入Dao接口是在serviceImpl中注入的。
然後再在Controller中注入Service接口,注意 這裏是注入接口,然後用註解聲明具體的實現類
下面附上這幾層的代碼截圖:
整體結構大概就是這樣子,下面對配置文件進行說明。
Web.xml
最基礎的配置:
1.在web.xml配置監聽器ContextLoaderListener
ContextLoaderListener的作用就是啓動Web容器時,自動裝配ApplicationContext的配置信息。因爲它實現了 ServletContextListener這個接口,在web.xml配置這個監聽器,啓動容器時,就會默認執行它實現的方法。
2.部署applicationContext的xml文件
如何部署applicationContext的xml文件,如果在web.xml中不寫任何參數配置信息,默認的路徑是”/WEB-INF /applicationContext.xml,在WEB-INF目錄下創建的xml文件的名稱必須是applicationContext.xml。 如果是要自定義文件名可以在web.xml里加入contextConfigLocation這個context參數:
定義WebAppliactionContext上下文中的bean
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext-*.xml
</param-value>
</context-param>
3.定義DispatcherServlet 前段處理器,用於控制
<servlet>
<servlet-name>court</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc.xml</param-value>
<!---不配置的話 默認是court-servlet.xml -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>court</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
這裏的contextConfigLocation (即springMVC的配置文件中)用於配置控制器的參數,比如設置映射頁面的前綴後綴等
最基本的web.xml中配置完這三個就算完成了
Springmvc.xml
<mvc:annotation-driven />
首先需要介入這個註解用於自動啓動註解功能。
同時會自動註冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean,是spring MVC爲@Controllers分發請求所必須的。
並提供了:數據綁定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,讀寫XML的支持(JAXB),讀寫JSON的支持(Jackson)。
然後就是添加自動掃描Controller包
(這裏主要配置攔截器,applicationContext中掃描所有包)
以及解析器的前後綴
applicationContext.xml
MyBatisConfig.xml
MyBatis需要配置的內容可以去官網上看例子。
總結:
爲什麼 pom中
<!-- Spring MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
<!--<scope>provided</scope>-->
</dependency>
加了 provided 運行就有問題,當然有問題tomcat本身不提供web包,只有tomcat已包含的包,可以使用provide
要學會根據錯誤提示自己尋找問題所在,並解決。
錯誤棧:最下面的是引起錯誤的起源。
根據錯誤 Debug 找起不來的原因,如果是ClassNotFind就在pom中導入相應的包
很重要的一點:經常訪問資源文件,訪問不到 很頭疼!!!
路徑訪問:maven 打包時,默認只會把resource文件夾下的資源文件打進去的,classes是編譯後的文件,所以我們可以把配置文件都放在resource下, 到時候用classpath 就能訪問到。能不能訪問,看target/classes中有沒有 就知道了
Test 是用來測試已編譯的代碼的,就是classes裏面所有的資源
target中, classes是你的工程編譯後的類,裏面沒有第三方包
spring是 spring.war 的解壓縮後的包,裏面含有第三方包,當然也有個classes
當然如果需要把其他位置的資源放到classes中,需要另外配置。最好就是 WEN-INF下就放 web.xml 其餘的都放resource中
整個工程代碼:github