網上商城

 

1.1 前臺需求分析:

1.1.1 用戶模塊:

註冊:

1.前臺JS校驗:css

2.使用AJAX完成對用戶名異步校驗:web

3.後臺校驗:spring

4.驗證碼:sql

5.發送激活郵件:數據庫

6.將用戶信息存入到數據庫:express

激活:

1.點擊連接完成激活:apache

* 根據激活碼,查詢數據庫中是否有該用戶:json

* 若是有:激活.(將激活碼字段清空.)windows

* 修改用戶的狀態:服務器

登陸:

1.輸入用戶名和密碼:(數據校驗.)

2.用戶名和密碼都正確同時用戶狀態必須是激活狀態:

退出:e

1.銷燬session:

1.1.2 一級分類模塊:

查詢一級分類:

1.查詢一級分類.

* 將一級分類存入到session範圍.(每一個頁面中都有一級分類的數據)

查詢某個一級分類:

1.查詢全部一級分類:

* 同時查詢到每一個一級分類下所屬的二級分類

1.1.3 商品模塊:

查詢熱門商品:

1.查詢熱門商品:(限制個數10)

查詢最新商品:

1.查詢最新商品:(限制個數10)

查詢某個分類商品:

1.根據分類的ID進行查詢商品:

查詢某個二級分類商品:

1.根據二級分類的ID進行查詢商品:

查詢某個商品信息:

1.根據商品ID進行查詢商品:

1.1.4 購物模塊:

添加到購物車:

1.將商品信息添加到購物車中:

從購物車中移除商品:

1.將商品信息從購物車中移除:

清空購物車:

1.將全部的商品信息從購物車中移除:

1.1.5 訂單模塊:

生成訂單:

1.將購物車中的信息存入到數據庫(生成訂單).

* 清空購物車:

爲訂單付款:

1.在線支付功能:

2.修改訂單狀態:

3.修改訂單的信息:(收貨人,聯繫方式,送貨地址)

查詢個人訂單:

1.根據用戶ID查詢訂單.

查詢某個訂單詳情:

1.根據訂單ID進行查詢:

1.2 後臺需求分析:

1.2.1 用戶模塊:

添加用戶:

添加用戶到數據庫

修改用戶:

修改用戶到數據庫

刪除用戶:

刪除用戶

查詢用戶:

查詢用戶(帶分頁)

1.2.2 一級分類:

添加一級分類:

添加一級分類:

修改一級分類:

修改一級分類

刪除一級分類:

刪除一級分類:

* 級聯刪除二級分類:

查詢一級分類:

查詢一級分類:

1.2.3 二級分類:

添加二級分類:

二級分類須要有所屬一級分類:

修改二級分類:

修改二級分類所屬的一級分類:

刪除二級分類:

刪除二級分類:

查詢全部二級分類:

查詢二級分類(帶分頁)

1.2.4 商品模塊:

添加商品:

1.添加商品所屬二級分類:

2.上傳商品圖片:

修改商品:

1.修改商品二級分類:

2.修改商品圖片:

刪除商品:

1.刪除商品:

查詢商品:

1.商品查詢:(帶分頁)

1.2.5 訂單模塊:

查詢訂單:

查詢全部訂單:(帶分頁)

* 異步加載訂單項:

1.3 頁面設計:

使用靜態頁面就OK

1.4 數據庫設計:

用戶表:

* 用戶ID

* 用戶名:

* 密碼:

* 真實姓名:

* 郵箱:

* 地址:

* 電話:

* 用戶狀態: 0未激活  1已經激活

* 激活碼:

 

一級分類:

* 一級分類ID

* 一級分類名稱

 

二級分類:

* 二級分類ID:

* 二級分類名稱:

* 一級分類ID(外鍵指向一級分類主鍵ID)

 

商品表:

* 商品ID:

* 商品名稱:

* 商品商城價格:

* 商品市場價格:

* 商品描述:

* 商品圖片:(路徑)

* 二級分類ID(外鍵指向二級分類主鍵ID)

 

訂單表:

* 訂單ID

* 訂單時間:

* 訂單金額:

* 訂單狀態:

* 訂單地址:

* 訂單電話:

* 訂單收貨人:

* 用戶ID(外鍵指向用戶表的主鍵ID)

 

訂單項表:(須要參與到業務邏輯中)

* 主鍵ID

* 商品ID

* 訂單ID

* 數量

* 小計

 

後臺用戶表:

* 用戶名:

* 密碼:

1.5 編碼實現:

1.5.1 搭建開發環境:

SSH整合:

1.建立一個web工程:

2.引入jar包和配置文件:

* struts2:

* jar:

struts-2.3.15.3\apps\struts2-blank.war\WEB-INF\lib\*.jar

struts-2.3.15.3\lib\struts2-json-plugin-2.3.15.3.jar

struts-2.3.15.3\lib\struts2-spring-plugin-2.3.15.3.jar

* 配置文件:

* web.xml

 <!-- 配置Struts2的核心過濾器 -->

 <filter>

  <filter-name>struts2</filter-name>

  <filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

</filter-class>

 </filter>

 

 <filter-mapping>

  <filter-name>struts2</filter-name>

  <url-pattern>/*</url-pattern>

 </filter-mapping>

* struts.xml

* Spring:

* jar:

Spring3.2 開發最基本jar

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.apache.log4j-1.2.15.jar

AOP開發

spring-aop-3.2.0.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

Spring Jdbc開發

spring-jdbc-3.2.0.RELEASE.jar

spring-tx-3.2.0.RELEASE.jar

Spring事務管理

spring-tx-3.2.0.RELEASE.jar

Spring整合其餘ORM框架

spring-orm-3.2.0.RELEASE.jar

Springweb中使用

spring-web-3.2.0.RELEASE.jar

Spring整合Junit測試

spring-test-3.2.0.RELEASE.jar

* 配置文件:

* web.xml

 <!-- 配置Spring的核心監聽器 -->

 <listener>

  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

 </listener>

 

 <context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>classpath:applicationContext.xml</param-value>

 </context-param>

* applicationContext.xml

* log4j.properties

 

* Hibernate:

* jar:

* hibernate-distribution-3.6.10.Final\hibernate3.jar

* hibernate-distribution-3.6.10.Final\lib\required\*.jar

* hibernate-distribution-3.6.10.Final\lib\jpa\*.jar

* slf4j-log4j整合的jar:

* 數據庫驅動:

* 鏈接池:(c3p0鏈接池)

* 配置文件:

* 沒有hibernate的核心配置文件的方式整合:

* 映射文件:

 

3.配置基本配置信息:

* C3P0鏈接池:

* 引入外部屬性文件:

* jdbc.properties

* 配置鏈接池:

<!-- 配置鏈接池: -->

<!-- 引入外部屬性文件 -->

<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 配置C3P0鏈接池: -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driver}"/>

<property name="jdbcUrl" value="${jdbc.url}"/>

<property name="user" value="${jdbc.user}"/>

<property name="password" value="${jdbc.password}"/>

</bean>

 

* Hibernate相關信息:

<!-- Hibernate的相關信息 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!-- 注入鏈接池 -->

<property name="dataSource" ref="dataSource"/>

<!-- 配置Hibernate的其餘的屬性 -->

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">true</prop>

<prop key="hibernate.connection.autocommit">false</prop>

<prop key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

<!-- 配置Hibernate的映射文件 -->

 

</bean>

 

* 事務管理:

<!-- 事務管理: -->

<!-- 事務管理器 -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

 

<!-- 開啓註解事務 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

1.5.2 引入頁面:

1.引入靜態頁面:

* WEB-INF/jsp/

* 將靜態頁面複製到jsp.

* css/js 放到 WebRoot.

1.5.3 訪問首頁:

建包的格式:

* cn.itcast.shop.index

* action

* cn.itcast.shop.user

* action

* service

* dao

* vo

1.編寫Action:

* IndexAction

2.改造JSP

* cssimage的相對路徑改變成絕對路徑 :

* ./css 替換成 ${pageContext.request.contextPath}/css

3.配置Action

* 配置applicationContext.xml

<!-- 首頁訪問的Action -->

<bean id="indexAction" class="cn.itcast.shop.index.action.IndexAction" scope="prototype">

 

</bean>

* 配置struts.xml

<!-- 配置首頁訪問的Action -->

<action name="index" class="indexAction">

<result name="index">/WEB-INF/jsp/index.jsp</result>

</action>

1.5.4 用戶模塊:註冊

跳轉到註冊頁面:

1.點擊註冊連接(添加到一個Action,Action中完成頁面轉向).

* 修改註冊的訪問路徑:

${ pageContext.request.contextPath }/user_registPage.action

* 編寫Action:

* 配置Action:

* 配置applicationContext.xml

<!-- 用戶模塊的Action -->

<bean id="userAction" class="cn.itcast.shop.user.action.UserAction" scope="prototype">

 

</bean>

* 配置struts.xml

<!-- 配置用戶模塊的Action -->

<action name="user_*" class="userAction" method="{1}">

<result name="registPage">/WEB-INF/jsp/regist.jsp</result>

</action>

* 修改regist.jsp:

* ./css 替換成 ${pageContext.request.contextPath}/css

用戶註冊校驗:

表建立:

CREATE TABLE `user` (

  `uid` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(255) DEFAULT NULL,

  `password` varchar(255) DEFAULT NULL,

  `name` varchar(255) DEFAULT NULL,

  `email` varchar(255) DEFAULT NULL,

  `phone` varchar(255) DEFAULT NULL,

  `addr` varchar(255) DEFAULT NULL,

  `state` int(11) DEFAULT NULL,

  `code` varchar(64) DEFAULT NULL,

  PRIMARY KEY (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

前臺校驗:

* JS校驗:

* 事件觸發:onsubmit

* 校驗:

function checkForm(){

// 校驗用戶名:

// 得到用戶名文本框的值:

var username = document.getElementById("username").value;

if(username == null || username == ''){

alert("用戶名不能爲空!");

return false;

}

// 校驗密碼:

// 得到密碼框的值:

var password = document.getElementById("password").value;

if(password == null || password == ''){

alert("密碼不能爲空!");

return false;

}

// 校驗確認密碼:

var repassword = document.getElementById("repassword").value;

if(repassword != password){

alert("兩次密碼輸入不一致!");

return false;

}

}

 

使用AJAX完成用戶名是否存在異步校驗:

1.事件觸發:

* onblur

2.編寫AJAX代碼:

* Action中提交:傳遞username參數

3.編寫Action

* 接收username:模型驅動接收.

* 編寫實體類

* User

* User.hbm.xml

* 配置到Spring.

4.編寫DAO

* 繼承HibernateDaoSupport

* 在配置中注入sessionFactory

5.編寫Service:

* 注入UserDao

* 事務管理:

 

用戶註冊:後臺數據校驗:

1.Action所在包下建立一個校驗的xml.

* 建立一個與Action類名-validation.xml(針對全部方法進行校驗,只須要針對regist方法進行校驗)

* UserAction-user_regist-validation.xml

<validators>

<!-- 校驗用戶名 -->

<field name="username">

<field-validator type="requiredstring">

<message>用戶名不能爲空!</message>

</field-validator>

</field>

 

<!-- 校驗用戶名 -->

<field name="password">

<field-validator type="requiredstring">

<message>密碼不能爲空!</message>

</field-validator>

</field>

 

<!-- 校驗郵箱 -->

<field name="email">

<field-validator type="email">

<message>郵箱格式不正確!</message>

</field-validator>

</field>

</validators>

 

2.配置INPUT邏輯視圖:

用戶註冊:

1.將數據保存到數據庫 :

* 完善user對象.

2.發送激活郵件:

* 電子郵箱:

* jt@itcast.cn

* 郵件服務器:

* 郵件協議:

* smtp :發送郵件協議

* pop :接收郵件協議

* 郵箱發送全過程:

* 搭建郵箱服務器:

* 安裝郵箱服務器:

* 修改域名:

* 工具---->服務器設置---->shop.com

* 註冊帳號:

* 帳號---->新建帳號

* 安裝客戶端軟件:(接收和發送郵件.)

* outlook foxmail

* 安裝foxmail:

* 配置:

* 配置發送郵件服務器:

* localhost

* 配置接收郵件服務器:

* localhost

* 編碼實現發送郵件:

* 複製mail.jaractivation.jar

* 刪除EE5.0中自帶發送郵件jar:

* windows---->preferences--->lib

* 編寫代碼完成發送郵件:

1.5.5 用戶激活:

1.在郵箱客戶端中點擊激活連接:

* 根據傳遞激活碼進行用戶查詢.

* 若是用戶不爲空:

* 修改用戶狀態 改成1

* 若是用戶爲空:

* 激活碼被篡改了.

1.5.6 用戶登陸:

跳轉到登陸頁面:

1.修改登陸連接:

* 改成action路徑:

* 編寫Action中方法:

* 轉向:

用戶登陸:

1.接收用戶名和密碼:(模型驅動會自動接收)

2.調用userService進行查詢:

* 用戶名和密碼及狀態.

* 查詢到:登陸成功:

* 將用戶的信息存入到session

* 跳轉到首頁

* 沒查詢到:登陸失敗:

* 跳轉回登陸頁面:

1.5.7 用戶退出:

點擊退出的連接:

* 提交到Action---銷燬session

* 頁面跳轉(首頁)

1.5.8 驗證碼程序:(註冊)

1.編寫Action:

* 驗證碼Action:

* 完成配置:

2.在頁面中寫<img src=」驗證碼Action路徑」>

3.編寫JS,看不清換一張

4.提交到Action,Action中進行比較.

* 若是一致提交成功

* 若是不一致回到註冊頁面

1.5.9 首頁上的一級分類的查詢:

1.建立一級分類的表:

CREATE TABLE `category` (

  `cid` int(11) NOT NULL AUTO_INCREMENT,

  `cname` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

 

2.建包及相應的類:

* cn.itcast.shop.category

* action

* service

* CategoryService:業務層對象

* dao

* CategoryDao:持久層對象

* vo

* Category:實體對象

* Category.hbm.xml:映射文件

 

3.ServiceDAO進行配置:

* DAO中注入sessionFactory

* Service中注入DAO

 

4.須要在IndexAction中注入一級分類的Service.

* Action-----Service------Dao

* 將一級分類的數據顯示到頁面:

* 將一級分類的數據存入到session範圍.

1.5.10 首頁上熱門商品顯示:

1.建表:

建立二級分類的表:

CREATE TABLE `categorysecond` (

  `csid` int(11) NOT NULL AUTO_INCREMENT,

  `csname` varchar(255) DEFAULT NULL,

  `cid` int(11) DEFAULT NULL,

  PRIMARY KEY (`csid`),

  KEY `FK936FCAF21DB1FD15` (`cid`),

  CONSTRAINT `FK936FCAF21DB1FD15` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

建立商品表:

CREATE TABLE `product` (

  `pid` int(11) NOT NULL AUTO_INCREMENT,

  `pname` varchar(255) DEFAULT NULL,

  `market_price` double DEFAULT NULL,

  `shop_price` double DEFAULT NULL,

  `image` varchar(255) DEFAULT NULL,

  `num` int(11) DEFAULT NULL,

  `pdesc` varchar(255) DEFAULT NULL,

  `is_hot` int(11) DEFAULT NULL,

  `pdate` datetime DEFAULT NULL,

  `csid` int(11) DEFAULT NULL,

  PRIMARY KEY (`pid`),

  KEY `FKED8DCCEFB9B74E02` (`csid`),

  CONSTRAINT `FKED8DCCEFB9B74E02` FOREIGN KEY (`csid`) REFERENCES `categorysecond` (`csid`)

) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;

 

2.建立包及類

* cn.itcast.shop.product

* action

* ProductAction

* service

* ProductService

* dao

* ProductDao

* vo

* Product

* Product.hbm.xml

 

3.ServiceDao完成配置:

4.Action-----ProductService------>ProductDao

* 查詢熱門商品:

* is_hot: 0 :不是熱門  1:是熱門.

* 查詢帶有個數:

* 分頁查詢:

* 將查詢到數據保存到值棧中.

1.5.11 首頁上最新商品顯示:

1.Action-----ProductService------>ProductDao

* 查詢最新商品:

* 按商品上傳日期倒序進行排序 只顯示10.

* 將查詢到記錄保存到值棧中:

1.5.12 首頁上點擊商品顯示商品詳情:

1.點擊商品連接:

* 傳遞商品id.

2.編寫Action:

* 編寫Action,繼承ActionSupport實現模型驅動接口.

* 編寫一個執行的方法.

3.配置Action:

* applicationContext.xml中配置Action

* struts.xml中配置Action

4.Action中調用Service完成根據ID進行查詢的方法:

* 注入ProductService.

* 完成查詢

5.在頁面上顯示相應數據 :

* 頁面轉向

* 修改頁面

* 顯示數據

1.5.13 首頁上點擊一級分類,查詢商品列表:(左側一級分類和二級分類關聯查詢)

1.建立二級分類的包及類:

* cn.itcast.shop.categorysecond

* action

* CategoryAction

* service

* CategoryService

* dao

* CategoryDao

* vo

* CategorySecond

* CategorySecond.hbm.xml

 

2.配置一級分類和二級分類的關聯關係:

* Category.xml

<!-- 配置二級分類的集合 -->

<set name="categorySeconds">

<key column="cid"/>

<one-to-many class="cn.itcast.shop.categorysecond.vo.CategorySecond"/>

</set>

* CategorySecond.xml

<many-to-one name="category" class="cn.itcast.shop.category.vo.Category" column="cid"></many-to-one>

 

3.點擊一級分類的連接:

* 傳遞一級分類的id.

 

4.編寫Action:

* 接收cid:

* 編寫一個執行的方法:直接返回字符串(頁面)

* 顯示左側分類

* 關聯查找:(直接session中得到一級分類的數據(須要配置一級分類上二級分類的集合lazy=」false」))

 

1.5.14 首頁上點擊一級分類,查詢商品列表:(顯示商品列表)

1.查詢商品,帶有分頁顯示商品.

* 回到商品列表頁面:

* 商品集合,當前頁數,總頁數(總記錄數),每頁顯示記錄數.( 將後臺 這些數據 帶到頁面上,首選 值棧. )

* 將這些數據封裝到一個分頁類中.(最後將分頁類保存到值棧中就OK).

2.封裝一個PageBean.

3.完成查詢:

* 傳遞當前頁數:

* 調用Service完成查詢.

 

4.配置二級分類和商品關聯關係:

 

1.5.15 商品分類頁面根據二級分類ID查詢商品:

1.點擊二級分類連接:

* 傳遞csid

* 傳遞page=1

2.編寫Action :

* 接收csid:

* 接收page

3.調用Service完成查詢:

* 封裝成PageBean

4.在頁面中進行顯示:

1.5.16 將商品添加到購物車:

1.封裝一個購物車對象:

* Cart:購物車對象:

* CartItem的集合:(選擇Map集合,移除購物車時候比較方便.)

* total:總計:

* 功能:

* 將購物項添加到購物車:

* 從購物車中移除購物項:

* 清空購物車:

public class Cart {

// 購物車屬性

// 購物項集合:Mapkey就是商品pid,value:購物項

private Map<Integer, CartItem> map = new LinkedHashMap<Integer, CartItem>();

 

// Cart對象中有一個叫cartItems屬性.

public Collection<CartItem> getCartItems(){

return map.values();

}

 

// 購物總計:

private double total;

 

public void setTotal(double total) {

this.total = total;

}

 

// 購物車的功能:

// 1.將購物項添加到購物車

public void addCart(CartItem cartItem) {

// 判斷購物車中是否已經存在該購物項:

/*

 *  * 若是存在:

 *   * 數量增長

 *   * 總計 = 總計 + 購物項小計

 *  * 若是不存在:

 *   * map中添加購物項

 *   * 總計 = 總計 + 購物項小計

 */

// 得到商品id.

Integer pid = cartItem.getProduct().getPid();

// 判斷購物車中是否已經存在該購物項:

if(map.containsKey(pid)){

// 存在

CartItem _cartItem = map.get(pid);// 得到購物車中原來的購物項

_cartItem.setCount(_cartItem.getCount()+cartItem.getCount());

}else{

// 不存在

map.put(pid, cartItem);

}

// 設置總計的值

total += cartItem.getSubtotal();

}

 

// 2.從購物車移除購物項

public void removeCart(Integer pid) {

// 將購物項移除購物車:

CartItem cartItem = map.remove(pid);

// 總計 = 總計 -移除的購物項小計:

total -= cartItem.getSubtotal();

}

 

// 3.清空購物車

public void clearCart() {

// 將全部購物項清空

map.clear();

// 將總計設置爲0

total = 0;

}

}

 

* CartItem:購物項對象:

* Product:商品信息.

* count:購買某種商品數量:

* subtotal:購買某種商品的小計:

 

public class CartItem {

private Product product; // 購物項中商品信息

private int count; // 購買某種商品數量

private double subtotal; // 購買某種商品小計

public Product getProduct() {

return product;

}

public void setProduct(Product product) {

this.product = product;

}

public int getCount() {

return count;

}

public void setCount(int count) {

this.count = count;

}

// 小計自動計算的.

public double getSubtotal() {

return count * product.getShop_price();

}

/*public void setSubtotal(double subtotal) {

this.subtotal = subtotal;

}

*/

 

}

2.跳轉到購物車頁面:

* 點擊加入購物車連接:

* 提交表單

* pid

* 數量

* 完成頁面轉向:

 

3.添加到購物車:

* Action:

* 根據pid查詢.

* 將商品記錄封裝到CartItem.

* 得到Cart的方法.

* 調用CartaddCart(CartItem cartItem);完成添加到購物車操做.

 

4.清空購物車:

* Action:

* 得到購物車

* 調用購物車中clearCart();方法完成清空.

* 判斷,若是購物車爲空不顯示.

 

5.從購物車中移除購物項:

* 點擊購物車頁面中刪除連接

* 傳遞一個pid.

* Action:

* 得到購物車

* 調用購物車中removeCart(Integer pid);

 

6.點擊個人購物車:

* 跳轉到購物車頁面:

1.5.17 前臺訂單的模塊:

訂單模塊的準備工做:

建立表:

訂單表

CREATE TABLE `orders` (

  `oid` int(11) NOT NULL AUTO_INCREMENT,

  `total` double DEFAULT NULL,

  `ordertime` datetime DEFAULT NULL,

  `state` int(11) DEFAULT NULL,

  `name` varchar(21) DEFAULT NULL,

  `addr` varchar(60) DEFAULT NULL,

  `phone` varchar(20) DEFAULT NULL,

  `uid` int(11) DEFAULT NULL,

  PRIMARY KEY (`oid`),

  KEY `FKC3DF62E5AA3D9C7` (`uid`),

  CONSTRAINT `FKC3DF62E5AA3D9C7` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

訂單項:(中間表 中間表參與到業務邏輯中)

CREATE TABLE `orderitem` (

  `itemid` int(11) NOT NULL AUTO_INCREMENT,

  `count` int(11) DEFAULT NULL,

  `subtotal` double DEFAULT NULL,

  `pid` int(11) DEFAULT NULL,

  `oid` int(11) DEFAULT NULL,

  PRIMARY KEY (`itemid`),

  KEY `FKE8B2AB6166C01961` (`oid`),

  KEY `FKE8B2AB6171DB7AE4` (`pid`),

  CONSTRAINT `FKE8B2AB6166C01961` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`),

  CONSTRAINT `FKE8B2AB6171DB7AE4` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

建立包:

* cn.itcast.shop.order

* action

* OrderAction

* service

* OrderService

* dao

* OrderDao

* vo

* Order

* Order.hbm.xml

* OrderItem

* OrderItem.hbm.xml

 

配置:

* applicationContext.xml

* 配置映射

* ActionServiceDao

訂單模塊代碼實現:

1.在購物車頁面點擊:提交訂單 按鈕.完成頁面跳轉!

 

2.生成訂單:

* 保存訂單的數據:

* 在頁面中顯示訂單數據:

* 經過模型驅動的對象將數據傳遞到頁面.(值棧)

 

3.個人訂單:

* 根據用戶的id查詢當前用戶的全部的訂單:

 

4.訂單列表上點擊:付款

* 跳轉到頁面:

* 根據訂單的id查詢訂單.

* 在頁面中對其進行付款:

 

5.訂單付款的功能:

* 在線支付的方式:

* 在線支付:

* 與第三方支付公司對接:(易寶)

* 在線支付的流程:

* 付款功能代碼實現:

* 修改訂單數據:(收貨人,地址,電話)

* 完成付款的功能:

 

1.6 後臺管理:

1.6.1 後臺頁面的佈局:

採用框架進行佈局:

* 使用dtree.js做爲樹形結構菜單:

 

1.6.2 後臺登陸功能:

1.引入後臺管理頁面:

2.建立表:

CREATE TABLE `adminuser` (

  `uid` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(255) DEFAULT NULL,

  `password` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

3.建立包:

* cn.itcast.shop.adminuser

* action

* AdminUserAction

* service

* AdminUserService

* dao

* AdminUserDao

* vo

* AdminUser

* AdminUser.hbm.xml

 

4.登陸代碼實現:

* index.jsp----->AdminUserAction----->AdminUserService----->AdminUserDao

 

1.6.3 後臺一級分類管理:

查詢一級分類:

1.點擊左邊樹形菜單上的一級分類管理:

* 修改請求路徑:

2.編寫後臺管理的Action

* cn.itcast.shop.category

* adminaction

* AdminCategoryAction

3.配置這個Action:

* applicationContext.xml

* struts.xml

添加一級分類:

1.在一級分類列表頁面上點擊添加按鈕.

* 跳轉到一個添加頁面.

2.在添加頁面上,輸入一級分類名稱.

* 將一級分類的數據,添加到數據庫中.

刪除一級分類:

1.在一級分類列表頁面上點擊刪除連接.

* 傳遞一級分類的id.

2.Action:

* 接收一級分類id

* 調用Service完成刪除.

* 頁面跳轉.

修改一級分類:

1.在一級分類列表頁面上點擊編輯連接.

* 根據cid查詢一級分類.

* 將一級分類的數據顯示到頁面上.

2.根據頁面上顯示數據,修改數據.

1.6.4 後臺二級分類管理:

查詢二級分類:

1.在左邊樹形菜單中添加一個節點:二級分類.

2.建立二級分類包:

* cn.itcast.shop.categorysecond

* adminaction

* AdminCategorySecondAction

3.執行查詢:

 

添加二級分類:

1.在二級分類列表頁面上點擊添加按鈕,跳轉到添加頁面.

* 查詢全部的一級分類.

2.在頁面上顯示出全部的一級分類下拉列表.

3.在添加頁面上點擊肯定:

* 將二級分類的數據保存到數據庫.

刪除二級分類:

1.在二級分類列表頁面上點擊刪除連接.

* 傳遞刪除二級分類id.

2.Action中接收二級分類id.

* 刪除二級分類.

* 先查詢在刪除.配置cascade屬性.

修改二級分類:

1.在二級分類的列表頁面上點擊編輯連接.

* 傳遞二級分類的id

2.根據二級分類id查詢二級分類.將二級分類數據顯示到頁面上.

* 查詢全部一級分類.

3.跳轉到編輯頁面.

4.在編輯頁面點擊肯定按鈕:

* 將數據修改到數據庫.

1.6.5 商品管理:

查詢商品:(帶分頁)

1.在左邊樹形菜單上,添加一個節點:商品管理.

2.建立包:

* cn.itcast.shop.product

* adminaction

* AdminProductAction

3.查詢:

* 帶分頁查詢:

4.配置:

 

添加商品:(上傳商品的圖片)

1.在商品列表頁面點擊添加按鈕:

* 查詢全部的二級分類:

* 頁面跳轉:商品添加頁面.

2.在商品的添加頁面:

* 將數據添加到數據庫.

* 完成商品圖片上傳.

* struts2框架中文件上傳:

* 文件的條件:

* 表單提交的方式須要是POST

* 表單中上傳項必須有一個name屬性.

* 表單的enctype屬性值須要是multipart/form-data

刪除商品:

1.在商品列表頁面上點擊刪除連接:

* 傳遞商品的id.

2.刪除商品的圖片.

3.頁面跳轉:

 

修改商品:(上傳商品的圖片)

1.在商品列表頁面上點擊編輯連接:

* 傳遞商品的id.

2.Action:

* 根據商品的id查詢商品

* 查詢全部的二級分類集合

* 頁面跳轉:

3.在編輯頁面:點擊肯定按鈕:

* 將數據保存到數據庫中.

* 修改上傳的圖片.

* 頁面跳轉:

1.6.6 後臺訂單管理:

查詢訂單:

1.在左邊樹形菜單中添加一個節點:訂單管理.

2.建立包:

* cn.itcast.shop.order

* adminaction

* AdminOrderAction

3.提交到Action:

* 傳遞page參數

* 分頁查詢

4.跳轉頁面:

* 顯示訂單:

訂單詳情的查看:

1.在訂單列表頁面中點擊訂單詳情按鈕:

* 傳遞訂單id.

2.使用AJAX異步獲取當前這個訂單的訂單項.

訂單狀態修改:

1.在後臺訂單列表頁面上點擊發貨連接:

* 傳遞訂單id

2.Action

* 根據訂單id查詢訂單

* 修改訂單狀態:

* 頁面轉向:

前臺訂單狀態修改:

1.在個人訂單頁面上點擊確認收貨連接:

* 傳遞訂單id.

2.Action:

* 根據訂單id查詢訂單

* 修改訂單狀態

* 頁面轉向

1.6.7 後臺權限校驗攔截器:

1.攔截器:能夠對Action的訪問進行攔截.

2.編寫攔截器:

* 編寫一個類實現Interceptor接口.或者繼承Interceptor的子類.

* 配置攔截器.

相關文章
相關標籤/搜索