Maven 搭建 SSM 項目 (oracle) 設計模式、三層架構的講解


簡單談一下maven搭建 ssm 項目 (使用數據庫oracle,比 mysql 麻煩一點,所以這里談一下)

並實現注冊登錄功能。

在創建maven 的web項目時,常常會缺了main/java , main/test 兩個文件夾。

解決方法:

① : 在項目上右鍵選擇properties,然后點擊java build path,在Librarys下,編輯JRE System Library,選擇workspace default jre就可以了。 (推薦使用這種)

② :手動創建 目錄。切換視圖采用Navigator視圖,直接在src/main目錄下建立 Java目錄。

 

項目目錄結構:

 

在這普及一下 mvc 設計模式:

MVC 設計模式:單向

mvc 概念:

MVC模式並不是javaweb項目中獨有的,MVC是一種軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller),即為MVC。它是一種軟件設計的典范

mvc 詳解:

雖然MVC並不是Java當中獨有的,但是現在幾乎所有的B/S的架構都采用了 MVC 框架模式,但是 MVC 在B/S架構中並沒有完全地實現,其實我們根本不需要掌握未實現的部分。 

模型 Model:模型代表着一種企業規范,就是業務流程/狀態的處理以及業務規則的規定。業務流程的處理過程對其他層來說是不透明的,模型接受視圖數據的請求,並返回最終的處理結果。業務模型的設計可以說是MVC的核心。

視圖 View:視圖即是用戶看到並與之交互的界面,比如HTML(靜態資源),JSP(動態資源)等等。 

控制器 Controller:控制器即是控制請求的處理邏輯,對請求進行處理,負責請 求轉發; 

MVC 模式被廣泛用於 Java 的各種框架中,比如 Struts2、Spring MVC 等等都用到了這種思想

 

順帶講一下 MVVM 設計模式:雙向

Model : 實體模型(biz/bean)

View : 布局文件(XML)

ViewModel : 對外暴露出公共屬性,View和Model的綁定器

1.  可重用性。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多View重用這段視圖邏輯。 在Android中,布局里可以進行一個視圖邏輯,並且Model發生變化,View也隨着發生變化。

2.  低耦合。以前Activity、Fragment中需要把數據填充到View,還要進行一些視圖邏輯。現在這些都可在布局中完成,甚至都不需要再Activity、Fragment去findViewById()。這時候Activity、Fragment只需要做好的邏輯處理就可以了。

 

目錄結構的解釋:

Java web 經典三層架構:

控制層(表現層):controller層(Handler層):

  采用 MVC 模式。 model(模型) view(視圖) Controller(控制)
  M稱為模型,也就是實體類。用於數據的封裝和數據的傳輸。 
  V為視圖,也就是GUI組件,用於數據的展示。 
  C為控制,也就是事件,用於流程的控制。

  負責具體的業務模塊流程的控制,

  • 在此層里面要調用Service層的接口來控制業務流程;
  • 控制的配置也同樣是在Spring的配置文件里面進行,針對具體的業務流程,會有不同的控制器,我們具體的設計過程中可以將流程進行抽象歸納,設計出可以重復利用的子單元流程模塊,這樣不僅使程序結構變得清晰,也大大減少了代碼量。

持久層(數據層):dao層(mapper):

  DAO層主要是做數據持久層的工作,負責與數據庫進行聯絡的一些任務都封裝在此, 

  • DAO層的設計首先是設計DAO的接口;
  • 然后在Spring的配置文件中定義此接口的實現類;
  • 然后就可在模塊中調用此接口來進行數據業務的處理,而不用關心此接口的具體實現類是哪個類,顯得結構非常清晰;
  • DAO層的數據源配置,以及有關數據庫連接的參數都在Spring的配置文件中進行配置。

業務層:service層:

  Service層主要負責業務模塊的邏輯應用設計。 

  • 首先設計接口,再設計其實現的類
  • 接着再在Spring的配置文件中配置其實現的關聯。這樣我們就可以在應用中調用Service接口來進行業務處理。
  • Service層的業務實現,具體要調用到已定義的DAO層的接口,
  • 封裝Service層的業務邏輯有利於通用的業務邏輯的獨立性和重復利用性,程序顯得非常簡潔。

 

實體類:entity:

  每個對象作為一個實體類,一般設置很多的私有屬性,並有相應的setter和getter方法。 

  做相關數據表的映射

  對象屬性的封裝,體現了oo思想

核心包:core:包含模擬的核心類和接口類

工具包:util:包含所用到的一些工具類

 

重要的配置文件:

對象模型配置文件: pom.xml

Spring的配置文件:applicationContext.xml

spring MVC配置文件: springmvc.xml 

數據庫配置文件: jdbc.properties

日志配置文件: log4j.properties

mybatis配置文件: mybatis-config.xml

網絡程序配置文件:web.xml

 

首先配置pom.xml

pom.xml 主要描述了項目的maven坐標,依賴關系,自動引入jar包

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3     <modelVersion>4.0.0</modelVersion>
  4     <groupId>com.krry</groupId>
  5     <artifactId>maven_SSM</artifactId>
  6     <version>0.0.1-SNAPSHOT</version>
  7     <name>maven_SSM</name>
  8     <url>http://maven.apache.org</url>
  9 
 10     <dependencies>
 11         <!--引入junit  -->
 12         <dependency>
 13           <groupId>junit</groupId>
 14           <artifactId>junit</artifactId>
 15           <version>4.11</version>
 16           <scope>test</scope>
 17         </dependency>
 18         <!--引入servlet  -->
 19         <dependency>
 20             <groupId>javax.servlet</groupId>
 21             <artifactId>servlet-api</artifactId>
 22             <version>3.0-alpha-1</version>
 23             <scope>provided</scope>
 24         </dependency>
 25         <!--引入jstl的包  -->
 26         <dependency>
 27             <groupId>jstl</groupId>
 28             <artifactId>jstl</artifactId>
 29             <version>1.2</version>
 30             <scope>provided</scope>
 31          </dependency>
 32          
 33          <!--引入jsp的編譯依賴  -->
 34          <dependency>
 35             <groupId>javax.servlet.jsp</groupId>
 36             <artifactId>jsp-api</artifactId>
 37             <version>2.2</version>
 38             <scope>provided</scope>
 39          </dependency>
 40          
 41          <!--引入log4j  -->
 42          <dependency>
 43             <groupId>log4j</groupId>
 44             <artifactId>log4j</artifactId>
 45             <version>1.2.17</version>
 46           </dependency>
 47          
 48          <!--spring springmvc mybatis  -->
 49          <!-- spring和springmvc相關的構建  jar -->    
 50          <dependency>
 51             <groupId>org.springframework</groupId>
 52             <artifactId>spring-context</artifactId>
 53             <version>4.2.1.RELEASE</version>
 54           </dependency>
 55           
 56           <dependency>
 57             <groupId>org.springframework</groupId>
 58             <artifactId>spring-jdbc</artifactId>
 59             <version>4.2.1.RELEASE</version>
 60           </dependency>
 61                
 62           <!-- springmvc相關 -->
 63          <dependency>
 64             <groupId>org.springframework</groupId>
 65             <artifactId>spring-webmvc</artifactId>
 66             <version>4.2.1.RELEASE</version>
 67           </dependency>
 68           
 69           <!--springmvc需要用到json的轉換包 jackson  -->
 70          <dependency>
 71             <groupId>com.fasterxml.jackson.core</groupId>
 72             <artifactId>jackson-core</artifactId>
 73             <version>2.5.4</version>
 74           </dependency>
 75           
 76           <dependency>
 77             <groupId>com.fasterxml.jackson.core</groupId>
 78             <artifactId>jackson-annotations</artifactId>
 79             <version>2.5.4</version>
 80           </dependency>
 81          
 82          <dependency>
 83             <groupId>com.fasterxml.jackson.core</groupId>
 84             <artifactId>jackson-databind</artifactId>
 85             <version>2.5.4</version>
 86           </dependency>
 87           
 88           <!--JSR303 后台校驗 hibernate validator -->     
 89          <dependency>
 90             <groupId>org.hibernate</groupId>
 91             <artifactId>hibernate-validator</artifactId>
 92             <version>5.1.1.Final</version>
 93           </dependency>
 94          
 95          <!--上傳文件相關的jar包  -->
 96          <dependency>
 97             <groupId>commons-io</groupId>
 98             <artifactId>commons-io</artifactId>
 99             <version>2.4</version>
100           </dependency>
101           
102           <dependency>
103             <groupId>commons-fileupload</groupId>
104             <artifactId>commons-fileupload</artifactId>
105             <version>1.3.1</version>
106           </dependency>
107           
108           <dependency>
109             <groupId>org.apache.commons</groupId>
110             <artifactId>commons-lang3</artifactId>
111             <version>3.3.2</version>
112           </dependency>
113           
114           <!--跟加密算法相關的codeC  -->
115         <dependency>
116             <groupId>commons-codec</groupId>
117             <artifactId>commons-codec</artifactId>
118             <version>1.9</version>
119         </dependency>
120          
121          <!--orm或者jdbc組件需要用到的jar包 mybatis  -->
122         <!--oracle數據庫驅動  -->
123         <dependency>
124             <groupId>com.oracle</groupId>    
125             <artifactId>ojdbc6</artifactId>    
126             <version>12.1.0.2.0</version>
127         </dependency>
128         <!--mysql數據庫驅動 (這里不用,用的是上面的oracle驅動) -->
129         <!-- 
130         <dependency>
131             <groupId>mysql</groupId>
132             <artifactId>mysql-connector-java</artifactId>
133             <version>5.0.8</version>
134             <scope>runtime</scope>
135         </dependency>
136         -->
137         
138         <!-- proxool連接池 -->
139         <dependency>
140             <groupId>com.cloudhopper.proxool</groupId>
141             <artifactId>proxool</artifactId>
142             <version>0.9.1</version>
143         </dependency>
144         <dependency>
145             <groupId>com.cloudhopper.proxool</groupId>
146             <artifactId>proxool-cglib</artifactId>
147             <version>0.9.1</version>
148         </dependency>
149 
150 
151          <!--引入mybatis需要的jar包  -->
152          <dependency>
153             <groupId>org.mybatis</groupId>
154             <artifactId>mybatis</artifactId>
155             <version>3.3.1</version>
156         </dependency>
157         
158         <dependency>
159             <groupId>org.mybatis</groupId>
160             <artifactId>mybatis-spring</artifactId>
161             <version>1.2.4</version>
162         </dependency>
163         
164         <!-- 分頁管理需要的jar包,這里沒用到 -->
165         <dependency>
166             <groupId>com.github.pagehelper</groupId>
167             <artifactId>pagehelper</artifactId>
168             <version>4.2.1</version>
169         </dependency>
170         
171     </dependencies>
172     <build>
173         <plugins>  
174             <plugin>  
175                 <artifactId>maven-compiler-plugin</artifactId>  
176                 <configuration>  
177                     <source>1.7</source>  
178                     <target>1.7</target>  
179                 </configuration>  
180             </plugin>  
181             <plugin>  
182                 <artifactId>maven-war-plugin</artifactId>  
183                 <version>2.4</version>  
184                 <configuration>  
185                     <version>3.0</version>  
186                 </configuration>  
187             </plugin>  
188         </plugins>  
189         <finalName>maven_SSM</finalName>  
190     </build>  
191 </project>

這里說一下maven工程利用pom.xml導入oracle驅動包的問題:

由於Oracle授權問題,Maven不提供Oracle JDBC driver,為了在Maven項目中應用Oracle JDBC driver,必須手動添加到本地倉庫。

如果電腦中已經裝有Oracle數據庫,則在安裝路徑下有數據庫的驅動程序,可以直接用。D:\Oracle\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

也可以直接到Oracle官網上下載Oracle數據庫驅動, 使用SQL語句查詢數據庫驅動的版本: SELECT * FROM v$instance

然后確定版本下載:http://www.oracle.com/technetwork/database/features/jdbc/default-2280470.html 

 

打開windows的命令行界面,進入驅動包ojdbc6的目錄,按住shift鍵后右鍵,從此處打開命令窗口,然后運行此命令:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=12.1.0.2.0 -Dpackaging=jar -Dfile=ojdbc6.jar
顯示"BUILD SUCCESS" 成功,就會自動導入你的maven本地倉庫。

然后就可以在maven項目里添加dependency,各坐標對應上面這個命令的個元素,如下:

1     <dependency>      
2       <groupId>com.oracle</groupId>      
3       <artifactId>ojdbc6</artifactId>      
4       <version>12.1.0.2.0</version>
5     </dependency>  

 

Spring的配置文件:applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 4     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans   
 7   http://www.springframework.org/schema/beans/spring-beans.xsd  
 8   http://www.springframework.org/schema/aop   
 9   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
10   http://www.springframework.org/schema/tx   
11   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
12   http://www.springframework.org/schema/context   
13   http://www.springframework.org/schema/context/spring-context-3.0.xsd
14   http://www.springframework.org/schema/util   
15   http://www.springframework.org/schema/util/spring-util-3.0.xsd
16   ">
17     
18     
19     <!-- 配置包掃描 -->
20     <context:component-scan base-package="com.krry"></context:component-scan>
21         
22     <!-- 導入外部資源文件 -->
23     <!-- <context:property-placeholder location="classpath:jdbc.properties" />  -->
24     <bean class="com.krry.core.des.EncryptPropertyPlaceholderConfigurer"
25         p:location="classpath:jdbc.properties" p:fileEncoding="utf-8" />
26         
27     <!-- proxool連接池 -->
28     <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
29         <!-- 驅動的名字,mysql -->
30         <property name="driver" value="${db.driver}"></property>
31         <!--proxool 的 url連接串,這個必須確定用戶名和密碼 -->
32         <property name="driverUrl" value="${db.url}"></property>
33         <!-- 用戶名(proxool沒有使用,但是不能沒有) -->
34         <property name="user" value="${db.username}"></property>
35         <!-- 密碼(proxool沒有使用,但是不能沒有) -->
36         <property name="password" value="${db.password}"></property>
37         <!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀 現在設置為4秒) -->
38         <property name="houseKeepingSleepTime" value="3000"></property><!-- 自動檢查連接是否斷掉開關 -->
39         <property name="testBeforeUse" value="true"></property>
40         <!--  如果發現了空閑的數據庫連接.house keeper 將會用這個語句來測試.這個語句最好非常快的被執行.如果沒有定義,測試過程將會被忽略 -->
41         <property name="houseKeepingTestSql" value="SELECT count(1) from dual"></property>
42         <!--  如果housekeeper 檢測到某個線程的活動時間大於這個數值.它將會殺掉這個線程.所以確認一下你的服務器的帶寬.然后定一個合適的值.默認是5分鍾. 現在設置 10 秒--> 
43         <property name="maximumActiveTime" value="10000"></property>
44         <!-- 最少保持的空閑連接數 (現在設置20個) -->
45         <property name="prototypeCount" value="20"></property>
46         <!-- 最大連接數 (現在設置100個) -->
47         <property name="maximumConnectionCount" value="200"></property>
48         <!-- 最小連接數 (現在設置50個) -->
49         <property name="minimumConnectionCount" value="50"></property>
50         <!-- 如果為true,那么每個被執行的SQL語句將會在執行期被log記錄(DEBUG LEVEL).你也可以注冊一個ConnectionListener (參看ProxoolFacade)得到這些信息. -->
51         <property name="trace" value="false"></property>
52         <property name="verbose" value="true"></property>
53     </bean>
54     
55     <!-- 注冊事務管理器 -->
56     <bean id="txMgr"
57         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
58         <property name="dataSource" ref="dataSource"></property>
59     </bean>
60 
61     <!-- 開啟事務注解驅動 -->
62     <tx:annotation-driven transaction-manager="txMgr" />
63     
64     <!-- 配置mybatis的sqlSessionFactory -->
65     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
66         <property name="dataSource" ref="dataSource"></property>
67         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
68     </bean>
69     
70     <!-- 配置可以整體掃描Mapper的一個掃描器 -->
71     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
72         <!--如果有多個報路徑,用逗號分開即可  -->
73         <property name="basePackage" value="com.krry.mapper"></property>
74         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
75     </bean>
76     
77 </beans>

 

spring MVC配置文件:springmvc.xml

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <beans xmlns="http://www.springframework.org/schema/beans"
  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4     xmlns:p="http://www.springframework.org/schema/p"
  5     xmlns:context="http://www.springframework.org/schema/context"
  6     xmlns:util="http://www.springframework.org/schema/util" 
  7     xmlns:mvc="http://www.springframework.org/schema/mvc"
  8     xsi:schemaLocation="http://www.springframework.org/schema/beans
  9        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 10        http://www.springframework.org/schema/context 
 11        http://www.springframework.org/schema/context/spring-context-3.0.xsd
 12        http://www.springframework.org/schema/util 
 13        http://www.springframework.org/schema/util/spring-util-3.0.xsd 
 14        http://www.springframework.org/schema/mvc 
 15        http://www.springframework.org/schema/mvc/spring-mvc.xsd
 16       ">
 17    
 18          <!-- 開啟注解模式驅動 -->    
 19         <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 
 20         <!-- 開啟mvc的注解模式 user 還會注冊一個ConversionService 子類FormattingConversionServiceFactoryBean-->
 21          <mvc:annotation-driven>
 22             <mvc:message-converters register-defaults="true">
 23                 <bean class="com.krry.core.UTF8StringHttpMessageConverter">
 24                     <property name="supportedMediaTypes">
 25                         <list>  
 26                             <value>text/plain;charset=UTF-8</value>  
 27                             <value>text/html;charset=UTF-8</value>  
 28                         </list>  
 29                     </property>
 30                 </bean> 
 31                 <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
 32                 <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> 
 33                 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
 34                     <property name="prefixJson" value="false" />
 35                     <property name="objectMapper">
 36                          <bean class="com.fasterxml.jackson.databind.ObjectMapper">
 37                                <!-- 處理responseBody 里面日期類型 --> 
 38                                <property name="dateFormat">  
 39                                    <bean class="java.text.SimpleDateFormat">  
 40                                        <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />  
 41                                    </bean>  
 42                                </property> 
 43                                <!-- 為null字段時不顯示 -->
 44                                <property name="serializationInclusion">
 45                                    <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
 46                                </property> 
 47                            </bean>  
 48                     </property>
 49                      <property name="supportedMediaTypes">  
 50                         <list>  
 51                             <value>application/json;charset=UTF-8</value>  
 52                             <value>application/x-www-form-urlencoded;charset=UTF-8</value>  
 53                         </list>  
 54                     </property>
 55                 </bean>
 56                 </mvc:message-converters> 
 57         </mvc:annotation-driven>
 58         
 59          <!-- 掃包 -->
 60          <context:component-scan base-package="com.krry.controller"></context:component-scan>
 61          
 62          <!--對靜態資源文件的訪問  必須要設置,因為在springmvc的配置中配置了/匹配所有請求,
 63         此工程所有的請求(.do ,addUser,js/image/css)都會被springmvc解析,
 64         必須對所有的靜態資源文件進行過濾放行 -->
 65       <!-- 靜態資源過濾  下面二選一-->
 66       <!--<mvc:default-servlet-handler/> -->
 67       <mvc:resources mapping="/resourse/**" location="/resourse/" />
 68       
 69       <!-- 攔截器定義 -->
 70       <mvc:interceptors>    
 71           <mvc:interceptor>
 72              <!-- 個人中心也需要登陸  以admin開頭的配置都會進行攔截-->
 73                <mvc:mapping path="/admin/**"></mvc:mapping> 
 74                    <!-- 這個是設置不會進入攔截器的路徑 -->
 75                    <mvc:exclude-mapping path="/resourse/**"/>
 76             <!-- 攔截器進入的類,返回false表示不會進入輸入的路徑 -->
 77             <bean class="com.krry.core.filter.LoginInterceptor" />       
 78           </mvc:interceptor>
 79       </mvc:interceptors>
 80        
 81            <!-- 配置文件解析器 -->
 82         <bean id="multipartResolver"
 83             class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
 84             p:defaultEncoding="utf-8">
 85             <property name="uploadTempDir" value="/temp"></property>
 86             <property name="maxUploadSize">
 87                 <value>209715200</value><!-- 200MB -->
 88             </property>
 89             <property name="maxInMemorySize">
 90                 <value>4096</value><!-- 4KB大小讀寫 -->
 91             </property>
 92         </bean>
 93            
 94    
 95        <!-- 視圖渲染 jsp/freemaker/velocity-->
 96        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 97                <!-- 制定頁面存放的路徑 -->
 98                <property name="prefix" value="/WEB-INF/pages/"></property>
 99                <!-- 文件的后綴 -->
100                <property name="suffix" value=".jsp"></property>
101        </bean> 
102     
103 </beans>

 

數據庫配置文件: jdbc.properties

1 db.driver=oracle.jdbc.OracleDriver
2 db.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
3 db.username=4m+la23KCA4=
4 db.password=WWijcIyMPaU\=

我這里使用了加密算法

 

日志配置文件: log4j.properties

 1 log4j.rootLogger=DEBUG, CONSOLE, FILE
 2 
 3 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 4 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 5 log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %10l - %m%n
 6 
 7 log4j.appender.FILE=org.apache.log4j.RollingFileAppender
 8 log4j.appender.FILE.File=D:/logs/log4j.log
 9 log4j.appender.FILE.MaxFileSize=1MB
10 log4j.appender.FILE.Append = true
11 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
12 log4j.appender.FILE.layout.ConversionPattern=%d{yyyy/MM/dd/HH:mm:ss} %-5p [%t] %10l - %m%n

 

mybatis配置文件: mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE configuration   
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">  
 5 
 6 <configuration> 
 7     <settings>  
 8          <!-- 全局映射器啟用緩存 -->  
 9         <setting name="cacheEnabled" value="true" />  
10          <!-- 查詢時,關閉關聯對象即時加載以提高性能 -->  
11         <setting name="lazyLoadingEnabled" value="true" />  
12         <!-- 設置關聯對象加載的形態,此處為按需加載字段(加載字段由SQL指              定),不會加載關聯表的所有字段,以提高性能 -->  
13         <setting name="aggressiveLazyLoading" value="false" />  
14         <!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->  
15         <setting name="multipleResultSetsEnabled" value="true" />  
16         <!-- 允許使用列標簽代替列名 -->  
17         <setting name="useColumnLabel" value="true" />  
18         <!-- 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作為鍵值),數據表的PK生成策略將被覆蓋 -->  
19         <setting name="useGeneratedKeys" value="true" />  
20          <!-- 給予被嵌套的resultMap以字段-屬性的映射支持 -->  
21         <setting name="autoMappingBehavior" value="FULL" />  
22         <!-- 對於批量更新操作緩存SQL以提高性能  -->  
23         <setting name="defaultExecutorType" value="BATCH" />  
24          <!-- 數據庫超過25000秒仍未響應則超時 -->  
25         <setting name="defaultStatementTimeout" value="25" />  
26          <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
27     </settings>  
28     
29     <typeAliases>
30         <!--自定義user對象的別名  -->
31         <!-- <typeAlias type="com.krry.mybatis.sysmanage.entity.User" alias="user"/> -->
32         <!-- 批量定義別名 -->
33         <package name="com.krry.entity" />
34     </typeAliases>
35     
36     
37 </configuration>  

 

網絡程序配置文件:web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3   
 4   <display-name>maven_SSM</display-name>
 5   
 6   <welcome-file-list>
 7     <welcome-file>index</welcome-file>
 8   </welcome-file-list>
 9   
10   <!-- 加載Spring IOC容器 -->
11   <context-param>
12     <param-name>contextConfigLocation</param-name>
13     <param-value>classpath:applicationContext.xml</param-value>
14   </context-param>
15   
16   <!-- spring上下文監聽器 -->
17   <listener>
18     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
19   </listener>
20   
21   <!-- Introspector緩存清除監聽器 -->
22   <listener>
23     <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
24   </listener>
25   
26   <filter>
27     <filter-name>encoding</filter-name>
28     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
29     <init-param>
30       <param-name>encoding</param-name>
31       <param-value>UTF-8</param-value>
32     </init-param>
33   </filter>
34   
35   <filter-mapping>
36     <filter-name>encoding</filter-name>
37     <url-pattern>/*</url-pattern>
38   </filter-mapping>
39   
40   <!-- 配置DispatcherServlet -->
41   <servlet>
42     <servlet-name>maven_SSM</servlet-name>
43     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
44     <!-- 配置springMVC的配置文件 -->
45     <!-- 如果不配置下面選項,系統默認加載classpath下面名為[servlet-name]-servlet.xml的文件 springmvc01-servlet.xml -->
46     <init-param>
47       <param-name>contextConfigLocation</param-name>
48       <param-value>classpath:springmvc.xml</param-value>
49     </init-param>
50   </servlet>
51   
52   <servlet-mapping>  
53       <servlet-name>maven_SSM</servlet-name>  
54       <url-pattern>/index</url-pattern>  
55   </servlet-mapping>
56   
57   <!-- 可以配*.do, *.action(了解) / (重點): 所有的請求都會被spring mvc解析,但必須對靜態資源文件進行過濾放行,建議大家使用這種方式 
58         /* : 不建議大家使用  -->
59   <servlet-mapping>
60     <servlet-name>maven_SSM</servlet-name>
61     <url-pattern>/</url-pattern>
62   </servlet-mapping>
63  
64 </web-app>

 

到這里,基本配置全部完成,jar包也自動依賴。就進行測試和編寫后續 java 的代碼。

仔細分享一下 src/main/java 的目錄結構:

 

 

controller層:

首頁:KrryController.java

 1 package com.krry.controller.index;
 2 
 3 import java.sql.Timestamp;
 4 import java.util.Date;
 5 import java.util.HashMap;
 6 import java.util.List;
 7 
 8 import javax.servlet.http.HttpServletRequest;
 9 
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Controller;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.RequestMethod;
14 import org.springframework.web.bind.annotation.ResponseBody;
15 import org.springframework.web.servlet.ModelAndView;
16 
17 import com.krry.entity.User;
18 import com.krry.mapper.UserMapper;
19 import com.krry.util.TmStringUtils;
20 
21 /**
22  * KrryController
23  * controller層,作為請求轉發
24  * @author asusaad
25  *
26  */
27 @Controller  //表示是多例模式,每個用戶返回的web層是不一樣的
28 public class KrryController {
29     
30     @RequestMapping("/index")
31     public String index(){
32 //        ModelAndView modelAndView = new ModelAndView();
33 //        modelAndView.setViewName("index/login"); //跳到此頁面
34 //        return modelAndView;
35         return "index/index";
36     }
37     
38 }

 

登錄控制層:LoginController.java

  1 package com.krry.controller.login;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.Date;
  5 import java.util.UUID;
  6 
  7 import javax.servlet.http.HttpServletRequest;
  8 
  9 import org.springframework.beans.factory.annotation.Autowired;
 10 import org.springframework.stereotype.Controller;
 11 import org.springframework.web.bind.annotation.RequestMapping;
 12 import org.springframework.web.bind.annotation.RequestMethod;
 13 
 14 import com.krry.entity.User;
 15 import com.krry.service.IUserService;
 16 import com.krry.util.TmStringUtils;
 17 
 18 /**
 19  * Controller層,作為請求轉發
 20  * 頁面所有路徑的訪問方法:控制層的命名空間+@RequestMapping的value
 21  * 如這里的/login/index.krry(后綴在xml文件配置)
 22  * */
 23 @Controller  //表示是多例模式,每個用戶返回的web層是不一樣的
 24 @RequestMapping("/login")
 25 public class LoginController {
 26 
 27     @Autowired
 28     private IUserService userService;
 29     
 30     /**
 31      * 若在下面的@RequestMapping前面加上@ResponseBody,
 32      * 若方法是String類型則直接返回的是字符串,不會跳轉到該字符串的路徑jsp文件
 33      * 
 34      * 所以要想跳轉到某一jsp頁面,不能加上@ResponseBody
 35      * 這個@ResponseBody適合ajax返回的數據
 36      * 
 37      */
 38     
 39     /**
 40      * 在控制層不加@ResponseBody的情況下,return值默認是轉發到某路徑,不會顯示轉發路徑,顯示的是未轉發前的路徑
 41      * 若要重定向,加上redirect:這里默認是當前命名空間的轉發,要跳轉到另一個control層,需要返回上一級../
 42      * 
 43         這里使用重定向,返回命名空間的上一級,重定向到命名空間為Krry下的index 
 44         return "redirect:../index";
 45         
 46         注意:
 47         轉發不會顯示轉發路徑,顯示的是未轉發前的路徑
 48      *  重定向顯示的是跳轉之后的路徑
 49      */
 50     
 51     /**
 52      * 進入登錄界面
 53      * @return
 54      */
 55     @RequestMapping("/index")
 56     public String index(){
 57 //        ModelAndView modelAndView = new ModelAndView();
 58 //        modelAndView.setViewName("index/login"); //跳到此頁面
 59 //        return modelAndView;
 60         return "index/login";   //默認是轉發,不會顯示轉發路徑
 61     }
 62     
 63     /**
 64      * 點擊登錄
 65      * com.krry.controller.login 
 66      * 方法名:login
 67      * @author krry 
 68      * @param request
 69      * @return String
 70      * @exception 
 71      * @since  1.0.0
 72      */
 73     @RequestMapping(method=RequestMethod.POST,value="/logined")
 74     public String login(HttpServletRequest request){
 75         //獲取用戶和密碼
 76         String username = request.getParameter("username");
 77         String password = request.getParameter("password");
 78         
 79         //如果郵箱和密碼為null,那么就返回已null標識
 80         if(TmStringUtils.isEmpty(username) )return "index/allError";
 81         if(TmStringUtils.isEmpty(password))return "index/allError";
 82         
 83         //密碼進行加密處理
 84         password = TmStringUtils.md5Base64(password);
 85         
 86         //根據郵箱或昵稱查詢,用戶是否存在
 87         User user = userService.getLogin(username);
 88         
 89         //如果存在
 90         if(user!=null){
 91             
 92             User userpas = userService.getpass(username, password);
 93             if(userpas!=null){
 94                 //如果密碼正確
 95                 //將用戶信息放入到會話中...
 96                 request.getSession().setAttribute("user", user);
 97                 
 98                 //這里使用重定向,返回命名空間的上一級,重定向到命名空間為Krry下的index.krry
 99                 return "redirect:../index";
100             }else{
101                 //如果密碼錯誤
102                 System.out.println("密碼錯誤");
103                 return "index/error";
104             }
105         }else{
106             //如果不存在,代碼郵箱和密碼輸入有誤
107             System.out.println("用戶不存在");
108             return "index/error";
109         }
110     }
111     
112     /**
113      * 退出登錄控制層
114      * com.krry.controller.login 
115      * 方法名:logout
116      * @author krry 
117      * @param request
118      * @return String
119      * @exception 
120      * @since  1.0.0
121      */
122     @RequestMapping(method=RequestMethod.GET,value="/logout")
123     public String logout(HttpServletRequest request){
124         request.getSession().invalidate(); //清空session值
125         return "index/index";
126     }
127     
128     /**
129      * 打開注冊界面層
130      * @return
131      */
132     @RequestMapping("/rege")
133     public String rege(){
134 //        ModelAndView modelAndView = new ModelAndView();
135 //        modelAndView.setViewName("index/login"); //跳到此頁面
136 //        return modelAndView;
137         return "index/resgi";
138     }
139     
140     /**
141      * 注冊控制層
142      * com.krry.controller.login 
143      * 方法名:resig
144      * @author krry 
145      * @param request
146      * @return String
147      * @exception 
148      * @since  1.0.0
149      */
150     @RequestMapping(method=RequestMethod.POST,value="/resig")
151     public String resig(HttpServletRequest request){
152         //獲取用戶和密碼
153         String name = request.getParameter("username");
154         String email = request.getParameter("email");
155         String password = request.getParameter("password");
156 
157         //如果郵箱和密碼為null,那么就返回已null標識
158         if(TmStringUtils.isEmpty(name) )return "index/allError";
159         if(TmStringUtils.isEmpty(email))return "index/allError";
160         if(TmStringUtils.isEmail(password))return "index/allError";
161         
162         //密碼進行加密處理
163         password = TmStringUtils.md5Base64(password);
164         //根據昵稱查詢,用戶是否存在
165         User user1 = userService.getothernameres(name);
166         //根據賬號查詢,用戶是否存在
167         User user2 = userService.getemailres(email);
168         
169         //若存在
170         if(user1 != null){ //昵稱重復
171             return "index/allError";
172         }
173         if(user2 != null){ //email重復
174             return "index/allError";
175         }
176 
177         //格式化時間類型
178         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
179         String nowTime = sdf.format(new Date());
180         
181         String id = UUID.randomUUID().toString();
182         //執行到這里,說明可以注冊
183         User newUser = new User(id, name, password, email, nowTime);
184         //調用注冊方法
185         userService.saveUser(newUser);
186         
187         //將信息設置session作用域
188         request.getSession().setAttribute("user", newUser);
189 
190         /**
191          * 這里使用重定向,返回命名空間的上一級,重定向到index
192          */
193         return "redirect:../index";
194     }
195     
196 }

 

實體entity層:

User.java

 1 package com.krry.entity;
 2 
 3 import java.sql.Date;
 4 import java.sql.Timestamp;
 5 
 6 
 7 /**
 8  * 
 9  * User
10  * @author krry
11  * @version 1.0.0
12  *
13  */
14 public class User {
15 
16      // 主鍵,自動遞增
17      private String id;
18      // 用戶名
19      private String username;
20      //      密碼
21      private String password;
22      //email
23      private String email;
24      //自動生成創建時間
25      private String createTime;
26 
27      public User(String id,String username,String password,String email,String createTime) {
28         this.id = id;
29         this.username = username;
30         this.email = email;
31         this.password = password;
32         this.createTime = createTime;
33     }
34      
35     public String getCreateTime() {
36         return createTime;
37     }
38 
39     public void setCreateTime(String createTime) {
40         this.createTime = createTime;
41     }
42      
43      public String getEmail() {
44         return email;
45      }
46 
47      public void setEmail(String email) {
48         this.email = email;
49      }
50      
51      public String getId() {
52          return id;
53      }
54     
55      public void setId(String id) {
56          this.id = id;
57      }
58     
59      public String getUsername() {
60          return username;
61      }
62     
63      public void setUsername(String username) {
64          this.username = username;
65      }
66     
67      public String getPassword() {
68          return password;
69      }
70     
71      public void setPassword(String password) {
72          this.password = password;
73      }
74     @Override
75     public String toString() {
76         return "User [id=" + id + ", username=" + username + ", password="
77                 + password + ", email=" + email + ", createTime=" + createTime
78                 + "]";
79     }
80 
81     
82 
83 
84 }

 

持久化層mapper:

接口層

UserMapper.java

 1 package com.krry.mapper;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.ibatis.annotations.Param;
 6 
 7 import com.krry.entity.User;
 8 
 9 /**
10  * 
11  * Mapper:操作數據庫
12  * IUserMapper
13  * @author krry
14  * @version 1.0.0
15  *
16  */
17 public interface UserMapper {
18 
19     /**
20      * 
21      * com.krry.mapper 
22      * 方法名:findUsers
23      * @author krry 
24      * @return List<User>
25      * @exception 
26      * @since  1.0.0
27      */
28     public List<User> findUsers();
29     
30     /**
31      * 根據用戶查詢用戶是否存在
32      * com.krry.mapper 
33      * 方法名:getLogin
34      * @author krry 
35      * @param email
36      * @param password
37      * @return User
38      * @exception 
39      * @since  1.0.0
40      */
41     /*這里用@Param("name")String name適用於單個參數的傳遞,在web層調用此方法的時候,就可以傳遞web層從前台獲取的參數,
42           在sql的xml中WHERE email = #{name} or username = #{name}使用此參數,多個參數傳遞一般使用實體類對象傳遞    */
43     public User getLogin(@Param("name")String name);
44     
45     /**
46      * 用戶名存在時,查詢密碼是否正確
47      * com.krry.mapper 
48      * 方法名:getpass
49      * @author krry 
50      * @param email
51      * @param password
52      * @return User
53      * @exception 
54      * @since  1.0.0
55      */
56     public User getpass(@Param("name")String name,@Param("password")String password);
57     
58     /**
59      * 注冊時根據輸入的昵稱查找用戶
60      * com.krry.mapper 
61      * 方法名:getothername
62      * @author krry 
63      * @param name
64      * @return User
65      * @exception 
66      * @since  1.0.0
67      */
68     public User getothernameres(@Param("name")String name);
69     
70     /**
71      * 注冊時根據輸入的賬號查找用戶
72      * com.krry.mapper 
73      * 方法名:getemailres
74      * @author krry 
75      * @param password
76      * @return User
77      * @exception 
78      * @since  1.0.0
79      */
80     public User getemailres(@Param("email")String email);
81     
82     /**
83      * 注冊方法
84      * com.krry.mapper 
85      * 方法名:csaveUser
86      * @author krry 
87      * @param user void
88      * @exception 
89      * @since  1.0.0
90      */
91     public void saveUser(User user);
92     
93     
94 }

 

映射層

UserMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="com.krry.mapper.UserMapper" >
 6     <!-- 所有的增刪查改都在這里定義sql語句 -->
 7     
 8     <!-- 查詢所有的用戶信息 -->
 9     <select id="findUsers" resultType="User">
10         SELECT id,username,password FROM krry_user_test
11     </select>
12     
13     <!-- 登錄時根據輸入的昵稱或賬號查找用戶 -->
14     <select id="getLogin" resultType="User" >
15         SELECT
16             id,
17             username,
18             password,
19             email,
20             create_time as createTime
21         FROM
22             krry_user_test
23         WHERE
24             email = #{name} or username = #{name}
25     </select>
26     
27     <!-- 若已存在用戶信息,再查詢密碼是否正確 -->
28     <select id="getpass" resultType="User" >
29         SELECT
30             id,
31             username,
32             password,
33             email,
34             create_time as createTime
35         FROM
36             krry_user_test
37         WHERE
38             (email = #{name} or username = #{name}) AND password = #{password}
39     </select>
40     
41     <!-- 注冊時根據輸入的昵稱查找用戶 -->
42     <select id="getothernameres" resultType="User" >
43         SELECT
44             id,
45             username,
46             password,
47             email,
48             create_time as createTime
49         FROM
50             krry_user_test
51         WHERE
52             username = #{name}
53     </select>
54     
55     <!-- 注冊時根據輸入的賬號查找用戶 -->
56     <select id="getemailres" resultType="User" >
57         SELECT
58             id,
59             username,
60             password,
61             email,
62             create_time as createTime
63         FROM
64             krry_user_test
65         WHERE
66             email = #{email}
67     </select>
68     
69     <!-- 注冊用戶信息 -->
70     <insert id="saveUser" parameterType="User">
71         INSERT INTO krry_user_test(
72             id,
73             username,
74             email,
75             password,
76             create_time
77         )VALUES(
78             #{id},
79             #{username},
80             #{email},
81             #{password},
82             #{createTime}
83         )
84     </insert>
85     
86     
87 </mapper>

 

業務邏輯層service:

接口層:

IUserService.java

 1 package com.krry.service;
 2 
 3 import java.util.List;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 
 7 import org.apache.ibatis.annotations.Param;
 8 
 9 import com.krry.entity.User;
10 
11 /**
12  * service層:處理業務邏輯(impl里面實現)
13  * @author asusaad
14  *
15  */
16 public interface IUserService {
17     
18     /**
19      * 根據用戶名查詢用戶是否存在
20      * com.krry.service 
21      * 方法名:getLogin
22      * @author krry 
23      * @param email
24      * @param password
25      * @return User
26      * @exception 
27      * @since  1.0.0
28      */
29     /*這里用@Param("name")String name適用於單個參數的傳遞,在web層調用此方法的時候,就可以傳遞web層從前台獲取的參數,
30           在sql的xml中WHERE email = #{name} or username = #{name}使用此參數,多個參數傳遞一般使用實體類對象傳遞    */
31     public User getLogin(@Param("name")String name);
32     
33     /**
34      * 用戶名存在時,查詢密碼是否正確
35      * com.krry.service 
36      * 方法名:getpass
37      * @author krry 
38      * @param email
39      * @param password
40      * @return User
41      * @exception 
42      * @since  1.0.0
43      */
44     public User getpass(@Param("name")String name,@Param("password")String password);
45     
46     /**
47      * 注冊時根據輸入的昵稱查找用戶
48      * com.krry.service 
49      * 方法名:getothername
50      * @author krry 
51      * @param name
52      * @return User
53      * @exception 
54      * @since  1.0.0
55      */
56     public User getothernameres(@Param("name")String name);
57     
58     /**
59      * 注冊時根據輸入的賬號查找用戶
60      * com.krry.service 
61      * 方法名:getemailres
62      * @author krry 
63      * @param password
64      * @return User
65      * @exception 
66      * @since  1.0.0
67      */
68     public User getemailres(@Param("email")String email);
69     
70     /**
71      * 注冊方法
72      * com.krry.service 
73      * 方法名:csaveUser
74      * @author krry 
75      * @param user void
76      * @exception 
77      * @since  1.0.0
78      */
79     public void saveUser(User user);
80     
81 }

 

impl

UserService.java

 1 package com.krry.service.impl;
 2 
 3 import java.util.List;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Service;
 9 
10 import com.krry.entity.User;
11 import com.krry.mapper.UserMapper;
12 import com.krry.service.IUserService;
13 
14 /**
15  * 實現service層接口
16  * @author asusaad
17  *
18  */
19 @Service
20 public class UserService implements IUserService{
21 
22     @Autowired
23     private UserMapper userMapper;
24     
25     /**
26      * 根據用戶名查詢用戶是否存在
27      */
28     public User getLogin(String name) {
29         User user = userMapper.getLogin(name);
30         return user;
31     }
32 
33     public User getpass(String name, String password) {
34         User userpas = userMapper.getpass(name, password);
35         return userpas;
36     }
37 
38     public User getothernameres(String name) {
39         User user = userMapper.getothernameres(name);
40         return user;
41     }
42 
43     public User getemailres(String email) {
44         //根據賬號查詢,用戶是否存在
45         User user = userMapper.getemailres(email);
46         return user;
47     }
48 
49     public void saveUser(User user) {
50         userMapper.saveUser(user);
51         
52     }
53 
54 }

 

view 視圖:

common.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 int port = request.getServerPort();
 5 String basePath = null; 
 6 if(port==80){
 7     basePath = request.getScheme()+"://"+request.getServerName()+path;
 8 }else{
 9     basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
10 }
11 pageContext.setAttribute("basePath", basePath);
12 %>

 

index.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@include file="../common/common.jsp" %>
 3 
 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 5 <html>
 6   <head>
 7     <title>首頁</title>
 8   </head>
 9   
10   <body>
11         <p class="title">用戶名:<span class="username">${user.username}</span>已登錄</p><br>
12         <a href="${basePath}/login/logout" id="login">退出登錄</a>
13         
14         <script type="text/javascript" src="${basePath}/resourse/js/jquery-1.11.2.min.js"></script>
15         <script type="text/javascript">
16             var basePath = "${basePath}";
17             if(isEmpty($(".username").text())){
18                 $(".title").text("未登錄");
19                 $("#login").attr("href",basePath+"/login/index");
20                 $("#login").text("點擊登陸");
21             }
22             /**
23              * 判斷非空
24              * 
25              * @param val
26              * @returns {Boolean}
27              */
28             function isEmpty(val) {
29                 val = $.trim(val);
30                 if (val == null)
31                     return true;
32                 if (val == undefined || val == 'undefined')
33                     return true;
34                 if (val == "")
35                     return true;
36                 if (val.length == 0)
37                     return true;
38                 if (!/[^(^\s*)|(\s*$)]/.test(val))
39                     return true;
40                 return false;
41             }
42 
43         </script>
44   </body>
45 </html>

 

login.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@include file="../common/common.jsp" %>
 3 
 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 5 <html>
 6   <head>
 7     
 8     <title>登錄界面</title>
 9   </head>
10   <body>
11       <form action="${basePath}/login/logined" method="post">
12           用戶名:<input type="text" name="username"/><br>
13&nbsp;碼:<input type="password" name="password"/>
14           <input type="submit"><br><br>
15           <a href="${basePath}/login/rege">點我注冊</a>
16       </form>
17   </body>
18 </html>

 

resgi.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@include file="../common/common.jsp" %>
 3 
 4 <!DOCTYPE HTML>
 5 <html>
 6   <head>
 7     <base href="<%=basePath%>">
 8     
 9     <title>注冊界面</title>
10 
11   </head>
12   
13   <body>
14     <form action="${basePath}/login/resig" method="post">
15           用戶名:<input type="text" name="username"/><br>
16&nbsp;箱:<input type="text" name="email"/><br>
17&nbsp;碼:<input type="password" name="password"/><br>
18           <input type="submit">
19       </form>
20   </body>
21 </html>

 

allError.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@include file="../common/common.jsp" %>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     
 7     <title>錯誤</title>
 8 
 9   </head>
10   
11   <body>
12         發生錯誤<br><br>
13         <a href="${basePath}">返回首頁</a>
14   </body>
15 </html>

 

error.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@include file="../common/common.jsp" %>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     
 7     <title>錯誤</title>
 8 
 9   </head>
10   
11   <body>
12         用戶名或密碼錯誤<br><br>
13         <a href="${basePath}/login/index">返回登錄</a>
14   </body>
15 </html>

 

到這里,maven 構建的 ssm 工程實現注冊登錄完成。

核心包 core 和工具包 util 包這里就不展示了,代碼太長。

該博客作為自己的總結,也是一種分享

 

相關鏈接:

GitHub:https://github.com/Krryxa

音樂博客:https://www.ainyi.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM