购物车

1.课程计划

https://blog.csdn.net/etna_hh/article/details/83154260

第十二天:

  1. 购物车实现
  2. 订单确认页面展示

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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">modelVersion</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">4.0.0</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">modelVersion</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">parent</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">cn.e3mall</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-parent</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">0.0.1-SNAPSHOT</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">parent</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span style="color:#008080;">&lt;</span></u><u><span style="color:#3f7f7f;">groupId</span></u><u><span style="color:#008080;">&gt;</span></u><u><span style="color:#000000;">cn.e3mall</span></u><u><span style="color:#008080;">&lt;/</span></u><u><span style="color:#3f7f7f;">groupId</span></u><u><span style="color:#008080;">&gt;</span></u></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-cart-web</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span style="color:#008080;">&lt;</span></u><u><span style="color:#3f7f7f;">version</span></u><u><span style="color:#008080;">&gt;</span></u><u><span style="color:#000000;">0.0.1-SNAPSHOT</span></u><u><span style="color:#008080;">&lt;/</span></u><u><span style="color:#3f7f7f;">version</span></u><u><span style="color:#008080;">&gt;</span></u></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">packaging</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">war</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">packaging</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependencies</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">cn.e3mall</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">e3</span></u><span style="color:#000000;">-manager-interface</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">0.0.1-SNAPSHOT</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">version</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">&lt;!-- Spring --&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-context</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-beans</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-<u>webmvc</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-<u>jdbc</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-aspects</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-<u>jms</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring-context-support</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">&lt;!-- JSP</span><span style="color:#3f5fbf;">相关 --&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">jstl</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">jstl</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">javax.servlet</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">servlet</span></u><span style="color:#000000;">-<u>api</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">provided</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">javax.servlet</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">jsp</span></u><span style="color:#000000;">-<u>api</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">provided</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">scope</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">&lt;!-- <u>dubbo</u></span><span style="color:#3f5fbf;">相关 --&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">com.alibaba</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">dubbo</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">&lt;!-- </span><span style="color:#3f5fbf;">排除依赖 --&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">exclusions</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.springframework</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">spring</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.jboss.netty</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">netty</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">exclusion</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">exclusions</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.apache.zookeeper</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">zookeeper</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">com.github.sgroschupf</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">zkclient</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">junit</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><u><span style="color:#000000;">junit</span></u><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependency</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">dependencies</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">&lt;!-- </span><span style="color:#3f5fbf;">配置<u>tomcat</u>插件 --&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">build</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">plugins</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">plugin</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">org.apache.tomcat.maven</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">groupId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">tomcat7-<u>maven</u>-<u>plugin</u></span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">artifactId</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">configuration</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">port</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">8089</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">port</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;</span><span style="color:#3f7f7f;">path</span><span style="color:#008080;">&gt;</span><span style="color:#000000;">/</span><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">path</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">configuration</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">plugin</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">plugins</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">build</span><span style="color:#008080;">&gt;</span></p>

		<p style="margin-left:0cm;"><span style="color:#008080;">&lt;/</span><span style="color:#3f7f7f;">project</span><span style="color:#008080;">&gt;</span></p>
		</td>
	</tr></tbody></table></div><h2><a name="t5"></a>2.3&nbsp;添加购物车</h2>

2.3.1 功能分析

在不登陆的情况下也可以添加购物车。把购物车信息写入cookie。

优点:

  1. 不占用服务端存储空间
  2. 用户体验好。
  3. 代码实现简单。

缺点:

  1. cookie中保存的容量有限。最大4k
  2. 把购物车信息保存在cookie中,更换设备购物车信息不能同步。

 

改造商品详情页面e3-item-web工程item.jsp(crtl+h全文搜索):

请求的url:/cart/add/{itemId}

参数:

    1.)商品id: Long itemId

    2.)商品数量: int num

业务逻辑:

  1. 从cookie中查询商品列表。
  2. 判断商品在商品列表中是否存在。
  3. 如果存在,商品数量相加。
  4. 不存在,根据商品id查询商品信息。
  5. 把商品添加到购车列表。
  6. 把购车商品列表写入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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;</p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#646464;">@Autowired</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、从cookie中查询商品列表。</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;TbItem&gt; </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、判断商品在商品列表中是否存在。</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">对象比较的是地址,应该是值的比较</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、如果存在,商品数量相加。</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#7f0055;">break</span></strong><span style="color:#000000;">;</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、不存在,根据商品id查询商品信息。</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取一张图片</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">设置购买商品数量</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品添加到购车列表。</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 6</span><span style="color:#3f7f5f;">、把购车商品列表写入cookie。</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f5fbf;">/**</span></p>

		<p style="margin-left:0cm;"><span style="color:#3f5fbf;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </span><span style="color:#3f5fbf;">从cookie中取购物车列表</span></p>

		<p style="margin-left:0cm;"><span style="color:#3f5fbf;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </span><span style="color:#7f7f9f;">&lt;p&gt;</span><span style="color:#3f5fbf;">Title: getCartList</span><span style="color:#7f7f9f;">&lt;/p&gt;</span></p>

		<p style="margin-left:0cm;"><span style="color:#3f5fbf;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </span><span style="color:#7f7f9f;">&lt;p&gt;</span><span style="color:#3f5fbf;">Description: </span><span style="color:#7f7f9f;">&lt;/p&gt;</span></p>

		<p style="margin-left:0cm;"><span style="color:#3f5fbf;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;* </span><strong><span style="color:#7f9fbf;">@return</span></strong></p>

		<p style="margin-left:0cm;"><span style="color:#3f5fbf;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;*/</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#7f0055;">private</span></strong><span style="color:#000000;"> List&lt;TbItem&gt; getCartList(HttpServletRequest </span><span style="color:#6a3e3e;">request</span><span style="color:#000000;">) {</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取购物车列表</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">判断<u>json</u>是否为null</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">把<u>json</u>转换成商品列表返回</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;TbItem&gt; </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#7f0055;">return</span></strong> <strong><span style="color:#7f0055;">new</span></strong><span style="color:#000000;"> ArrayList&lt;&gt;();</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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 展示购物车商品列表

参数:无

返回值:逻辑视图

业务逻辑:

  1. 从cookie中取商品列表。
  2. 把商品列表传递给页面。

2.4.1 Controller

@RequestMapping("/cart/cart")

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">取购物车商品列表</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;TbItem&gt; </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">//</span><span style="color:#3f7f5f;">传递给页面</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
		</td>
	</tr></tbody></table></div><h2><a name="t10"></a>2.5&nbsp;修改购物车商品数量</h2>

2.5.1 功能分析

  1. 在页面中可以修改商品数量
  2. 重新计算小计和总计。
  3. 修改需要写入cookie。
  4. 每次修改都需要向服务端发送一个ajax请求,在服务端修改cookie中的商品数量。

请求成功执行重新计算总价:

请求的url:/cart/update/num/{itemId}/{num}

参数:long itemId、int num

业务逻辑:

  1. 接收两个参数
  2. 从cookie中取商品列表
  3. 遍历商品列表找到对应商品
  4. 更新商品数量
  5. 把商品列表写入cookie。
  6. 响应e3Result。Json数据。

返回值:

 e3Result。Json数据

2.5.2 Controller

@RequestMapping("/cart/update/num/{itemId}/{num}")

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#646464;">@ResponseBody</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、接收两个参数</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、从cookie中取商品列表</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;TbItem&gt; </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、遍历商品列表找到对应商品</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、更新商品数量</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品列表写入cookie。</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
		</td>
	</tr></tbody></table></div><h3><a name="t13"></a>2.5.3&nbsp;解决请求*.html后缀无法返回json数据的问题</h3>

在springmvc中请求*.html不可以返回json数据。

修改web.xml,添加url拦截格式。

2.6 删除购物车商品

2.6.1 功能分析

请求的url:/cart/delete/{itemId}

参数:商品id

返回值:展示购物车列表页面。Url需要做redirect跳转。

业务逻辑:

  1. 从url中取商品id
  2. 从cookie中取购物车商品列表
  3. 遍历列表找到对应的商品
  4. 删除商品。
  5. 把商品列表写入cookie。
  6. 返回逻辑视图:在逻辑视图中做redirect跳转。

2.6.2 Controller

@RequestMapping("/cart/delete/{itemId}")

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse </span><span style="color:#6a3e3e;">response</span><span style="color:#000000;">) {</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 1</span><span style="color:#3f7f5f;">、从<u>url</u>中取商品id</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 2</span><span style="color:#3f7f5f;">、从cookie中取购物车商品列表</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;TbItem&gt; </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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 3</span><span style="color:#3f7f5f;">、遍历列表找到对应的商品</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 4</span><span style="color:#3f7f5f;">、删除商品。</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#7f0055;">break</span></strong><span style="color:#000000;">;</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 5</span><span style="color:#3f7f5f;">、把商品列表写入cookie。</span></p>

		<p style="margin-left:0cm;"><span style="color:#000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3f7f5f;">// 6</span><span style="color:#3f7f5f;">、返回逻辑视图:在逻辑视图中做redirect跳转。</span></p>

		<p style="margin-left:0cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
		</td>
	</tr></tbody></table></div><h2><a name="t17"></a>2.7&nbsp;小结</h2>

使用cookie实现购物车:

优点:

  1. 实现简单
  2. 不需要占用服务端存储空间。

缺点:

  1. 存储容量有限
  2. 更换设备购车信息不能同步。

 

实现购车商品数据同步:

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工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值