网上商城

1.1 前台需求分析:

1.1.1 用户模块:

注册:

1.前台JS校验:

2.使用AJAX完成对用户名异步校验:

3.后台校验:

4.验证码:

5.发送激活邮件:

6.将用户信息存入到数据库:

激活:

1.点击链接完成激活:

* 根据激活码,查询数据库中是否有该用户:

* 如果有:激活.(将激活码字段清空.)

* 修改用户的状态:

登录:

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

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

* 将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.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.发送激活邮件:

* 电子邮箱:

* [email protected]

* 邮件服务器:

* 邮件协议:

* smtp :发送邮件协议

* pop :接收邮件协议

* 邮箱发送全过程:

* 搭建邮箱服务器:

* 安装邮箱服务器:

* 修改域名:

* 工具---->服务器设置---->shop.com

* 注册账号:

* 账号---->新建账号

* 安装客户端软件:(接收和发送邮件.)

* outlook 和 foxmail

* 安装foxmail:

* 配置:

* 配置发送邮件服务器:

* localhost

* 配置接收邮件服务器:

* localhost

* 编码实现发送邮件:

* 复制mail.jar和activation.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.对Service和DAO进行配置:

* 在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.将Service和Dao完成配置:

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 {

// 购物车属性

// 购物项集合: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.点击我的购物车:

* 跳转到购物车页面:

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

* 配置映射

* Action、Service、Dao

订单模块代码实现:

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的子类.

* 配置拦截器.

原文地址:https://www.cnblogs.com/yunfeioliver/p/9692066.html

时间: 2024-10-10 23:53:18

网上商城的相关文章

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(非官方文章)

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费仿京东商城) 项目结构图如下: 后台管理页面: 功能简介: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品

易购网上商城01

易购商城的第一天 1   安排计划 1.电商行业的背景. 2.易购商城的介绍. 3.工程项目的搭建. 2   电商行业介绍 2.1   电商行业技术特点 技术新 技术范围广 分布式 高并发.集群.负载均衡.高可用 海量数据 业务复杂 系统安全 3   易购商城 3.1   易购商城简介 3.1.1   电商行业的模式: B2B:企业对企业.阿里巴巴 B2C:企业对客户 淘宝,(京东B2B2C) 苏宁易购 C2C:客户对客户 闲鱼 赶集 友邻 O2O:线上对线下 百度外卖.美容到家... 3.1.

关于网上商城开发的随笔记录2

继续前一篇文章关于网上商城开发的随笔记录1,原文地址:http://www.cnblogs.com/zhankui/p/4580414.html 夏天长沙的天气十分闷热,又十分多变,所以忙了一下午,效率不高,只是对文档进行大篇幅的修改,参考大量购物网站,设计出了数据库模型,(看到这里是不是以为我要分享数据库了?不好意思,你又想多了),这里主要是讲用例图,老师说开发的时候客户是看不懂我们的专业术语的(简单来说就是学微软,吧所有的客户当白痴,简单化,当然这是很必要的),所以要让对方知道我们做出来过后

BrnShop开源网上商城第一讲:架构设计

首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测.4天6000次浏览,140个推荐,170个评论,8000次下载.看到这些数据后我们内心除了激动外,更多了一份责任.无论将来遇到多大的困难,我们一定要坚持把BrnShop坚持到底!! 如果你还不知道BrnShop是什么或还没有下载源码的可以点此下载,如果下载源码后发现商城有bug,也可以点此下载(什么?你还是1.0.**版本?我们现在都已经更新到1.

重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服务器在香港,所以如果下载速度过慢可来此下载网盘) 项目结构图如下: 后台管理页面: 一个完整的网上商城应该至少包含以下几个方面: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品关键词列表,商品库存(有的需要按照仓库拆分

【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品

网上商城实战2 今日任务 完成分类模块的功能 完成商品模块的功能 1.1      分类模块的功能: 1.1.1    查询分类的功能: 1.1.2    查询分类的代码实现: 1.1.2.1  创建表: CREATE TABLE `category` ( `cid` varchar(32) NOT NULL, `cname` varchar(20) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1

【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布

前面陆陆续续的完成了网上商城的一些基本功能,虽然还有很多地方有待完善,但是不影响项目的部署和发布,我们可以先来玩一把,这一节主要介绍下域名空间的申请以及项目的部署和发布流程. 1. 域名空间的申请 作为一个伟大的屌丝,肯定没钱买域名空间,很自然的想到去申请个免费的,现在免费的域名空间也很多,我在福佳jsp技术网上申请了一个试用期是15天的,大家也可以去申请个玩玩,反正作为学习,这已经足够了,当然,如果要长期的肯定要付费的.注册过程我截几个图,如下: 然后下一步,最后开通如下: 建议把上面这些信息

基于SSH框架的网上商城的质量属性

常见质量属性 1.性能 性能就是一个东西有多快,通常指响应时间或延迟. 响应时间:从发出请求到收到响应所用的时间,比如用户点击网页中的超链接或桌面应用程序中的按钮 延迟:消息从A点到B点,通过你的系统所用的时间. 就算构建的不是“高性能”软件系统,性能也可应用于Web应用系统.桌面应用系统.面向服务架构.消息系统等几乎所有你要构建的软件系统. 2.可用性 可用性是软件对服务请求的可操作和可见程度.你常会看到用“9”来衡量或指代可用性,如99.99%(四个9)或99.999%(五个9).这些数字指

SSH网上商城---商品详情页的制作

在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商品的名称等等,但是这些信息不够详情,我们需要了解更多的关于连衣裙的详情,点击某个商品,跳转页面,查看连衣裙的详情,以前小编逛淘宝的时候,从来都没有想过这个功能是如何实现,只知道一个劲儿的在那儿逛,小编现在接手的这个项目中就遇到这样的功能,点击商品跳转到某个商品的详情页面,这个功能该如何实现呢?不要着

网上商城BrnShop1.9升级至2.1升级说明(非官方版本仅提供技术交流)

开源Asp.Net MVC网上商城BrnShop1.9正式版本升级至开源Asp.Net MVC网上商城BrnShop2.1正式版本的非官方说明文档,如有任何异议请回复或是私信沟通. 升级前的说明: 1.此文档旨在为开源系统提供交流 2.升级的文件备份与数据库备份,如因此引起的不必要麻烦.本人不负任何直接责任或是间接责任. 写此文档的说明 1.官方没有提供便捷升级的包以及相关文件 2.官方没有提供提供升级说明 1.数据库篇 1.1 [bsp_banners]数据表及相关 1.2 [bsp_adve