Eclipse+sts 搭建ssm環境/使用 隨記
1 Eclipse安裝 sts外掛 (spring tool suite)
可以在Eclipse市場中安裝:Eclipse->Help->Eclipse Marketplact
或是Spring 官網下載
安裝後即可直接新建Spring/MVC 專案,以整合Maven
2 在pom.xml中新增/修改Maven依賴
修改JDK配置:下面出現1.8的地方標識要是用的JDK版本
<properties> <java-version>1.8</java-version> ...... </properties>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> ....
然後右鍵專案->Maven->update project
3 通過WEB.XML描述可知
DispatcherServlet=servlet-context.xml
contextConfigLocation=root-context.xml
4 在root-context.xml配置各種<bean>,如資料庫連線池,Mybatis SqlSessionFactoryBean+MapperScannerConfigurer
可配置DAO+Service 的掃描包
5 Maven專案中 XML中的ClassPath:->src/main/* 下的各目錄
推薦把檔案類內容放在src/main/resources 目錄下 ,例如.xml/.properties
6 執行時報錯 控制檯搜尋Cause /Caused by 排查原因
7 Pom.xml 中新增: mysql-connector-java,jackson-mapper-asl,jackson-core-asl,c3p0,mybatis,
mybatis-spring,spring-jdbc,spring-tx 等依賴JAR
在mvnrepository.com可搜尋依賴JAR版本和座標(根據需要 使用版本相對較新使用較多的版本)
8 Tomcat 啟動時 configured中只保留一個專案 否則可能報錯
9 html/jsp 中文亂碼 <meta charset="">設定成與建立時的編碼格式一致
當用多個IDE修改HTML時:
a.注意儲存編碼格式一致
b.最好最後在Eclipse中開啟並重新整理,否則有時會出現儲存成功,但是執行時無變化
c.注意快取
10 Eclipse與Tomcat 執行時的JAVA版本不一致,會出現JVM報錯
11 db.properties 資料庫配置檔案設定
a. 報錯com.mchange.v2.c3p0.DriverManagerDataSource - Could not load driverClass
db.properties 中每一行結尾 注意去空格(重要)
b. 報錯com.mysql.cj.jdbc.Driver
mysql 6.0+ 之後 驅動路徑為jdbc.driverClass=com.mysql.cj.jdbc.Driver
c. 報錯 SSL 或是 zone
characterEncoding=GBK&useSSL=false&serverTimezone=GMT
成功配置用例:
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.jdbcUrl=jdbc\:mysql\://localhost\:3306/world?characterEncoding=GBK&useSSL=false&serverTimezone=GMT
jdbc.user=root
jdbc.password=sw008218
jdbc.dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
12 Spring Mvc攔截器配置
在DispatcherServlet檔案中(servlet-context.xml)配置
<interceptors>
<!-- 使用者資訊攔截器 -->
<interceptor>
<!-- 攔截所有路徑 /** 注意用兩個*-->
<mapping path="/**"/>
<!-- 不攔截的路徑 -->
<!-- <exclude-mapping path="/static/**" /> -->
<beans:bean class="com.sw008.interceptor.LoginInterceptor"/>
</interceptor>
</interceptors>
<interceptors>中可以配置多個攔截器<interceptor>,攔截器bean的類由自己實現,其實現Spring的介面HandlerInterceptor。注意:注意SpringMvc的版本,也可以用mvc標籤宣告<mvc:interceptors>
HandlerInterceptor介面中三個方法:
/**
* 在controller方法呼叫之前執行
* 攔截器
*/
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2)
/**
* 在preHandle方法返回true後才會執行
* 在controller方法呼叫之後執行返回檢視之前執行,
* ModelMap表示請求Controller處理之後返回的Model物件,所以可以在
* 這個方法中修改ModelMap的屬性,從而達到改變返回的模型的效果。
*/
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
/**
* afterCompletion 在preHandle方法返回true後才會執行
* 在整個請求完成之後才會執行,也就是說在檢視渲染之後進行呼叫,主要用於進行一些資源的釋放
*/
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
13 HTML/JSP頁面中涉及到路徑的賦值 要有${pageContext.request.contextPath}/+請求路徑,否則會找不到對應請求
14 PageHelp 分頁外掛整合 :點選開啟連結
PageInfol類中的List是結果集,所以可以只向前端傳PageInfol,不用單獨傳結果集
15 給document.createElement()建立的DOM繫結onclick事件,
var a=document.createElement("a");
a.onclick=function(){refreshImeiHz(this.value);} //refreshImeiHz()是另一個方法
16
替換spring系列的版本,STS預設使用的是3.1.1版本,想要提高spring系列包整體版本開啟POM.xml,在引數中找到spring的版本引數,雙擊修改為想要的版本,儲存後相關的spring都會更新。這個屬性引數在POM.xml的<properties/>中,在POM.xml中宣告<version>${org.springframework-version}</version>的JAR包都是版本都是受這個屬性控制
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency>
servlet-context.xml,root-context.xml等spring相關配置檔案,頂部宣告標籤的版本需要手動更換
可以在servlet-context.xml下邊的Namespaces中設定,左邊選擇名稱空間,右邊找到對應版本
注意有時會有奇怪的錯誤:本人更新為4.1.6版本的系列spring包後,servlet-context.xml報找不到org.springframework.web.servlet.view.InternalResourceViewResolver這個試圖解析器類,後來發現MAVEN下載的spring-mvc 4.1.6版包居然是空包,沒有任何類。
另外名稱空間更換後也有可能出現.xml中的標籤報錯,這種可以在xml中輸入<根據更換版本後的名稱空間提示,找到對應標籤進行替換。
17 使用REST風格編寫@RestController時,預設是把返回內容轉換為JSON等資料,所以要想跳轉頁面需要返回ModelAndView,例如
@RequestMapping("/show")
public ModelAndView show(ModelAndView mv) {
mv.setViewName("gnlist/imeidb"); //設定頁面地址
return mv; //因為是@RestController 如果直接以字串返回頁面地址,會以json解析
}
18 使用@Aspect完成切面
注意:
a: 在springMVC 包含spring配置檔案(context.xml)和MVC配置檔案(DispatcherServlet-servlet.xml),這兩個檔案在web.xml中配置。當@Aspect註釋的切面類中,包含這兩個配置檔案的bean時,需要在兩個xml中都宣告<aop:aspectj-autoproxy />,
即@Aspect中涉及到哪個xml的bean則那個xml就要宣告<aop:aspectj-autoproxy />。否則無法生效。
經測試:寫一個@Aspect切面,這個切面中涉及到@Controller和@Service中的方法,而本人將@Controller的bean掃描放在MVC配置檔案中,而@Service的bean掃描放在spring配置檔案中,這時只有兩個配置檔案都宣告<aop:aspectj-autoproxy />,才能保證AOP全部生效。
b:注意aop要引入的jar,如果不全啟動時會報錯,或是AOP失效
aopalliance.jar ,aspectjrt.jar,aspectjweaver.jar ,cglib-nodep.jar
c: spring配置檔案為"父",MVC配置檔案為"子" ,spring配置檔案先於MVC中的bean例項化 點選開啟連結
d: 推薦先將切點範圍縮小到某一個方法,成功後在擴大範圍
e: 同一個方法可以有多個相同位置的切面,例如:兩個@Aspect中,為同一個方法(相同切點)設定@before,兩個都生效
19 TOMCAT啟動專案時控制檯報錯
嚴重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/col]]
嚴重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
嚴重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
解決:一般為maven引入JAR包問題,版本不相容或是下載不完整,可以依次註釋POM.mxl中的依賴,排除是哪些包引起的。
這是多數因為有jar包沒有下載完全引起的,需要將相應包重新下載。到maven的reposity目錄下搜aether*****in-progress(可以搜aether或者in-progress都行)檔案,如果存在,把這個檔案對應的版本目錄刪除,重新整理一下專案重新部署打包即可。
20 解決pom.xml檔案META-INF\MANIFEST.MF (系統找不到指定的路徑)的問題
Maven專案中的pom.xml檔案的第一行,出現了xxx\target\classes\META-INF\MANIFEST.MF (系統找不到指定的路徑)的問題
原因:maven更新或者clean project不完全
解決辦法:a.先clean project,再maven->update project。重複,直到問題消失
b.如果步驟a不起作用,那麼可以找到出問題的工程,刪除target資料夾下的所有檔案或資料夾,再重複一下步驟a
21 DEBUG時顯示MyBatis執行資訊配置:
a.spring註冊SqlSessionFactoryBean時,制定自定義配置檔案位置(假設配置檔案路徑src\main\resources\mybatis\SqlMapConfig.xml)
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean" depends-on="dataSource">
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
b.SqlMapConfig.xml設定日誌種類(這裡用LOG4J)
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="logImpl" value="LOG4J"/>
</settings>
</configuration>
c.src\main\resources\log4j.xml中配置log4j的設定(com.zoomflight.mapper為專案中mybatis中的mapper介面包)
<logger name="com.zoomflight.mapper">
<level value="DEBUG" />
</logger>
22 網頁中文亂碼
首先HTML中<meta content="text/html; charset=utf-8">
然後保證HTML檔案的儲存格式是UTF-8
若是還是亂碼,可能是瀏覽器的顯示編碼格式問題
(新版谷歌瀏覽器需要安裝外掛,才能修改頁面編碼。下載地址:谷歌瀏覽器編碼外掛)
23 相對路徑
html,java工程中都會用到相對路徑
./ 代表當前資料夾(可以省略)
../ 代表退出到當前檔案位置的上一層資料夾
例如:
主資料夾 [
子資料夾1[ 資料夾a[index.html] ],
子資料夾2[index.js]
]
在index.html引入index.js,相對路徑:../../子資料夾2/index.js
向上退兩級 本地-> 子資料夾1 ->主資料夾 由主資料夾 進入 子資料夾2