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&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直接輸入某路由訪問系統並系統操作數據,主要依賴攔截器技術。