1.课程计划
https://blog.csdn.net/etna_hh/article/details/83154260
第十二天:
- 购物车实现
- 订单确认页面展示
2.购物车的实现
2.1 功能分析
1、购物车是一个独立的表现层工程。
2、添加购物车不要求登录。可以指定购买商品的数量。
3、展示购物车列表页面
4、修改购物车商品数量
5、删除购物车商品
2.2 工程搭建
复制依赖到e3-cart工程:
<dependencies>
<dependency>
<groupId>cn.e3mall</groupId>
<artifactId>e3-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- 配置tomcat插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8089</port>
</configuration>
</plugin>
</plugins>
</build>
复制依赖到e3-cart-interface工程:
<dependencies>
<dependency>
<groupId>cn.e3mall</groupId>
<artifactId>e3-manager-pojo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
复制依赖到e3-cart-service工程:
<dependencies>
<dependency>
<groupId>cn.e3mall</groupId>
<artifactId>e3-manager-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.e3mall</groupId>
<artifactId>e3-cart-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- spring的依赖 -->
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<!-- 排除dubbo自带的spring 防止冲突 -->
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<!-- 排除dubbo自带的netty 防止冲突 -->
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
</dependencies>
复制e3-content-service所有配置到e3-cart-service工程下:
1.清空resource.properties内容
2.修改applicationContext-service.xml配置文件:
3.创建包:
4.修改applicationContext-trans.xml配置文件:
5.复制web.xml文件到e3-cart-service工程:
6.创建e3-cart-web工程(可以参考e3-portal-web):
7.复制依赖到e3-cart-web工程:
<dependencies>
<dependency>
<groupId>cn.e3mall</groupId>
<artifactId>e3-cart-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- spring的依赖 -->
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
</dependency> -->
</dependencies>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8090</port>
</configuration>
</plugin>
</plugins>
</build>
8.复制web.xml文件到e3-cart-web工程:
9.复制e3-item-web配置文件到e3-cart-web工程:
清空resource.properties内容
删除applicationContext-activemq.xml配置文件
10.修改springmvc.xml配置文件:
11.创建包:
2.2.1 Pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <p style="margin-left:0cm;"> <span style="color:#7f007f;">xsi:schemaLocation</span><span style="color:#000000;">=</span><em><span style="color:#2a00ff;">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span></em><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">modelVersion</span><span style="color:#008080;">></span><span style="color:#000000;">4.0.0</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">modelVersion</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">parent</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">cn.e3mall</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-parent</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">></span><span style="color:#000000;">0.0.1-SNAPSHOT</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">parent</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <u><span style="color:#008080;"><</span></u><u><span style="color:#3f7f7f;">groupId</span></u><u><span style="color:#008080;">></span></u><u><span style="color:#000000;">cn.e3mall</span></u><u><span style="color:#008080;"></</span></u><u><span style="color:#3f7f7f;">groupId</span></u><u><span style="color:#008080;">></span></u></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-cart-web</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <u><span style="color:#008080;"><</span></u><u><span style="color:#3f7f7f;">version</span></u><u><span style="color:#008080;">></span></u><u><span style="color:#000000;">0.0.1-SNAPSHOT</span></u><u><span style="color:#008080;"></</span></u><u><span style="color:#3f7f7f;">version</span></u><u><span style="color:#008080;">></span></u></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">packaging</span><span style="color:#008080;">></span><span style="color:#000000;">war</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">packaging</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependencies</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">cn.e3mall</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-manager-interface</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">></span><span style="color:#000000;">0.0.1-SNAPSHOT</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;"><!-- Spring --></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-context</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-beans</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-<u>webmvc</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-<u>jdbc</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-aspects</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-<u>jms</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring-context-support</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;"><!-- JSP</span><span style="color:#3f5fbf;">相关 --></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><u><span style="color:#000000;">jstl</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">jstl</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">javax.servlet</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">servlet</span></u><span style="color:#000000;">-<u>api</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">></span><span style="color:#000000;">provided</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">javax.servlet</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">jsp</span></u><span style="color:#000000;">-<u>api</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">></span><span style="color:#000000;">provided</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;"><!-- <u>dubbo</u></span><span style="color:#3f5fbf;">相关 --></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">com.alibaba</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">dubbo</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;"><!-- </span><span style="color:#3f5fbf;">排除依赖 --></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">exclusions</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.springframework</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">spring</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.jboss.netty</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">netty</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">exclusions</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.apache.zookeeper</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">zookeeper</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">com.github.sgroschupf</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">zkclient</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><u><span style="color:#000000;">junit</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><u><span style="color:#000000;">junit</span></u><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">dependencies</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;"><!-- </span><span style="color:#3f5fbf;">配置<u>tomcat</u>插件 --></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">build</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">plugins</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">plugin</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span><span style="color:#000000;">org.apache.tomcat.maven</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span><span style="color:#000000;">tomcat7-<u>maven</u>-<u>plugin</u></span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">configuration</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">port</span><span style="color:#008080;">></span><span style="color:#000000;">8089</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">port</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"><</span><span style="color:#3f7f7f;">path</span><span style="color:#008080;">></span><span style="color:#000000;">/</span><span style="color:#008080;"></</span><span style="color:#3f7f7f;">path</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">configuration</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">plugin</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">plugins</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"> <span style="color:#008080;"></</span><span style="color:#3f7f7f;">build</span><span style="color:#008080;">></span></p>
<p style="margin-left:0cm;"><span style="color:#008080;"></</span><span style="color:#3f7f7f;">project</span><span style="color:#008080;">></span></p>
</td>
</tr></tbody></table></div><h2><a name="t5"></a>2.3 添加购物车</h2>
|
2.3.1 功能分析
在不登陆的情况下也可以添加购物车。把购物车信息写入cookie。
优点:
- 不占用服务端存储空间
- 用户体验好。
- 代码实现简单。
缺点:
- cookie中保存的容量有限。最大4k
- 把购物车信息保存在cookie中,更换设备购物车信息不能同步。
改造商品详情页面e3-item-web工程item.jsp(crtl+h全文搜索):
请求的url:/cart/add/{itemId}
参数:
1.)商品id: Long itemId
2.)商品数量: int num
业务逻辑:
- 从cookie中查询商品列表。
- 判断商品在商品列表中是否存在。
- 如果存在,商品数量相加。
- 不存在,根据商品id查询商品信息。
- 把商品添加到购车列表。
- 把购车商品列表写入cookie。
返回值:逻辑视图
Cookie保存购物车
1)key:TT_CART
2)Value:购物车列表转换成json数据。需要对数据进行编码。
3)Cookie的有效期:保存7天。
商品列表:
List<TbItem>,每个商品数据使用TbItem保存。当根据商品id查询商品信息后,取第一张图片保存到image属性中即可。
读写cookie可以使用CookieUtils工具类实现。
2.3.2 Controller
@Controller <p style="margin-left:0cm;"><strong><span style="color:#7f0055;">public</span></strong> <strong><span style="color:#7f0055;">class</span></strong><span style="color:#000000;"> CartController {</span></p>
<p style="margin-left:0cm;"> </p>
<p style="margin-left:0cm;"> <span style="color:#646464;">@Value</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">"${TT_CART}"</span><span style="color:#000000;">)</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">private</span></strong><span style="color:#000000;"> String </span><span style="color:#0000c0;">TT_CART</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"> <span style="color:#646464;">@Value</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">"${CART_EXPIRE}"</span><span style="color:#000000;">)</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">private</span></strong><span style="color:#000000;"> Integer </span><span style="color:#0000c0;">CART_EXPIRE</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"> </p>
<p style="margin-left:0cm;"> <span style="color:#646464;">@Autowired</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">private</span></strong><span style="color:#000000;"> ItemService </span><span style="color:#0000c0;">itemService</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"> </p>
<p style="margin-left:0cm;"> <span style="color:#646464;">@RequestMapping</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">"/cart/add/{itemId}"</span><span style="color:#000000;">)</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">public</span></strong><span style="color:#000000;"> String addCartItem(</span><span style="color:#646464;">@PathVariable</span><span style="color:#000000;"> Long </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">, Integer </span><span style="color:#6a3e3e;">num</span><span style="color:#000000;">,</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, HttpServletResponse </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、从cookie中查询商品列表。</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> List<TbItem> </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;"> = getCartList(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、判断商品在商品列表中是否存在。</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">boolean</span></strong> <span style="color:#6a3e3e;">hasItem</span><span style="color:#000000;"> = </span><strong><span style="color:#7f0055;">false</span></strong><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">for</span></strong><span style="color:#000000;"> (TbItem </span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;"> : </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">对象比较的是地址,应该是值的比较</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.getId() == </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">.longValue()) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、如果存在,商品数量相加。</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.setNum(</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.getNum() + </span><span style="color:#6a3e3e;">num</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">hasItem</span><span style="color:#000000;"> = </span><strong><span style="color:#7f0055;">true</span></strong><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">break</span></strong><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (!</span><span style="color:#6a3e3e;">hasItem</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、不存在,根据商品id查询商品信息。</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> TbItem </span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;"> = </span><span style="color:#0000c0;">itemService</span><span style="color:#000000;">.getItemById(</span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取一张图片</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> String </span><span style="color:#6a3e3e;">image</span><span style="color:#000000;"> = </span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.getImage();</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (StringUtils.<em>isNoneBlank</em>(</span><span style="color:#6a3e3e;">image</span><span style="color:#000000;">)) {</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> String[] </span><span style="color:#6a3e3e;">images</span><span style="color:#000000;"> = </span><span style="color:#6a3e3e;">image</span><span style="color:#000000;">.split(</span><span style="color:#2a00ff;">","</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.setImage(</span><span style="color:#6a3e3e;">images</span><span style="color:#000000;">[0]);</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">设置购买商品数量</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.setNum(</span><span style="color:#6a3e3e;">num</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品添加到购车列表。</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">.add(</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 6</span><span style="color:#3f7f5f;">、把购车商品列表写入cookie。</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> CookieUtils.<em>setCookie</em>(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">, </span><span style="color:#0000c0;">TT_CART</span><span style="color:#000000;">, JsonUtils.<em>objectToJson</em>(</span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">), </span><span style="color:#0000c0;">CART_EXPIRE</span><span style="color:#000000;">, </span><strong><span style="color:#7f0055;">true</span></strong><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <span style="color:#2a00ff;">"cartSuccess"</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> </p>
<p style="margin-left:0cm;"> <span style="color:#3f5fbf;">/**</span></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> * </span><span style="color:#3f5fbf;">从cookie中取购物车列表</span></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> * </span><span style="color:#7f7f9f;"><p></span><span style="color:#3f5fbf;">Title: getCartList</span><span style="color:#7f7f9f;"></p></span></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> * </span><span style="color:#7f7f9f;"><p></span><span style="color:#3f5fbf;">Description: </span><span style="color:#7f7f9f;"></p></span></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> * </span><strong><span style="color:#7f9fbf;">@param</span></strong><span style="color:#3f5fbf;"> request</span></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> * </span><strong><span style="color:#7f9fbf;">@return</span></strong></p>
<p style="margin-left:0cm;"><span style="color:#3f5fbf;"> */</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">private</span></strong><span style="color:#000000;"> List<TbItem> getCartList(HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取购物车列表</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> String </span><span style="color:#6a3e3e;">json</span><span style="color:#000000;"> = CookieUtils.<em>getCookieValue</em>(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, </span><span style="color:#0000c0;">TT_CART</span><span style="color:#000000;">, </span><strong><span style="color:#7f0055;">true</span></strong><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">判断<u>json</u>是否为null</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (StringUtils.<em>isNotBlank</em>(</span><span style="color:#6a3e3e;">json</span><span style="color:#000000;">)) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">把<u>json</u>转换成商品列表返回</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> List<TbItem> </span><span style="color:#6a3e3e;">list</span><span style="color:#000000;"> = JsonUtils.<em>jsonToList</em>(</span><span style="color:#6a3e3e;">json</span><span style="color:#000000;">, TbItem.</span><strong><span style="color:#7f0055;">class</span></strong><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <span style="color:#6a3e3e;">list</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <strong><span style="color:#7f0055;">new</span></strong><span style="color:#000000;"> ArrayList<>();</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> </p>
<p style="margin-left:0cm;"><span style="color:#000000;">}</span></p>
</td>
</tr></tbody></table></div><p>添加依赖:</p>
|
引用服务:
resource.properties:
加入购物车页面:
安装e3-cart工程
2.4 展示购物车商品列表
参数:无
返回值:逻辑视图
业务逻辑:
- 从cookie中取商品列表。
- 把商品列表传递给页面。
2.4.1 Controller
@RequestMapping("/cart/cart") <p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">public</span></strong><span style="color:#000000;"> String showCartList(HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, Model </span><span style="color:#6a3e3e;">model</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取购物车商品列表</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> List<TbItem> </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;"> = getCartList(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">传递给页面</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">model</span><span style="color:#000000;">.addAttribute(</span><span style="color:#2a00ff;">"cartList"</span><span style="color:#000000;">, </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <span style="color:#2a00ff;">"cart"</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
</td>
</tr></tbody></table></div><h2><a name="t10"></a>2.5 修改购物车商品数量</h2>
|
2.5.1 功能分析
- 在页面中可以修改商品数量
- 重新计算小计和总计。
- 修改需要写入cookie。
- 每次修改都需要向服务端发送一个ajax请求,在服务端修改cookie中的商品数量。
请求成功执行重新计算总价:
请求的url:/cart/update/num/{itemId}/{num}
参数:long itemId、int num
业务逻辑:
- 接收两个参数
- 从cookie中取商品列表
- 遍历商品列表找到对应商品
- 更新商品数量
- 把商品列表写入cookie。
- 响应e3Result。Json数据。
返回值:
e3Result。Json数据
2.5.2 Controller
@RequestMapping("/cart/update/num/{itemId}/{num}") <p style="margin-left:0cm;"> <span style="color:#646464;">@ResponseBody</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">public</span></strong> <span style="color:#000000;">e3</span><span style="color:#000000;">Result</span><span style="color:#000000;"> updateNum(</span><span style="color:#646464;">@PathVariable</span><span style="color:#000000;"> Long </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">, </span><span style="color:#646464;">@PathVariable</span><span style="color:#000000;"> Integer </span><span style="color:#6a3e3e;">num</span><span style="color:#000000;">,</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, HttpServletResponse </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、接收两个参数</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、从cookie中取商品列表</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> List<TbItem> </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;"> = getCartList(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、遍历商品列表找到对应商品</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">for</span></strong><span style="color:#000000;"> (TbItem </span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;"> : </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.getId() == </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">.longValue()) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、更新商品数量</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.setNum(</span><span style="color:#6a3e3e;">num</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品列表写入cookie。</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> CookieUtils.<em>setCookie</em>(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">, </span><span style="color:#0000c0;">"cart"</span><span style="color:#000000;">, JsonUtils.<em>objectToJson</em>(</span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">), </span><span style="color:#0000c0;">CART_EXPIRE</span><span style="color:#000000;">, </span><strong><span style="color:#7f0055;">true</span></strong><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 6</span><span style="color:#3f7f5f;">、响应</span><span style="color:#3f7f5f;">e3</span><span style="color:#3f7f5f;">Result</span><span style="color:#3f7f5f;">。<u>Json</u>数据。</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <span style="color:#000000;">e3</span><span style="color:#000000;">Result.<em>ok</em>();</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
</td>
</tr></tbody></table></div><h3><a name="t13"></a>2.5.3 解决请求*.html后缀无法返回json数据的问题</h3>
|
在springmvc中请求*.html不可以返回json数据。
修改web.xml,添加url拦截格式。
2.6 删除购物车商品
2.6.1 功能分析
请求的url:/cart/delete/{itemId}
参数:商品id
返回值:展示购物车列表页面。Url需要做redirect跳转。
业务逻辑:
- 从url中取商品id
- 从cookie中取购物车商品列表
- 遍历列表找到对应的商品
- 删除商品。
- 把商品列表写入cookie。
- 返回逻辑视图:在逻辑视图中做redirect跳转。
2.6.2 Controller
@RequestMapping("/cart/delete/{itemId}") <p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">public</span></strong><span style="color:#000000;"> String deleteCartItem(</span><span style="color:#646464;">@PathVariable</span><span style="color:#000000;"> Long </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">, HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">,</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> HttpServletResponse </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、从<u>url</u>中取商品id</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、从cookie中取购物车商品列表</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> List<TbItem> </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;"> = getCartList(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、遍历列表找到对应的商品</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">for</span></strong><span style="color:#000000;"> (TbItem </span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;"> : </span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">) {</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">if</span></strong><span style="color:#000000;"> (</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">.getId() == </span><span style="color:#6a3e3e;">itemId</span><span style="color:#000000;">.longValue()) {</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、删除商品。</span></p>
<p style="margin-left:0cm;"> <span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">.remove(</span><span style="color:#6a3e3e;">tbItem</span><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">break</span></strong><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品列表写入cookie。</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> CookieUtils.<em>setCookie</em>(</span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">, </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">, </span><span style="color:#0000c0;">"cart"</span><span style="color:#000000;">, JsonUtils.<em>objectToJson</em>(</span><span style="color:#6a3e3e;">cartList</span><span style="color:#000000;">), </span><span style="color:#0000c0;">CART_EXPIRE</span><span style="color:#000000;">, </span><strong><span style="color:#7f0055;">true</span></strong><span style="color:#000000;">);</span></p>
<p style="margin-left:0cm;"> <span style="color:#3f7f5f;">// 6</span><span style="color:#3f7f5f;">、返回逻辑视图:在逻辑视图中做redirect跳转。</span></p>
<p style="margin-left:0cm;"> <strong><span style="color:#7f0055;">return</span></strong> <span style="color:#2a00ff;">"redirect:/cart/cart.html"</span><span style="color:#000000;">;</span></p>
<p style="margin-left:0cm;"><span style="color:#000000;"> }</span></p>
</td>
</tr></tbody></table></div><h2><a name="t17"></a>2.7 小结</h2>
|
使用cookie实现购物车:
优点:
- 实现简单
- 不需要占用服务端存储空间。
缺点:
- 存储容量有限
- 更换设备购车信息不能同步。
实现购车商品数据同步:
1.要求用户登录。
2.把购物车商品列表保存到数据库中。推荐使用redis。
3.Key:用户id,value:购车商品列表。推荐使用hash,hash的field:商品id,value:商品信息。
4.在用户未登录情况下写cookie。当用户登录后,访问购物车列表时,
a) 把cookie中的数据同步到redis。
b) 把cookie中的数据删除
d) 展示购物车列表时以redis为准。
c) 如果redis中有数据cookie中也有数据,需要做数据合并。相同商品数量相加,不同商品添加一个新商品。
5.如果用户登录状态,展示购物车列表以redis为准。如果未登录,以cookie为准。
e3-cart-web工程添加依赖:
引用单点登录服务:
拦截器:
添加购物车(登录状态写入redis,未登录状态写入cookie,使用拦截器获取token进行是否登录验证):
resouce.properties:
e3-common工程:
e3-cart-interface工程:
e3-cart-service工程:
发布服务:
e3-cart-web工程:
1.添加依赖:
2.引用服务:
配置拦截器:
安装e3-cart-interface工程
配置断点查看:
1.RUN >> DEBUG Configuractions
1.复制e3-portal-web工程shortcut.jsp页面到e3-cart-web覆盖(验证效果)
2.复制e3-portal-web工程e3mall.js到e3-cart-web覆盖(验证效果)
3.修改主页进入我的购物车连接
展示购物车列表(登录状态需合并Cookie中商品并同步redis)逻辑:
添加合并购物车方法:
添加获取redis中购物车方法:
Cookie购物车数量加上缓存数量则成功实现:
修改购物车列表(登录状态需合并Cookie中商品并同步redis)逻辑:
删除购物车列表(登录状态需合并Cookie中商品并同步redis)逻辑:
安装e3-cart-interface工程