1.前臺JS校驗:css
2.使用AJAX完成對用戶名異步校驗:web
3.後臺校驗:spring
4.驗證碼:sql
5.發送激活郵件:數據庫
6.將用戶信息存入到數據庫:express
1.點擊連接完成激活:apache
* 根據激活碼,查詢數據庫中是否有該用戶:json
* 若是有:激活.(將激活碼字段清空.)windows
* 修改用戶的狀態:服務器
1.輸入用戶名和密碼:(數據校驗.)
2.用戶名和密碼都正確同時用戶狀態必須是激活狀態:
1.銷燬session:
1.查詢一級分類.
* 將一級分類存入到session範圍.(每一個頁面中都有一級分類的數據)
1.查詢全部一級分類:
* 同時查詢到每一個一級分類下所屬的二級分類
1.查詢熱門商品:(限制個數10個)
1.查詢最新商品:(限制個數10個)
1.根據分類的ID進行查詢商品:
1.根據二級分類的ID進行查詢商品:
1.根據商品ID進行查詢商品:
1.將商品信息添加到購物車中:
1.將商品信息從購物車中移除:
1.將全部的商品信息從購物車中移除:
1.將購物車中的信息存入到數據庫(生成訂單).
* 清空購物車:
1.在線支付功能:
2.修改訂單狀態:
3.修改訂單的信息:(收貨人,聯繫方式,送貨地址)
1.根據用戶ID查詢訂單.
1.根據訂單ID進行查詢:
添加用戶到數據庫
修改用戶到數據庫
刪除用戶
查詢用戶(帶分頁)
添加一級分類:
修改一級分類
刪除一級分類:
* 級聯刪除二級分類:
查詢一級分類:
二級分類須要有所屬一級分類:
修改二級分類所屬的一級分類:
刪除二級分類:
查詢二級分類(帶分頁)
1.添加商品所屬二級分類:
2.上傳商品圖片:
1.修改商品二級分類:
2.修改商品圖片:
1.刪除商品:
1.商品查詢:(帶分頁)
查詢全部訂單:(帶分頁)
* 異步加載訂單項:
使用靜態頁面就OK
用戶表:
* 用戶ID
* 用戶名:
* 密碼:
* 真實姓名:
* 郵箱:
* 地址:
* 電話:
* 用戶狀態: 0未激活 1已經激活
* 激活碼:
一級分類:
* 一級分類ID
* 一級分類名稱
二級分類:
* 二級分類ID:
* 二級分類名稱:
* 一級分類ID(外鍵指向一級分類主鍵ID)
商品表:
* 商品ID:
* 商品名稱:
* 商品商城價格:
* 商品市場價格:
* 商品描述:
* 商品圖片:(路徑)
* 二級分類ID(外鍵指向二級分類主鍵ID)
訂單表:
* 訂單ID
* 訂單時間:
* 訂單金額:
* 訂單狀態:
* 訂單地址:
* 訂單電話:
* 訂單收貨人:
* 用戶ID(外鍵指向用戶表的主鍵ID)
訂單項表:(須要參與到業務邏輯中)
* 主鍵ID
* 商品ID
* 訂單ID
* 數量
* 小計
後臺用戶表:
* 用戶名:
* 密碼:
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
Spring在web中使用
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.引入靜態頁面:
* 在WEB-INF/jsp/
* 將靜態頁面複製到jsp下.
* 將css/js 放到 WebRoot下.
建包的格式:
* cn.itcast.shop.index
* action
* cn.itcast.shop.user
* action
* service
* dao
* vo
1.編寫Action:
* IndexAction
2.改造JSP
* 將css和image的相對路徑改變成絕對路徑 :
* ./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.點擊註冊連接(添加到一個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.發送激活郵件:
* 電子郵箱:
* 郵件服務器:
* 郵件協議:
* smtp :發送郵件協議
* pop :接收郵件協議
* 郵箱發送全過程:
* 搭建郵箱服務器:
* 安裝郵箱服務器:
* 修改域名:
* 工具---->服務器設置---->shop.com
* 註冊帳號:
* 帳號---->新建帳號
* 安裝客戶端軟件:(接收和發送郵件.)
* outlook 和 foxmail
* 安裝foxmail:
* 配置:
* 配置發送郵件服務器:
* localhost
* 配置接收郵件服務器:
* localhost
* 編碼實現發送郵件:
* 複製mail.jar和activation.jar
* 刪除EE5.0中自帶發送郵件jar包:
* windows---->preferences--->lib
* 編寫代碼完成發送郵件:
1.在郵箱客戶端中點擊激活連接:
* 根據傳遞激活碼進行用戶查詢.
* 若是用戶不爲空:
* 修改用戶狀態 改成1
* 若是用戶爲空:
* 激活碼被篡改了.
1.修改登陸連接:
* 改成action路徑:
* 編寫Action中方法:
* 轉向:
1.接收用戶名和密碼:(模型驅動會自動接收)
2.調用userService進行查詢:
* 用戶名和密碼及狀態.
* 查詢到:登陸成功:
* 將用戶的信息存入到session
* 跳轉到首頁
* 沒查詢到:登陸失敗:
* 跳轉回登陸頁面:
點擊退出的連接:
* 提交到Action---銷燬session
* 頁面跳轉(首頁)
1.編寫Action:
* 驗證碼Action:
* 完成配置:
2.在頁面中寫<img src=」驗證碼Action路徑」>
3.編寫JS,看不清換一張
4.提交到Action,在Action中進行比較.
* 若是一致提交成功
* 若是不一致回到註冊頁面
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.對Service和DAO進行配置:
* 在DAO中注入sessionFactory
* 在Service中注入DAO
4.須要在IndexAction中注入一級分類的Service.
* Action-----Service------Dao
* 將一級分類的數據顯示到頁面:
* 將一級分類的數據存入到session範圍.
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.將Service和Dao完成配置:
4.Action-----ProductService------>ProductDao
* 查詢熱門商品:
* is_hot: 0 :不是熱門 1:是熱門.
* 查詢帶有個數:
* 分頁查詢:
* 將查詢到數據保存到值棧中.
1.Action-----ProductService------>ProductDao
* 查詢最新商品:
* 按商品上傳日期倒序進行排序 只顯示10個.
* 將查詢到記錄保存到值棧中:
1.點擊商品連接:
* 傳遞商品id.
2.編寫Action:
* 編寫Action類,繼承ActionSupport實現模型驅動接口.
* 編寫一個執行的方法.
3.配置Action:
* 在applicationContext.xml中配置Action
* 在struts.xml中配置Action
4.在Action中調用Service完成根據ID進行查詢的方法:
* 注入ProductService.
* 完成查詢
5.在頁面上顯示相應數據 :
* 頁面轉向
* 修改頁面
* 顯示數據
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.查詢商品,帶有分頁顯示商品.
* 回到商品列表頁面:
* 商品集合,當前頁數,總頁數(總記錄數),每頁顯示記錄數.( 將後臺 這些數據 帶到頁面上,首選 值棧. )
* 將這些數據封裝到一個分頁類中.(最後將分頁類保存到值棧中就OK).
2.封裝一個PageBean.
3.完成查詢:
* 傳遞當前頁數:
* 調用Service完成查詢.
4.配置二級分類和商品關聯關係:
1.點擊二級分類連接:
* 傳遞csid
* 傳遞page=1
2.編寫Action :
* 接收csid:
* 接收page
3.調用Service完成查詢:
* 封裝成PageBean
4.在頁面中進行顯示:
1.封裝一個購物車對象:
* Cart:購物車對象:
* CartItem的集合:(選擇Map集合,移除購物車時候比較方便.)
* total:總計:
* 功能:
* 將購物項添加到購物車:
* 從購物車中移除購物項:
* 清空購物車:
public class Cart {
// 購物車屬性
// 購物項集合:Map的key就是商品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的方法.
* 調用Cart中addCart(CartItem cartItem);完成添加到購物車操做.
4.清空購物車:
* 在Action中:
* 得到購物車
* 調用購物車中clearCart();方法完成清空.
* 判斷,若是購物車爲空不顯示.
5.從購物車中移除購物項:
* 點擊購物車頁面中刪除連接
* 傳遞一個pid.
* Action中:
* 得到購物車
* 調用購物車中removeCart(Integer pid);
6.點擊個人購物車:
* 跳轉到購物車頁面:
建立表:
訂單表
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
* 配置映射
* Action、Service、Dao
1.在購物車頁面點擊:提交訂單 按鈕.完成頁面跳轉!
2.生成訂單:
* 保存訂單的數據:
* 在頁面中顯示訂單數據:
* 經過模型驅動的對象將數據傳遞到頁面.(值棧)
3.個人訂單:
* 根據用戶的id查詢當前用戶的全部的訂單:
4.訂單列表上點擊:付款
* 跳轉到頁面:
* 根據訂單的id查詢訂單.
* 在頁面中對其進行付款:
5.訂單付款的功能:
* 在線支付的方式:
* 在線支付:
* 與第三方支付公司對接:(易寶)
* 在線支付的流程:
* 付款功能代碼實現:
* 修改訂單數據:(收貨人,地址,電話)
* 完成付款的功能:
採用框架進行佈局:
* 使用dtree.js做爲樹形結構菜單:
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.點擊左邊樹形菜單上的一級分類管理:
* 修改請求路徑:
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.在左邊樹形菜單中添加一個節點:二級分類.
2.建立二級分類包:
* cn.itcast.shop.categorysecond
* adminaction
* AdminCategorySecondAction
3.執行查詢:
1.在二級分類列表頁面上點擊」添加」按鈕,跳轉到添加頁面.
* 查詢全部的一級分類.
2.在頁面上顯示出全部的一級分類下拉列表.
3.在添加頁面上點擊肯定:
* 將二級分類的數據保存到數據庫.
1.在二級分類列表頁面上點擊」刪除」連接.
* 傳遞刪除二級分類id.
2.在Action中接收二級分類id.
* 刪除二級分類.
* 先查詢在刪除.配置cascade屬性.
1.在二級分類的列表頁面上點擊」編輯」連接.
* 傳遞二級分類的id
2.根據二級分類id查詢二級分類.將二級分類數據顯示到頁面上.
* 查詢全部一級分類.
3.跳轉到編輯頁面.
4.在編輯頁面點擊肯定按鈕:
* 將數據修改到數據庫.
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.在左邊樹形菜單中添加一個節點:訂單管理.
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.攔截器:能夠對Action的訪問進行攔截.
2.編寫攔截器:
* 編寫一個類實現Interceptor接口.或者繼承Interceptor的子類.
* 配置攔截器.