慕課網SSMOA辦公系統

目錄

 需求分析html

  1 用例圖java

 系統設計web

 包及全局配置spring

 數據庫設計數據庫

 工具類編程

 具體功能實現架構

  1 dao層功能實現app

  2 編碼過濾器及登錄攔截器框架

  3 單元測試webapp

 遇到的問題總結

  1 新建一個Modul不會打開新頁面

  2 導入依賴時標紅

  3 Resources中文件名稱有點但不意味着分層

  4 不一樣模塊輸出的日誌不一樣

  5 ${catalina.base}位置在何處

  6 /* 和 / 的區別

  7 設置頁面的根URL並統一導入

需求分析

1 用例圖

用例圖是由產品經理產生的,主要是從用戶的角度分析產品的功能和動態行爲

上圖主要是從人員的角度來分析整個系統。這個系統最重要的步驟就是處理報銷單,那麼處理報銷單的流程以下圖所示

系統設計

對於整個系統採用SSM框架,並採用三層架構的方式 :持久層——Mybatis、表現層——Spring MVC、業務層——JavaBean。每層分別對應的列名爲oa_dao、oa_web、oa_biz。

包及全局配置

對於配置這一點其實在一開的階段並無辦法作到面面俱到,只能規定一些命名規範。對於全局的配置能夠參考註釋。

數據庫設計

根據用例的分析,和項目的需求應該設計出整體的數據庫

工具類

在編程中經常須要一些輔助類來幫助實現功能,所以有了工具類,可是這些工具類可能一開始並不肯定有哪些,所以工具類下的各類類是隨着代碼的需求變化的。

具體功能實現

1 dao層功能實現

部門管理

部門與員工相似都須要增刪改查操做,可是部門更的屬性跟簡單一點,所以先寫部門管理,代碼的具體實現流程爲:

  實體類——dao接口——mapper映射方法——biz層接口——biz層實現接口——表現層實現

在部門裏具體編寫代碼時就是按照常規的CRUD進行的,具體代碼的分析能夠參考源代碼中註釋。其餘模塊的功能是相似的,只要分析一下源碼就能夠了

2  編碼過濾器及登錄攔截器

這兩個功能在oa_web中global包下,是比較經常使用的功能,具體分析能夠參考代碼註釋。

3 單元測試

當寫完功能代碼後須要進行單元測試,具體的單元測試代碼能夠查看源碼及註釋。下面只是給出所用到的依賴

<!-- 單元測試 -->
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
 </dependency>
<!-- Spring test -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${spring.version}</version>
</dependency>

具體的代碼能夠參考項目的源碼

遇到的問題總結

1 新建一個Modul不會打開新頁面

由於想要在原有的project上要新建一個新的項目,所以直接按照以下操做,可是發現一隻都是在原頁面上打開的不會新建一個頁面,後來發現這是我操做失誤了。

正確操做:選擇上面的Project,而後選擇Maven建立一個新的空白項目就會打開一個新的頁面。

 

2 導入依賴時標紅

在pom.xml時導入依賴發現標紅了以下圖所示,後來發現是這是由於idea導入出現了問題的緣由,能夠右鍵項目,選擇Maven-Reimport。

 

 

 當還不行時就把之前導入的所有刪除再從新導入便可。

3 Resources中項目文件有點但不意味着分層

在dao層有兩個名字同樣的文件夾,可是所表示的意義是不一樣的,在java中表示的包,採用com.imooc.oa會自動的在本地建立com\imooc\oa文件夾可是在resources中直接寫com.imooc.oa.dao其實只會在本地中建立一個com.imooc.oa.dao的文件夾,並無層次目錄結構的。一開始由於不清楚這個致使排查了很久的錯誤。

4 不一樣模塊輸出的日誌不一樣

在測試logback時分別在oa_dao,oa_biz進行了日誌測試,發如今oa_dao測試日誌時並無任何新的文件產生,只是在控制檯上有日誌輸出;在oa_biz時發如今該項目的路徑下建立了一個新的文件夾catalina.base_IS_UNDEFINED而後在這個文件夾下面有日誌記錄。

這些問題產生的緣由是由於配置文件的設置,這些問題其實本質上而言都是正常的,在配置中有日誌設置:${catalina.base}/logs/webapps可是在biz中並無配置Tomcat有到哪裏去找Tomcat的文件目錄那,所以在biz項目新建立了一個文件夾,文件名字其實已經說明問題了:is undefined 沒有被定義。

注:其實在真實項目中應該只在oa_web中配置這個日誌模塊就能夠了,在這裏是爲了學習,所以在每一個模塊中都配置了一個logback.xml。

5 ${catalina.base}位置在何處

其實只要看控制檯的輸出就能夠明白

 此外控制檯日誌其實還有許多有效的信息能夠查看的

 

 而下面則是記錄了尋找logback配置文件的過程

注:此處並非說必定要把全部的日誌打印所有看懂,可是必定要明白這些日誌記錄的信息,其實好多問題的出現都是由於不瞭解內部工做。

6 /* 和 / 區別

在SpringMVC的配置中若是採用/*進行匹配的話就會形成每個頁面都登陸不進去

    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

< url-pattern > / </ url-pattern >   不會匹配到*.jsp,即:*.jsp不會進入spring的 DispatcherServlet類 。
< url-pattern > /* </ url-pattern >  會匹配*.jsp,會出現返回jsp視圖時再次進入spring的DispatcherServlet 類,致使找不到對應的controller因此報404錯。 

總之,關於web.xml的url映射的小知識:
< url-pattern>/</url-pattern>  會匹配到/login這樣的路徑型url,不會匹配到模式爲*.jsp這樣的後綴型url
< url-pattern>/*</url-pattern> 會匹配全部url:路徑型的和後綴型的url(包括/login,*.jsp,*.js和*.html等)

在這個項目中:由於用了/,不會攔截jsp文件,那麼首先會打開index.jsp,在index.jsp中有一個路徑跳轉action那麼這個action便會被攔截開始執行流程。

7 設置頁面的根URL並統一導入

沒有配置前,在Tomcat設置中只要一修改Application context中的名稱就會形成項目崩潰。

 後來發現緣由是由於整個項目路徑是寫死的,所以要把項目改爲能夠靈活配置的,下面的代碼是獲取到頁面的根url。

<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    request.setAttribute("ctx", basePath);
%>

通常使用上述語句來獲取當前頁面的根url,在代碼中使用${ctx}便可得到所配置的url

<!-- 爲全部的頁面都引入一個共同的頁面 -->
<jsp-config>
    <jsp-property-group>
        <!-- 全部的頁面 -->
        <url-pattern>*.jsp</url-pattern>
        <!-- 待引入頁面的jsp路徑-->
        <include-prelude>/WEB-INF/路徑</include-prelude>
    </jsp-property-group>
</jsp-config>

通常設置根url的在index.jsp中或者某些公共的jsp文件中,能夠在web.xml中配置讓全部的jsp文件都導入這個只有根url的jsp文件,在其餘jsp文件中只須要引入一個base便可。

<base href="value">

當引入公共的頭部後還要在index.jsp重定向一次。

0

相關文章
相關標籤/搜索