1. 程式人生 > >Eclipse+sts 搭建ssm環境/使用 隨記

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