Maven項目學習筆記(一)搭建SSM項目並啓動進行登錄系統操作(詳細)

1.打開IDEA,創建Maven項目。

打開IDEA,選擇新建項目,這裏選擇maven選項,不選擇模板,直接點擊Next。

填寫GroupId,和ArtifactId,後點Next,然後點擊Finish。

這裏囉嗦一下,GroupId指的是公司名稱,ArtifactId指的是項目的名稱。

創建完成後,刪除src文件夾。

右鍵點擊項目名稱myhomes,新建一個用於存放業務層biz資料的module。

新建module界面中依舊不選擇模板,直接點擊Next。

填寫module名稱,並點擊Next後保存。

 

繼續在myhomes新建一個module,這個module用於存放DAO數據庫操作類等相關文件。操作步驟跟上一個大致相同,唯一不同的地方是module的名不一樣,我這裏module名是myhomes_dao。

新建最後一個module,該module用於存放Web層數據的。這裏要用到web模板。

之後填寫該module的名字保存即可,之後等待IDEA下載模板完成。這裏的module名字是myhomes_web。

項目下載完成後,myhomes_web中的src下的main文件夾應該是沒有java和resources文件夾的,因此我們需要創建。

創建好後文件夾需要進行“Mark Directory as”操作,該操作指定文件夾是用來放什麼資料的。

java文件夾設置成Sources Root

將resources文件夾設置成Resources Root(這就不放圖了)

然後在每個module中所需新建文件夾,我這裏這裏設置如下

2.爲各個module的pom.xml文件添加相關依賴

先爲myhomes_dao的pom.xml文件添加相關依賴:

<dependencies>
    <!--Mybatis-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <!--Spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>

    <!--Spring整合Mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

爲myhomes_biz的pom.xml文件添加相關依賴:

<dependencies>
    <!--myhome_biz是業務層,需要依賴持久層,也就是myhome_dao-->
    <dependency>
        <groupId>com.myhome</groupId>
        <artifactId>myhome_dao</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.9</version>
    </dependency>
</dependencies>

爲myhomes_web的pom.xml文件添加相關依賴:

pom文件有些位置內容我改動了,不知道跟你創建的那時候這些位置內容是否一樣。

pox文件頭部的project標籤最後那個網址:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-4.0.0.xsd">

還有就是下面那個url標籤內的網址:

<url>http://maven.apache.org</url>

目前我不知道不改會出現什麼問題,這裏就提一下。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

    <!--導入業務層依賴-->
    <dependency>
        <groupId>com.myhome</groupId>
        <artifactId>myhome_biz</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.4.RELEASE</version>
    </dependency>
</dependencies>

3.添加xml配置文件

首先爲dao層的resources資源文件夾添加xml配置文件spring-dao.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!--開啓自動掃描-->
    <context:component-scan base-package="com.myhomes.dao"/>

    <!--配置數據源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/home?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--配置SessionFactory-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.myhomes.entity"/>
    </bean>

    <!--配置映射掃描器,讓mybaits掃描映射文件包-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <property name="basePackage" value="com.myhomes.dao"/>
    </bean>

</beans>

 

接着爲biz層的resources資源文件夾添加xml配置文件spring-biz.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--聲明式事務配置在業務層-->

    <!--導入dao層配置文件-->
    <import resource="spring-dao.xml"/>

    <!--開啓自動掃描-->
    <context:component-scan base-package="com.myhomes.biz"/>

    <!--aop自動代理-->
    <aop:aspectj-autoproxy/>

    <!--事務管理器-->
    <bean id="transationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--聲明通知,定義規則-->
    <tx:advice id="txAdvice" transaction-manager="transationManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>   <!--不用事務封裝-->
            <tx:method name="find*" read-only="true"/>
            <tx:method name="search*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!--通知和切入點進行關聯-->
    <aop:config>
        <aop:pointcut id="txpc" expression="execution(* com.myhomes.biz.*.*(..))"/>    <!--第一個*號代表任意返回值-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txpc"/>
    </aop:config>

</beans>

接着爲web層的resources資源文件夾添加xml配置文件spring-web.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--導入biz層配置文件-->
    <import resource="spring-biz.xml"/>

    <!--開啓自動掃描-->
    <context:component-scan base-package="com.myhomes.controller"/>

    <!--配置mvc自動驅動-->
    <mvc:annotation-driven/>

    <!--靜態資源交給servlet處理-->
    <mvc:default-servlet-handler/>


    <!--視圖轉換器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.myhomes.global.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

</beans>

緊接着在web層中的web.xml文件進行配置:(這裏的編碼過濾器的類是自己創建的)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--處理中文亂碼-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>com.myhomes.global.EncodingFilter</filter-class><!--自己創建的類-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/assets/*</url-pattern>
        <url-pattern>/js/*</url-pattern>
        <url-pattern>/css/*</url-pattern>
        <url-pattern>/img/*</url-pattern>
        <url-pattern>/vendor/*</url-pattern>
        <url-pattern>*.js</url-pattern>
        <url-pattern>*.jpg</url-pattern>
        <url-pattern>*.gif</url-pattern>
        <url-pattern>*.png</url-pattern>
        <url-pattern>*.css</url-pattern>
        <url-pattern>*.ico</url-pattern>
    </servlet-mapping>

    <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-web.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>


</web-app>

EncodingFilter類:

package com.myhomes.global;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class EncodingFilter implements Filter {
    private String encoding = "utf-8";
    public void init(FilterConfig filterConfig) throws ServletException {
        if(filterConfig.getInitParameter("encoding")!=null){
            encoding = filterConfig.getInitParameter("encoding");
        }
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);
        filterChain.doFilter(request,response);
    }

    public void destroy() {
    }
}

新建項目資源文件夾:

項目頁面文件放在WEB-INF下的pages裏面,這跟spring-web.xml文件裏的視圖解析器的前綴一致。

4.準備數據庫文件

這裏的數據庫是用MySQL的,並且使用Navicat of MySQL對數據庫進行管理。

數據庫文件內容如下:

數據庫名稱:home

數據表:users        及其列名類型等,user_class是該表的外鍵,這個列指的是用戶的類型!

(爲什麼要使用外鍵?直接將user_class列的內容直接設置成類型名不好嗎(例如設置成“普通用戶”)?針對這個問題,我想說的是:如果這張表有1萬條普通用戶數據,則這1萬條數據的user_class列都設置成“普通用戶”,有1萬條“普通用戶”的字符串。如果將user_class列設置成外鍵,把此列設置成數字,比如1代表普通用戶。則1萬條數據此列的內容爲“1”,減少了數據的臃腫。添加一張用戶類型表,表有兩個列,id和name。id就設置成1,對應普通用戶的user_class列的值1,name屬性設置成“普通用戶”即可。)

users表的內容:

 

數據表user_class:

user_class表的內容:

5.dao層內容

在entity包中新建實體類User,對應數據庫users表的列,並且自動生成getter和setter(按Alt + Insert)。注意,有些屬性名跟數據庫對應的列的名字不一樣,例如userClass屬性對應的是user_class列。

在dao包中新建UserDao接口類型的類。

在類的前面添加註解@Repository,告訴Spring這個類是dao層(數據庫操作)的類;

在類中添加相應的方法;

在dao層的resources的文件夾中新建一個目錄,此目錄的路徑是:com\myhomes\dao,此路徑與spring-dao.xml文件的映射掃描器的basePackage的路徑一致。

創建名爲UserDao的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.myhomes.dao.UserDao">
    <resultMap id="resultMap" type="User">
        <id property="id" column="id" javaType="Integer"></id>
        <result property="acc" column="accound" javaType="String"></result>
        <result property="password" column="password" javaType="String"></result>
        <result property="name" column="name" javaType="String"></result>
        <result property="userClass" column="user_class" javaType="Integer"></result>
        <result property="houseId" column="house_id" javaType="String"></result>
        <result property="ruzhuTime" column="ruzhu_time" javaType="java.util.Date"></result>
        <result property="outTime" column="out_time" javaType="java.util.Date"></result>
        <result property="ban" column="ban" javaType="String"></result>
        <result property="isDelete" column="is_delete" javaType="String"></result>

    </resultMap>

    <select id="select" parameterType="String" resultMap="resultMap">
        select * from users where accound = #{acc}
    </select>


</mapper>

6.biz業務層內容

在biz包中新建一個接口類:GlobalBiz

並添加方法。

再impl包中添加其實現類:GlobalBizImpl

重寫接口方法:

類前面添加@Service註解,提示Spring這個類是服務層的類;

導入的UserDao類的對象要添加@Autowired註解,自動注入;

7.web層內容

新建控制器類LoginController

類的前面添加Controller註解,提示Spring這是一個控制器類;

導入的業務層對象要進行自動注入;

toLogin()方法前添加@RequestMappiong註解,value值設置爲to_login,指的是網站的url中的to_login路由。也就是說,url訪問http://localhost:8080/to_login此路徑的時候執行這個方法。方法的返回值login指的是訪問項目靜態資源文件login.jsp!

login()方法要進行登錄操作,因此需要添加HttpSession類的對象,因爲此方法要接收前端發送過來的賬號密碼數據,因此需要添加@RequestParam註解。acc和password形參跟前端的<input type="text" name="acc"/>的input標籤的name屬性的名字要一樣;

login()方法接收數據後首先進行是否爲空和長度大小等進行判斷,如果有問題,則利用session添加參數的方法進行添加“鍵”和“值”(這裏的鍵是warn,值是提示信息),並return 重定向(redirect:)回to_login路由,to_login路由返回到登錄界面;

login()方法接收數據,進行判斷無誤後利用業務層方法進行登錄操作,如果查詢到存在此用戶,則session添加參數,並把user對象添加到session,並重定向到self方法,讓self方法訪問登錄後的self頁面。

8.準備前端頁面

在WEB-INF中的pages文件夾裏添加login.jsp和self.jsp

login.jsp:

①:因爲要用到jsp的標籤 c,所以①添加

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

②:c標籤,此標籤是用來接收session的warn參數的信息的

③:提交到LoginController的@RequestMapping value爲“login”的路由方法

注意,這裏的css的引入路徑,參照我的項目靜態資源目錄。還有就是input標籤的name屬性值。

self.jsp:

登錄成功後,在頁面中取出登錄成功後用戶的名稱。

9.配置tomcat

點擊IDEA右上角的下拉框的Edit.....,我這裏配置過了的。

按順序操作添加:

②:修改項目路徑爲to_login,直接訪問Controller對應的方法路由。

③:也可以修改每次修改項目文件的時候服務器做什麼

 

點擊 + 號,然後選擇有exploded後綴的選項,接着修改④爲 /,然後點擊“Apply”。

10.驗證登錄

開啓tomcat服務器。

查看url地址:

 

直接點擊登錄按鈕:

輸入長度不足爲5的賬號密碼:

輸入錯誤的賬號密碼:

輸入正確的賬號密碼:super,123456

注意url的路由名稱,已經登錄成功,頁面顯示用戶的名稱了。

11.缺點與不足

1.項目的前端沒有用到框架,也沒有用到jQuery,正常來說登錄操作是jQuery來完成的。

2.項目沒有用到Spring的事務。

最後

這篇文章寫作的週期有幾天,中途還因爲SpringMVC攔截靜態資源的問題,項目從頭到尾弄多了一次,應該沒有漏掉的地方,希望我在總結的時候能幫到您,下篇的文章講如何防止用戶未進行登錄操作,在url直接輸入某路由訪問系統並系統操作數據,主要依賴攔截器技術。

發佈了6 篇原創文章 · 獲贊 46 · 訪問量 8819
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章