整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          jar包沖突組建設計書

          jar包沖突組建設計書

          背景

          實際開發過程中,使用maven管理jar給我們開發帶來了很多便利,不需要自己一個一個的jar包下載了,只需要配置個pom配置文件就可以了,寫上對應坐標和倉庫地址就可以了。但是jar沖突沒問題沒有解決,有沖突的jar包maven不會給我們檢查出來還是會根據我們的配置進行下載,等到編譯才會報錯,并且報錯信息很晦澀,需要面向百度查一會可能才能定位出問題。

          這時候我們迫切需要有個東東可以提前告訴我們我的工程里有內奸,需要及時剔除,否則會影響軍心。

          2. 功能設計

          1、maven插件,通過參數指令傳給插件

          2、工程里所有jar包沖突預警

          3、工程中不能共存jar預警

          4、自定義規則預警

          3. 功能技術方案

          3.1 詳細技術方案

          1、maven插件開發,繼承AbstractMojo,入口方法execute,命令參數可以通過注解方式傳入,例如:@Parameter(property="groupId"),邊亮可以獲取groupId對應傳入的參數值。

          2、獲取工程中所有的jar包及類:通過Maven獲取MavenProject,拿到工程后就可以拿到所有的jar及其所有依賴樹,把所有jar包放到一個大map中。

          3、jar包沖突算法:

          A、相同jar包版本沖突:通過自定義規則配置到屬性文件中,定義某jar的哪些版本水火不相容。規則示例:xxxgroupId:xxxArtifactId>5.1.8,那么程序則認為這個坐標的jar包大于我要發(5.1.8)時就是內奸,需要除掉。

          B、相同jar包版本沖突:倆jar包中有class個數不同或者個數相同但是MD5后結果不同或者倆jar包中有相同類大小不同這三種情況認為此山不容倆jar包。具體代碼此處省略一萬行。

          C、不相同jar包沖突:通過自定義規則配置到屬性文件中,定義某jar的某個版本和別的某jar包某個版本互看不順眼。規則示例:if 王寶強groupId:王寶強ArtifactId >=2.2.2 then 經紀人groupId:經紀人ArtifactId>3.3.3,此規則代表王寶強jar包版本222與經紀人jar包版本333不能共存,否則會產生綠帽子,給出綠帽告警。

          已知的會產生綠帽告警的有如下:

          log4j-over-slf4j 和 slf4j-log4j12 不能共存。

          jcl-over-slf4j 和 slf4j-jcl 不能共存。

          jcl-over-slf4j 和 commons-logging 不能共存。

          出處:https://www.slf4j.org/codes.html#version_mismatch。


          部分核心代碼展示

          完成SpringBoot打包獨立可執行Web項目(2)

          章通過名片管理系統的設計與實現,講述如何使用SSM框架來實現一個Web應用。通過本章的學習,掌握SSM框架應用開發的流程、方法以及技術

          01、系統設計

          1●系統功能需求

          名片管理系統是針對注冊用戶使用的系統。系統提供的功能如下:

          1.非注冊用戶可以注冊為注冊用戶。

          2.成功注冊的用戶,可以登錄系統。

          3.成功登錄的用戶,可以添加、修改、刪除以及瀏覽自己客戶的名片信息。

          4.成功登錄的用戶,可以修改密碼

          2●系統模塊劃分

          用戶登錄成功后,進入管理主頁面(main.jsp)可以對自己的客戶名片進行管理。系統模塊劃分,如圖4.1所示。

          ■ 圖4.1 名片管理系統

          02、數據庫設計

          系統采用加載純Java數據庫驅動程序的方式連接MySQL5.x數據庫。在MySQL5.x的數據庫ch4中,共創建兩張與系統相關的數據表:usertable和cardtable。

          1●數據庫概念結構設計

          根據系統設計與分析,可以設計出如下數據結構:

          1.用戶

          包括ID、用戶名以及密碼,注冊用戶名唯一。

          2.名片

          包括ID、名稱、電話、郵箱、單位、職務、地址、Logo以及所屬用戶。其中,ID唯一,“所屬用戶”與“1.用戶”的用戶ID關聯。

          根據以上數據結構,結合數據庫設計特點,可畫出如圖4.2所示的數據庫概念結構圖。

          ■ 圖4.2 數據庫概念結構圖

          其中,ID為正整數,值是從1開始遞增的序列。

          2●數據庫邏輯結構設計

          將數據庫概念結構圖轉換為MySQL數據庫所支持的實際數據模型,即數據庫的邏輯結構。

          用戶信息表(usertable)的設計,如表4.1所示。

          ■ 表4.1 用戶信息表

          名片信息表(cardtable)的設計,如表4.2所示。

          ■ 表4.2 名片信息表

          03、系統管理

          1●JSP頁面管理

          為方便管理,在/WebContent/static目錄下存放與系統相關的靜態資源,如BootStrap相關的CSS與JS;在/WEB-INF/jsp目錄下存放與系統相關的JSP頁面。

          04、名片管理

          1●Controller實現

          在本系統中,與名片管理相關的功能包括添加、修改、刪除、查詢等,由控制器類CardController負責處理。由系統功能需求可知,用戶必須成功登錄才能管理自己的名片,所以,CardController處理添加、修改、刪除、查詢名片等功能前,需要進行登錄權限驗證。在CardController中,使用@ModelAttribute注解的方法進行登錄權限驗證。

          2●Service實現

          在本系統中,與名片管理相關的功能包括添加、修改、刪除、查詢等,由控制器類CardController負責處理。由系統功能需求可知,用戶必須成功登錄才能管理自己的名片,所以,CardController處理添加、修改、刪除、查詢名片等功能前,需要進行登錄權限驗證。在CardController中,使用@ModelAttribute注解的方法進行登錄權限驗證。

          3●Dao實現

          Dao層是數據訪問層,即@Repository注解的數據操作接口(接口中的方法與SQL映射文件中元素的id對應),與名片管理相關的數據訪問層為CardMapper。

          4●SQL映射文件

          SQL映射文件的namespace屬性與數據操作接口對應。與名片管理功能相關的SQL映射文件是CardMapper.xml(位于dao包中)

          5●添加名片

          首先,用戶登錄成功后,進入名片管理系統的主頁面。然后,用戶在名片管理主頁面單擊“添加名片”超鏈接打開添加名片頁面。最后,用戶輸入客戶名片的姓名、電話、E-Mail、單位、職務、地址、Logo后,單擊“添加”按鈕實現添加。如果成功,則跳轉到名片管理主頁面;如果失敗,則回到添加名片頁面。

          addCard.jsp頁面實現添加名片信息的輸入界面,如圖4.3所示。

          ■ 圖4.3 添加名片頁面

          單擊圖4.3中“添加”按鈕,將添加請求通過“card/addCard?act=add”提交給控制器類CardController(4.5.2節)的addCard方法進行添加功能處理。添加成功跳轉到名片管理主頁面;添加失敗回到添加名片頁面。

          6●名片管理主頁面

          用戶登錄成功后,進入名片管理系統的主頁面(main.jsp),運行效果如圖4.4所示。

          ■ 圖4.4 名片管理主頁面

          在主頁面中單擊“詳情”超鏈接,打開名片詳細信息頁面detail.jsp。“詳情”超鏈接的目標地址是個url請求。該請求路徑為“card/detail?id=${card.id}&act=detail”。根據請求路徑找到對應控制器類CardController的detail方法處理查詢一個名片功能。根據動作類型(“修改”以及“詳情”),將查詢結果轉發到不同視圖。名片詳細信息頁面cardDetail.jsp運行效果如圖4.5所示。

          ■ 圖4.5 名片詳情

          7●修改名片

          單擊名片管理主頁面中“修改”超鏈接,打開修改名片信息頁面updateCard.jsp。“修改”超鏈接的目標地址是url請求card/detail?id=${card.id}&act=update。找到對應控制器類CardController的方法detail,在該方法中,根據動作類型,將查詢結果轉發給updateCard.jsp頁面顯示。

          輸入要修改的信息后,單擊“修改”按鈕,將名片信息提交給控制器類,找到對應控制器類CardController的方法addCard,在addCard方法中根據動作類型,執行修改的業務處理。修改成功,進入名片管理主頁面。修改失敗,回到updateCard.jsp頁面。

          updateCard.jsp頁面的運行效果如圖4.6所示。

          ■ 圖4.6 updateCard.jsp頁面

          8●刪除名片

          在名片管理主頁面中,單擊“刪除”超鏈接,將要刪除名片的ID通過Ajax提交給控制器類。找到對應控制器類CardController的方法delete,在該方法中,執行刪除的業務處理。刪除成功后,進入管理主頁面

          05、用戶相關

          1●Controller實現

          在本系統中,與用戶相關的功能包括用戶注冊、用戶登錄以及用戶檢查等,由控制器類UserController負責處理。

          2●Service實現

          與用戶相關的Service接口和實現類分別為UserService和UserServiceImpl。控制器獲取一個請求后,需要調用Service層中業務處理方法,在Service層中需要調用Dao層。所以,Service層是控制器層和Dao層的橋梁。UserService接口的代碼略。

          UserServiceImpl實現類的核心代碼如下:

          @Service
          public class UserServiceImpl implements UserService{
            @Autowired
            private UserMapper userMapper;
            /***
             * 檢查用戶名是否可用
             */
            @Override
            public String checkUname(MyUser myUser) {
              List<MyUserTable> userList=userMapper.selectByUname(myUser);
              if(userList.size() > 0)
                return "no";
              return "ok";
            }
            /**
             * 實現注冊功能
             */
            @Override
            public String register(MyUser myUser) {
              //將明文變成密文
              myUser.setUpwd(MD5Util.MD5(myUser.getUpwd()));
              if(userMapper.register(myUser) > 0)
                return "login";
              return "register";
            }
            /**
             * 實現登錄功能
             */
            @Override
            public String login(MyUser myUser, Model model, HttpSession session) {
              //ValidateCodeController中的rand
              String code=(String)session.getAttribute("rand");
              if(!code.equalsIgnoreCase(myUser.getCode())) {
                model.addAttribute("errorMessage", "驗證碼錯誤!");
                return "login";
              }else {
                //將明文變成密文
                myUser.setUpwd(MD5Util.MD5(myUser.getUpwd()));
                List<MyUserTable> list=userMapper.login(myUser);
                if(list.size() > 0){
                  session.setAttribute("userLogin", list.get(0));
                  return "redirect:/card/selectAllCardsByPage?currentPage=1";
                }else {
                  model.addAttribute("errorMessage", "用戶名或密碼錯誤!");
                  return "login";
                }
              }
            }
          }

          3●Dao實現

          Dao層是數據訪問層,即@Repository注解的數據操作接口(接口中的方法與SQL映射文件中元素的id對應),與用戶相關的數據訪問層為UserMapper。

          4●SQL映射文件

          SQL映射文件的namespace屬性與數據操作接口對應。與用戶相關的SQL映射文件是UserMapper.xml(位于dao包中),具體代碼如下:

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          <mapper namespace="dao.UserMapper">
            <select id="selectByUname"  resultType="MyUserTable" parameterType="MyUser">
              select * from usertable where uname=#{uname}
            </select>
            <insert id="register" parameterType="MyUser">
              insert into usertable (id,uname,upwd) values(null,#{uname},#{upwd})
            </insert>
            <select id="login" parameterType="MyUser" resultType="MyUserTable">
              select * from usertable where uname=#{uname} and upwd=#{upwd}
            </select>
          </mapper>

          5●注冊

          在登錄頁面login.jsp,單擊“注冊”鏈接,打開注冊頁面register.jsp,效果如圖4.7所示。

          ■ 圖4.7 注冊頁面

          在圖4.7所示的注冊頁面中,輸入“姓名”后,系統將通過Ajax提交“user/checkUname” 請求檢測“姓名”是否可用。輸入合法的用戶信息后,單擊“注冊”按鈕,實現注冊功能。

          6●登錄

          在瀏覽器中,通過地址http://localhost:8080/ch4打開登錄頁面login.jsp,效果如圖4.8所示。

          ■ 圖4.8 登錄界面

          用戶輸入姓名、密碼和驗證碼后,系統將對姓名、密碼和驗證碼進行驗證。如果姓名、密碼和驗證碼同時正確,則登錄成功,將用戶信息保存到session對象,并進入系統管理主頁面(main.jsp);如果輸入有誤,則提示錯誤。

          7●修改密碼

          單擊名片管理主頁面中的“修改密碼”菜單,打開密碼修改頁面updatePwd.jsp。密碼修好頁面效果如圖4.9所示。

          ■ 圖4.9 密碼修改頁面

          在圖4.9中輸入“新密碼”后,單擊“修改”按鈕,將請求通過“card/updatePwd”提交給控制器類。根據請求路徑找到對應控制器類CardController的updatePwd方法處理密碼修改請求。這里找控制器類CardController處理密碼修改,是因為用戶必須登錄成功后才能修改密碼。

          8●安全退出

          在名片管理主頁面中,單擊“安全退出”菜單,將返回登錄頁面。“安全退出”超鏈接的目標地址是一個請求card/loginOut,找到控制器類CardController的對應處理方法loginOut。這里找控制器類CardController處理安全退出,是因為用戶必須登錄成功后才能安全退出。

          06、小結

          本章講述了名片管理系統的設計與實現。通過我們的學習,不僅掌握SSM框架整合開發的流程、方法和技術,還應該熟悉名片管理的業務需求、設計以及實現。


          主站蜘蛛池模板: 中文字幕一区一区三区| 国产精品熟女视频一区二区| 男插女高潮一区二区| 日本免费一区尤物| 亚洲一区二区三区在线网站| 国产一区二区三区免费视频| 久久无码AV一区二区三区| 农村人乱弄一区二区| 日本v片免费一区二区三区| 午夜福利一区二区三区在线观看| 国产成人一区二区三区电影网站| 中文字幕一区二区三区久久网站 | 亚洲中文字幕无码一区| 无码精品人妻一区| 国产日韩精品一区二区三区| 毛片一区二区三区无码| 国产韩国精品一区二区三区久久| 无码国产精成人午夜视频一区二区 | 春暖花开亚洲性无区一区二区 | 国产成人精品一区二三区| 无码少妇一区二区浪潮免费| 亚洲乱码一区av春药高潮| 日韩精品一区二区亚洲AV观看 | 日韩精品一区二区午夜成人版| 精品无码人妻一区二区三区18| 97一区二区三区四区久久| 精品一区二区三区在线观看视频| 无码人妻久久一区二区三区 | 国产自产V一区二区三区C| 国产一在线精品一区在线观看| 成人乱码一区二区三区av| 国产天堂一区二区综合| 亚洲综合国产一区二区三区| 亚洲爆乳无码一区二区三区| 一区二区免费视频| 亚洲狠狠狠一区二区三区| 日本激情一区二区三区| 亚州AV综合色区无码一区| 亚洲福利视频一区二区三区| 成人免费观看一区二区| 鲁丝丝国产一区二区|