IDEA(一) 使用IDEA搭建SSM框架項目

来源:https://www.cnblogs.com/lyldelove/archive/2020/04/04/12624256.html
-Advertisement-
Play Games

1. 新建項目 IDEA中新建Maven項目,使用Maven Archetype原型:maven archetype webapp 新建項目結構為: 2. 新建包目錄 新建Java代碼目錄:src.main.java 下新建分層模型package,帶上項目的 (僅供參考) :存放全局變數,公共枚舉等 ...


1. 新建項目

IDEA中新建Maven項目,使用Maven Archetype原型:maven-archetype-webapp

新建項目結構為:

image-20200403062942661

2. 新建包目錄

  • 新建Java代碼目錄:src.main.java

    src.main.java下新建分層模型package,帶上項目的groupId(僅供參考)

    • common:存放全局變數,公共枚舉等

    • base:存放基礎組件,如工具類,過濾器,配置類等

    • controller:控制層

    • vo:前端傳輸過來的對象,如封裝的請求

    • bo:業務對象,可能是多個dto/entity的整合

    • service:業務層

      • intf:介面

      • impl:實現

    • dao:資料庫訪問層

      • intf:介面(MyBatis中為xxxMapper.java)
      • impl:實現(MyBatis中自動生成實現類)
    • dto:數據傳輸對象,存放多表聯合對象

    • entity:實體,對應資料庫表

  • 新建資源目錄:src.main.resources

3. 按需引入pom

新建工程後,不建議一次性引入所有的依賴,而是在需要的時候逐步引入,這樣雖然會踩很多坑,但是可以熟悉每個依賴的作用,防止以後踩更大的坑。

新建工程後,第一次需要引入的依賴有:

  • Servlet API

    Java Web的應用伺服器會帶有Servlet API,所以這個依賴的scope設成provided

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet.version}</version>
        <scope>provided</scope>
    </dependency>
    
  • Spring Web Mvc

    Spring Web依賴,包括Spring MVC,IDEA會把Spring Web Mvc所依賴的其他Spring模塊也引入,有:aop、beans、context、core、expression、web,其餘的模塊不用引,但是為了擴展性,還是引入比較好。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    

4. 配置web.xml

4.1 配置ContextLoaderListener

ContextLoaderListener是ServletContext監聽器,用於創建容器對象,並且將ApplicationContext對象放到Application域中,並指定spring核心配置文件。

關於ContextLoaderListener的具體作用及源碼,會另寫文章分析。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
</context-param>
4.2 配置DispatcherServlet

DispatcherServlet是前端控制器,配置中指定Spring MVC的配置文件。

關於DispatcherServlet的具體作用及源碼,會另寫文章分析。

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
4.3 處理中文亂碼問題

配置CharacterEncodingFilter過濾器處理中文亂碼問題,要放到所有過濾器之前。

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceRequestEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
4.4 整合Restful風格請求

配置HiddenHttpMethodFilter過濾器,將get/post請求轉換為標準的http方法,使得支持GET、POST、PUT與DELETE請求。

<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

5. 配置Spring配置文件

Spring配置文件路徑是配置在web.xml ContextLoaderListener中。

初始的Spring配置文件需要配置包掃描,將滿足條件的Java Bean註入到Spring容器中,由Spring進行管理。

<!--  設置包掃描,不掃描Controller  -->
<context:component-scan base-package="com.lyldelove">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

6. 配置Spring MVC配置文件

Spring MVC配置文件路徑是配置在web.xml DispatcherServlet中。

初始的Spring MVC配置文件需要配置以下3項:

  • 包掃描。掃描所有Controller
  • 開啟基於註解驅動的mvc。開啟後可使用Spring MVC的高級功能
  • 配置預設的靜態資源處理器
  • 配置視圖解析器
<!--  設置包掃描,掃描所有的Controller  -->
<context:component-scan base-package="com.lyldelove" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!--  開啟基於註解驅動的mvc,開啟後可使用Spring MVC的高級功能  -->
<mvc:annotation-driven/>

<!--  配置預設的靜態資源處理器  -->
<mvc:default-servlet-handler/>

<!--  配置視圖解析器  -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置解析前尾碼-->
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

靜態資源的處理,還可以通過<mvc:resources />來解析配置

7. 引入前端JS/CSS

前端所需的js/css等靜態文件,一般放在webapp目錄下

8. 日誌框架整合

在整合其他框架的過程中,項目可能會有很多異常/報錯,我們需要通過日誌來查找問題。

日誌框架需要日誌門面及日誌實現,我們採用slf4j做日誌門面,log4j做日誌實現,看如何整合。

引入依賴:

<!--  日誌,slf4j做日誌門面,log4j做日誌實現  -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j.version}</version>
</dependency>

引入slf4j-log4j12後,IDEA會自動引入slf4j-api和log4j的依賴,不需要再顯示引入

log4j會自動掃描src/main/resources目錄下的log4j.xmllog4j.properties,我們把配置文件放在此目錄下。

#log4j.properties

#日誌輸出級別
log4j.rootLogger=debug,stdout,D,E

#設置stdout的日誌輸出控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#輸出日誌到控制台的方式,預設為System.out
log4j.appender.stdout.Target = System.out
#設置使用靈活佈局
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#靈活定義輸出格式
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p]  method:[%c (%rms)] - %m%n

9. 數據源整合

以Druid為例,需要引入Spring JDBCDruid的依賴,同時資料庫連接信息最好單獨出一個配置文件來管理,再在Spring配置文件中引入外部的配置文件。

依賴:

<!--  Spring jdbc  -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

<!--  數據源Druid  -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>${druid.version}</version>
</dependency>

註意:要記得引入Spring jdbc的依賴,否則後面出問題會很難找(有日誌還好找一點,所以最好日誌框架的整合放到最前面)。

Spring配置:

<!--  載入外部配置文件  -->
<context:property-placeholder location="classpath:jdbc.properties"/>

<!--  配置Druid數據源  -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>

    <!--  指定連接池中最大的活躍連接數  -->
    <property name="maxActive" value="20"/>
    <!--  指定啟動連接池時,初始建立的連接數量  -->
    <property name="initialSize" value="1"/>
    <!--  指定連接池等待連接返回的最大等待時間,毫秒單位.  -->
    <property name="maxWait" value="60000"/>
    <!--  指定必須保持連接的最小值(For DBCP and Tomcat connection pools)  -->
    <property name="minIdle" value="1"/>
</bean>

10. MyBatis + MySql整合

依賴:

<!--  Spring jdbc  -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

<!--  MyBatis  -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>

<!--  MyBatis整合spring  -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>${mybatis.spring.version}</version>
</dependency>

<!--  MySQL驅動  -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>

Spring配置文件中配置MyBatis:

需要配置下麵2項:

  • 配置sqlSessionFactory
  • 配置映射掃描器
<!--  配置MyBatis sqlSessionFactory  -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!--  指定MyBatis 的 XML 配置文件路徑  -->
    <property name="configLocation" value="classpath:mybatis.xml"/>
    <!--  指定映射器 XML 文件路徑  -->
    <property name="mapperLocations" value="classpath:mapper/**/*.xml"/>
</bean>

<!--  掃描MyBatis映射器  -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.lyldelove.dao"/>
</bean>

MyBatis配置文件:

在Spring配置文件sqlSessionFactory配置項中配置了MyBatis的配置文件,MyBatis的配置文件中,需要配置駱駝命名法則,還可以配置別名。

<settings>
    <!--  其餘駱駝命名法則,是的資料庫欄位可以對應JavaBean屬性  -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

<!--  起別名,這樣在Mapper.xml文件中,resultType就可以簡寫,預設規則是JavaBean類名首字母小寫  -->
<typeAliases>
    <package name="com.lyldelove.entity.system"/>
</typeAliases>

11. 需要深入挖掘的點

  • ContextLoaderListener作用及源碼分析
  • DispatcherServlet作用及源碼分析
  • Filter過濾器工作原理
  • Spring/Spring MVC配置文件解析及相關配置項的作用和源碼分析
  • 日誌框架深入,配置項
  • 日誌框架是如何整合進來的,實現原理
  • 什麼是數據源

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 前端的小伙伴在面試的時候,幾乎都會遇到一道這樣的面試題: add(1)(2)(3)(4)輸出結果為10。在第一次看到這道面試題的時候,很多小伙伴感到了迷茫!借用王寶強在《人在囧途》中的表演:啥啥啥,這寫的都是啥?下麵胡哥為各位小伙伴帶來這道題的揭秘。 一、核心點 基礎函數的變種 函數柯里化 我 ...
  • vertical-align屬性主要用於改變行內元素的對齊方式,對於行內佈局影響很大,如果不瞭解的話,我們開發調整樣式的時候很容易出錯。 網上關於這個屬性的原理說得很是複雜,看一眼就讓人覺得望而生畏,而且大可不必完全理解其原理,只要懂得其規律,我們足夠使用即可,下麵把我的理解分享給大家: 基線 要了 ...
  • 目前室內三維地圖如何輕量化,能夠在手機微信、電腦瀏覽器等平臺快速顯示地圖,顯示的地圖性能好,轉動地圖不卡是大家都要面對的問題, 使用室內三維地圖引擎ESMap後目前可以不用操心這方面的問題,開發只需要關心設備如何加到地圖上進行管理,本文章主要介紹攝像頭圖層、消防設備圖層和人員軌跡圖層進行介紹,方便大... ...
  • JavaScript 是基於面向對象和事件驅動的一門語言,事件模型是 DOM 中至關重要的內容,理解事件驅動機制、事件反饋、事件冒泡、事件捕獲以及事件委托能幫助我們更好的處理事件,寫出更優的代碼 ...
  • 01. 聊 啥 關註“一猿小講”的都知道,我們之前分享過應用架構、應用監控、日誌歸集以及程式員日常內心的那些小揪揪,幾乎成了小講、雜談的一畝三分地。 說實話,挺神奇,我也不知道每次會給大家帶來什麼驚喜。 今天的分享也不例外,你們肯定也意想不到,今天我分享的主題居然是:矛與盾,如何做好系統之盾;說人話 ...
  • 默默在看新機會的你,是不是面試的時候,偶爾被問起“能不能簡單介紹一下項目的應用系統架構”? 沉迷於業務開發的你們,有沒有考慮過“用戶訪問到你開發的業務功能,到底經過了哪些環節”? 今天我將結合這些年的一些認知理解,開壇設法給大家講一講應用系統架構的從 0 到 1。 01. 如何造一個大泥球? 產品汪 ...
  • 基本定義 裝飾者模式屬於 結構型模式 ,它可以 動態的 將新功能 附加到對象上 ,同時又 不改變其結構 。在對象功能擴展方面,它比繼承更有彈性,裝飾者模式也體現了開閉原則(OCP)。 模式結構 裝飾者和被裝飾者有 相同的超類型 ,因為裝飾者和被裝飾者必須是一樣的類型, 利用繼承是為了達到類型的匹配, ...
  • 基於觀察者模式,構建自己的一套事件分發系統。由常見的引用耦合問題,引出觀察者模式,進而利用觀察者模式的最佳實踐,事件分發系統來解決耦合問題。文章詳細解讀了事件分發系統的實現步驟,以及需要註意的一些坑。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...