Springmvc 一個簡單的管理系統 我所遇到的坑1(持續更新)

基礎小白發表於2019-05-16

前言

好久沒有用springmvc寫專案了,抽時間寫一個簡單的springmvc專案

是什麼(what)為什麼(why)怎麼做(how)

1.讀書破萬卷下筆如有神(理清思路,知識儲備和前期整理)

2.遇到問題,多方面尋找解決的思路及方法

3.總結,回顧寫過的坑

1.初始化資料庫

資料庫的話可以選擇mysql,oracle 最近oracle用得比較多所以選用oracle

(1).檢視資料檔案儲存路徑

select * from dba_data_files

(2).建立表空間

 

(3).建立自己的使用者物件

 

(4).登陸自己的使用者物件,建立表

 

資料庫初始化完成

------------------------------------------------------------------------------------

2.初始化maven專案

本人好久不用eclipse已經忘記怎麼使用eclipse 一直在用idea,感覺idea更智慧一點,

仁者見仁智者見智。不做過多的評論。

(1).先建立maven專案

需要注意這三個。

GroupID 是專案組織唯一的識別符號,實際對應JAVA的包的結構,是main目錄裡java的目錄結構。 

ArtifactID是專案的唯一的識別符號,實際對應專案的名稱,就是專案根目錄的名稱。

groupId 

定義了專案屬於哪個組,舉個例子,如果你的公司是mycom,有一個專案為myapp,那麼groupId就應該是com.mycom.myapp. 
artifacted 
定義了當前maven專案在組中唯一的ID,比如,myapp-util,myapp-domain,myapp-web等。 
version 
指定了myapp專案的當前版本,SNAPSHOT意為快照,說明該專案還處於開發中,是不穩定的版本。

配置自己的maven倉庫位置勾選override可以選擇設定maven的settings.xml檔案 系統會自動讀取settings.xml檔案中的maven倉庫的配置地址 

以後所有pom.xml檔案引用的jar包全部會放入maven倉庫。

 

建立maven專案存放的路徑。

(2).建立專案目錄結構

basics      存放基類 (一般不對外開放)
util           存放工具類(對外開放 包含basics中的方法)
controller 控制層
dao     資料訪問層
domain    實體層
Enum       列舉層
service     業務層

resources 存放配置檔案

test 存放單元測試檔案

webapp 存放頁面檔案

配置檔案的位置及頁面存放的位置

(3).建立好目錄結構開始準備搭建環境

 首先是引入專案所需要的jar包,寫在pom檔案中

  1 <properties>
  2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3     <!-- spring版本號 -->
  4     <spring.version>3.2.4.RELEASE</spring.version>
  5     <!-- mybatis版本號 -->
  6     <mybatis.version>3.2.4</mybatis.version>
  7     <!-- log4j日誌檔案管理包版本 -->
  8     <slf4j.version>1.6.6</slf4j.version>
  9     <log4j.version>1.2.9</log4j.version>
 10   </properties>
 11   <dependencies>
 12     <!--httpClient通訊工具類需要的依賴-->
 13     <dependency>
 14       <groupId>org.apache.httpcomponents</groupId>
 15       <artifactId>httpclient</artifactId>
 16       <version>4.3.6</version>
 17     </dependency>
 18     <dependency>
 19       <groupId>com.testingsyndicate</groupId>
 20       <artifactId>hc-jmx</artifactId>
 21       <version>2.1.0</version>
 22     </dependency>
 23     <dependency>
 24       <groupId>jstl</groupId>
 25       <artifactId>jstl</artifactId>
 26       <version>1.2</version>
 27     </dependency>
 28     <dependency>
 29       <groupId>junit</groupId>
 30       <artifactId>junit</artifactId>
 31       <version>4.9</version>
 32       <scope>test</scope>
 33     </dependency>
 34     <dependency>
 35       <groupId>commons-io</groupId>
 36       <artifactId>commons-io</artifactId>
 37       <version>2.4</version>
 38     </dependency>
 39     <dependency>
 40       <groupId>commons-codec</groupId>
 41       <artifactId>commons-codec</artifactId>
 42       <version>1.9</version>
 43     </dependency>
 44     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
 45     <dependency>
 46       <groupId>org.apache.commons</groupId>
 47       <artifactId>commons-lang3</artifactId>
 48       <version>3.4</version>
 49     </dependency>
 50     <!--上傳檔案-->
 51     <dependency>
 52       <groupId>commons-fileupload</groupId>
 53       <artifactId>commons-fileupload</artifactId>
 54       <version>1.3.1</version>
 55     </dependency>
 56     <dependency>
 57       <groupId>commons-dbcp</groupId>
 58       <artifactId>commons-dbcp</artifactId>
 59       <version>1.4</version>
 60     </dependency>
 61     <!-- 格式化物件,方便輸出日誌 -->
 62     <dependency>
 63       <groupId>com.alibaba</groupId>
 64       <artifactId>fastjson</artifactId>
 65       <version>1.1.41</version>
 66     </dependency>
 67     <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
 68     <dependency>
 69       <groupId>javax.servlet</groupId>
 70       <artifactId>jsp-api</artifactId>
 71       <version>2.0</version>
 72       <scope>provided</scope>
 73     </dependency>
 74     <!--spring-oxm依賴-->
 75     <dependency>
 76       <groupId>org.codehaus.castor</groupId>
 77       <artifactId>castor-xml</artifactId>
 78       <version>1.4.1</version>
 79     </dependency>
 80     <!--spring-json依賴-->
 81     <dependency>
 82       <groupId>com.fasterxml.jackson.core</groupId>
 83       <artifactId>jackson-databind</artifactId>
 84       <version>2.9.4</version>
 85     </dependency>
 86     <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
 87     <dependency>
 88       <groupId>org.aspectj</groupId>
 89       <artifactId>aspectjweaver</artifactId>
 90       <version>1.7.1</version>
 91     </dependency>
 92     <dependency>
 93       <groupId>org.springframework</groupId>
 94       <artifactId>spring-core</artifactId>
 95       <version>${spring.version}</version>
 96     </dependency>
 97     <dependency>
 98       <groupId>org.springframework</groupId>
 99       <artifactId>spring-web</artifactId>
100       <version>${spring.version}</version>
101     </dependency>
102     <dependency>
103       <groupId>org.springframework</groupId>
104       <artifactId>spring-oxm</artifactId>
105       <version>${spring.version}</version>
106     </dependency>
107     <dependency>
108       <groupId>org.springframework</groupId>
109       <artifactId>spring-tx</artifactId>
110       <version>${spring.version}</version>
111     </dependency>
112     <dependency>
113       <groupId>org.springframework</groupId>
114       <artifactId>spring-webmvc</artifactId>
115       <version>${spring.version}</version>
116     </dependency>
117     <dependency>
118       <groupId>org.springframework</groupId>
119       <artifactId>spring-aop</artifactId>
120       <version>${spring.version}</version>
121     </dependency>
122     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
123     <dependency>
124       <groupId>org.springframework</groupId>
125       <artifactId>spring-context</artifactId>
126       <version>${spring.version}</version>
127     </dependency>
128     <dependency>
129       <groupId>org.springframework</groupId>
130       <artifactId>spring-test</artifactId>
131       <version>${spring.version}</version>
132     </dependency>
133     <dependency>
134       <groupId>org.springframework</groupId>
135       <artifactId>spring-jdbc</artifactId>
136       <version>${spring.version}</version>
137     </dependency>
138     <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
139     <dependency>
140       <groupId>com.amazonaws</groupId>
141       <artifactId>aws-java-sdk</artifactId>
142       <version>1.11.221</version>
143     </dependency>
144     <!-- mybatis核心包 -->
145     <dependency>
146       <groupId>org.mybatis</groupId>
147       <artifactId>mybatis</artifactId>
148       <version>${mybatis.version}</version>
149     </dependency>
150 
151     <dependency>
152       <groupId>org.mybatis.generator</groupId>
153       <artifactId>mybatis-generator-core</artifactId>
154       <version>1.3.2</version>
155     </dependency>
156 
157     <!--fastJson的轉換器的配置  -->
158 
159     <!-- mysql -->
160  <!--   <dependency>
161       <groupId>mysql</groupId>
162       <artifactId>mysql-connector-java</artifactId>
163       <version>5.1.18</version>
164     </dependency>-->
165     <!-- oracle -->
166     <dependency>
167       <groupId>ojdbc5</groupId>
168       <artifactId>ojdbc5</artifactId>
169       <version>1.0.0</version>
170     </dependency>
171 
172     <!-- mybatis/spring包 -->
173     <dependency>
174       <groupId>org.mybatis</groupId>
175       <artifactId>mybatis-spring</artifactId>
176       <version>1.2.2</version>
177     </dependency>
178 
179 
180     <!-- 日誌檔案管理包 -->
181     <dependency>
182       <groupId>log4j</groupId>
183       <artifactId>log4j</artifactId>
184       <version>${log4j.version}</version>
185     </dependency>
186 
187     <dependency>
188       <groupId>org.slf4j</groupId>
189       <artifactId>slf4j-api</artifactId>
190       <version>${slf4j.version}</version>
191     </dependency>
192 
193     <dependency>
194       <groupId>org.slf4j</groupId>
195       <artifactId>slf4j-log4j12</artifactId>
196       <version>${slf4j.version}</version>
197     </dependency>
198 
199     <!-- 事務aop:config -->
200     <dependency>
201       <groupId>org.springframework</groupId>
202       <artifactId>spring-aspects</artifactId>
203       <version>4.0.3.RELEASE</version>
204     </dependency>
205 
206     <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok-maven -->
207     <dependency>
208       <groupId>org.projectlombok</groupId>
209       <artifactId>lombok-maven</artifactId>
210       <version>1.16.20.0</version>
211       <type>pom</type>
212     </dependency>
213     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
214     <!--lombok依賴-->
215     <dependency>
216       <groupId>org.projectlombok</groupId>
217       <artifactId>lombok</artifactId>
218       <version>1.16.10</version>
219     </dependency>
220     <!--poi匯入匯出依賴-->
221     <dependency>
222       <groupId>org.apache.poi</groupId>
223       <artifactId>poi</artifactId>
224       <version>3.17</version>
225     </dependency>
226   </dependencies>
pom檔案內容

然後新增springmvc所需要的配置檔案

web.xml配置檔案

View Code

applicationContext.xml spring容器配置檔案

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:tx="http://www.springframework.org/schema/tx"
 5        xmlns:mvc="http://www.springframework.org/schema/mvc"
 6        xmlns:aop="http://www.springframework.org/schema/aop"
 7        xmlns:context="http://www.springframework.org/schema/context"
 8        xsi:schemaLocation="http://www.springframework.org/schema/beans
 9                         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
10                         http://www.springframework.org/schema/tx
11                         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
12                         http://www.springframework.org/schema/mvc
13                         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
14                         http://www.springframework.org/schema/context
15                         http://www.springframework.org/schema/context/spring-context-3.2.xsd
16                         http://www.springframework.org/schema/aop
17                         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ">
18 
19     <!-- 載入配置檔案 -->
20     <context:property-placeholder location="classpath:config.properties"/>
21 
22     <!-- 資料來源 -->
23     <bean id="data" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
24         <property name="driverClassName" value="${jdbc.driver}"></property>
25         <property name="url" value="${jdbc.url}"></property>
26         <property name="username" value="${jdbc.username}"></property>
27         <property name="password" value="${jdbc.password}"></property>
28         <!-- 高階引數 -->
29         <property name="minIdle" value="1"></property>
30         <property name="maxWait" value="3000"></property>
31         <property name="initialSize" value="1"></property>
32         <property name="maxActive" value="3"></property>
33     </bean>
34 
35     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
36         <property name="dataSource" ref="data"/>
37         <property name="mapperLocations">
38             <list>
39                 <value>classpath:mapper/*Mapper.xml</value>
40             </list>
41         </property>
42         <property name="typeAliasesPackage" value="com.yszb.domain"></property>
43     </bean>
44 
45     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
46         <property name="basePackage" value="com.***.dao"/>
47         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
48     </bean>
49 
50     <!-- 事物 半成品-->
51     <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
52         <property name="dataSource" ref="data"></property>
53     </bean>
54     <!-- 註解掃描 -->
55     <!--指定spring注入層 -->
56     <context:component-scan base-package="com.****" use-default-filters="true">
57         <!--排除controller註解-->
58         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
59     </context:component-scan>
60 
61     <!-- 為@Transactional指明半成品 -->
62     <tx:annotation-driven transaction-manager="tx"/>
63 
64     <!-- 通知spring 識別的@Aspect 註解 -->
65     <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
66 
67 
68 </beans>
applicationContext.xml

這個檔案的作用是配置資料庫連線的dbcp連線池 具體配置資訊在config.properties檔案中。

sqlSessionFactory:是mybatis中的一箇中要的物件,通俗講它是用來建立sqlSession物件的,而sqlSession用來運算元據庫的。

mapperLocations:裡面配置的是指明在dao層所對映的mapper檔案的位置。

typeAliasesPackage:它一般對應我們的實體類所在的包,這個時候會自動取對應包中不包括包名的簡單類名作為包括包名的別名。多個package之間可以用逗號或者分號等來進行分隔(value的值一定要是包的全)

MapperScannerConfigurer :自動掃描 將Mapper介面生成代理注入到Spring

<property name="basePackage" value="com.***.dao"/> 存放資料訪問介面的位置

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>之前配置好的SqlSessionFactoryBean的name

註解掃描的要注意一個問題    use-default-filters="true"  配置為true註解掃描的時候就會排除@controller註解,如果配置為false那麼如果該包內包含@controller則全部掃描<context:component-scan base-package="com.***" use-default-filters="true">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

config.properties檔案

1 jdbc.driver=oracle.jdbc.driver.OracleDriver
2 jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
3 jdbc.username=****
4 jdbc.password=****
View Code

log4j配置檔案

 1 log4j.rootLogger=ERROR, stdout
 2 
 3 # SqlMap logging configuration...
 4 log4j.logger.com.ibatis=DEBUG
 5 log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
 6 log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
 7 log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
 8 log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
 9 log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
10 log4j.logger.java.sql.Connection=DEBUG
11 log4j.logger.java.sql.Statement=DEBUG
12 log4j.logger.java.sql.PreparedStatement=DEBUG
13 log4j.logger.java.sql.ResultSet=DEBUG
14 
15 # Console output...
16 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
17 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
18 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
View Code

dispatcher-servlet.xml配置檔案

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" 
 3        xmlns:mvc="http://www.springframework.org/schema/mvc"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7                            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 8                            http://www.springframework.org/schema/mvc
 9                            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
10                            http://www.springframework.org/schema/context
11                            http://www.springframework.org/schema/context/spring-context-3.2.xsd">
12     
13     
14     <context:component-scan base-package="com.***" use-default-filters="false">
15         <!-- 如果類上有@Controller註解,則類中的所有註解都被掃描 -->
16         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
17     </context:component-scan>
18     <!-- 註解驅動  -->
19     <mvc:annotation-driven></mvc:annotation-driven>    
20     <!-- 試圖解析器 -->
21     <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
22         <property name="prefix" value="/WEB-INF/views/"></property>
23         <property name="suffix" value=".jsp"></property>
24     </bean>
25     <!-- 檔案上傳解析器 -->
26     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
27         <!-- 最大未byte -->
28         <property name="MaxUploadSize" value="2097152"></property>
29     </bean>
30 
31     <mvc:default-servlet-handler/>
32     
33     
34 </beans>
View Code

<mvc:default-servlet-handler/>

注意檢視解析器的配置

這個位置一定要寫全/WEB-INF/views/

初始化專案完成

------------------------------------------------------------------------------------

這裡遇到了一個問題,通常情況下WEB-INF目錄是受伺服器保護的,如果把vises資料夾直接放到wabapp下面則啟動專案可以直接訪問頁面

路徑:http://localhost:8080/***/views/login.jsp

但是把vises檔案放到WEB-INF在訪問是會一直報404這時候如何解決問題?

訪問login.jsp則需要做一個controller入口

路徑:http://localhost:8080/***/login/userlogin

這樣訪問controller根據返回值直接去找檢視解析器前後匹配,就會找到成功頁面。

 

相關文章