SSM
乐淘商城
项目介绍
淘淘网上商城是一个综合性的B2C平台,类似京东商城、天猫商城。会员可以在商城浏览商品、下订单,以及参加各种活动。管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。客服可以在后台管理系统中处理用户的询问以及投诉。
功能模块
1.后台管理系统:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
2.前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
3.会员系统:用户可以在该系统中查询已下的订单、收藏的商品、我的优惠券、团购等信息。
4.订单系统:提供下单、查询订单、修改订单状态、定时处理订单。
5.购物车模块:显示被选择的商品数量,单价,总价等信息,修改选中商品的数量,可跳转到下单界面。
6.搜索系统:提供商品的搜索功能。
主要技术
Spring、SpringMVC、Mybatis
JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV
Redis(缓存服务器)
Solr(搜索)
RSA(加密)
httpclient(调用系统服务)
Mysql
Nginx(web服务器)
Jmeter
项目话述
面试官您好,我这个项目是乐淘商城,我先介绍一下该项目的研发思路及大体的功能。淘淘网上商城是一个综合性的B2C平台,类似京东商城、天猫商城。会员可以在商城浏览商品、下订单,以及参加各种活动。管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。客服可以在后台管理系统中处理用户的询问以及投诉。
功能模块有后台管理系统,前台系统,会员系统,订单系统,购物车模块,搜索系统。
我再来介绍一下该项目的主要业务流程。
第一个是前台系统,如果想购买商品并且获得某些优惠,必须要先进行登录,如果没有账号那就要先注册,我们是使用手机号进行注册。登录之前用户可以浏览商品,将选中的商品暂存于本地,登录后用户可以对商品下单,已进入购物车的商品存入redis。设置管理员权限和超级管理员,我们通过5张表用户表、角色、权限表、以及用户角色表和角色权限表两张码表,这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。
第二个是后台管理系统,管理员可以管理品牌,上架或下架商品,改变订单状态,添加或删除商品类型,录入商品规格,商品信息内容发布,管理员可以对普通用户进行管理,超级管理员可以修改所有账号的权限,客服可以在后台管理系统中处理用户的询问以及投诉。
第三个是会员系统,普通用户可以进行充值成为商城会员,用户可以在该系统中查询已下订单的状态、收藏的商品、我的优惠券、团购,购买记录等。会员用户每个月可以获得一些优惠券,购买的商品达到优惠券的使用条件就可以使用优惠券抵消一部分价格。
第四个是订单系统,用户可以在把选好的商品投入购物车后对商品下单,下单完成后可以查询订单状态,在一定时限内可以修改订单要求(如送达地点,送达时间等),系统会自动处理订单(如只保留前一千个订单)。
第五个是购物车模块,购买商品后会把商品暂存入购物车中,如果用户已登录,存入redis中,如果未登录则存入本地。用户使用购物车一起结算下单,显示总价格。打开购物车时在购物车中自动显示商品优惠信息,并且生成最优选择推荐给用户,随时提示购物车商品价格变化,增加其他商品,查询购物车,修改已选择的商品的数量,从购物车中删除商品。
第六个是搜索系统,无论是否登录,用户都可以进行商品的搜索,自由选择筛选条件,如品牌,类型等信息。
完整开发步骤
导包
spring的jar包
mybatis的jar包
mybatis-Spring的jar包
aop的依赖jar包
oracle等数据库连接的jar包
DataSource的jar包
日志包
导入配置文件
web.xml
mvc.xml
applicationContext.xml
applicationContext.properties
初始化配置
web.xml
spring核心控制器
指定mvc配置文件的路径
指定编码的filter
`<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springMVC配置文件的路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<!-- 设置tomcat启动前去创建servlet对象 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 指定springMVC的所有控制器的访问路径都以*.do结尾 -->
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>`
spring工厂初始化的监听器
spring配置文件初始化
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--3. 手动指定配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>
</context-param>
mvc.xml
注解管理controlller
注解开发mvc
`<context:component-scan base-package="com.baizhi"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>`
applicationContext.xml
引入外部的配置文件
` <context:property-placeholder location="classpath:/application.properties"></context:property-placeholder>`
开启注解管理除了Controller
`<context:component-scan base-package="com.baizhi"></context:component-scan>`
连接池
`<bean id="dataSour" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
<property name="username" value="${database.username}"></property>
<property name="password" value="${database.password}"></property>
<property name="initialSize" value="${database.initialSize}"></property>
<property name="maxActive" value="${database.maxActive}"></property>
<property name="maxWait" value="${database.maxWait}"></property>
</bean>
`
事务相关
`<!-- 配置增强类所需要用到的事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSour"></property>
</bean>`
`<!-- 配置能自动生成事务先关的增强类的类 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="SUPPORTS" rollback-for="java.lang.RuntimeException"/>
<tx:method name="to*" read-only="false" propagation="REQUIRED" rollback-for="java.lang.RuntimeException"/>
<tx:method name="*" read-only="false" propagation="REQUIRED" rollback-for="java.lang.RuntimeException"/>
</tx:attributes>
</tx:advice>`
`<!-- aop动态代理选择切入点和组装 -->
<aop:config>
<aop:pointcut expression="execution(* com.baizhi.service.impl.*.*(..))" id="usercut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="usercut"/>
</aop:config>`
Mybatis相关
`<bean id='sqlSessionFactory' class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSour"></property>
<property name="mapperLocations" value="classpath:/com/baizhi/dao/impl/*.xml"></property>
<property name="typeAliasesPackage" value="com.baizhi.entity"></property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<property name="basePackage" value="com.baizhi.dao"></property>
</bean>`