基于SSM的网上商城

该项目分为前台展示页面和后台管理两个模块

具体代码已经上传至GitHub
代码链接
一:前台展示页面:

对于该前台展示页面分为上中下三部分,上面的导航栏和中间的主体部分以及下面的未显示的一个底部信息
二,后台管理界面
1.登陆界面:

2.登陆后的展示的界面

下面具体模块具体分析

下面是项目的模块划分大致简介:

**
一:

  1. com.xieyunjie.programmer为主
  2. controller为控制器包
  3. dao为实现类的接口所在
  4. entity存放的是实体类
  5. interceptor存放的是前台和后台所需要的拦截器
  6. page所存放的是分页所需要内容
  7. service存放的是权限的接口,其下还有其对应的实现方法
  8. util所存放的是前后台所需要的工具

二:

  1. config下的所存放的是:mybatis,spring,springmvc的一些配置文件,以及数据库所对应的一些映射文件
  2. 还有里面存放了一些数据库的连接文件和日志记录文件。

三:

  1. 在WebContent文件夹下所存放的是前端页面所对应的jsp文件和一些jar包,还有所引入的一些资源文件
    例如:easy-ui的框架,一些前端界面的模板

**

详细介绍各个文件的内容

一个模块里面大致分为下面几个部分:
大致为一个实体类即entity类,一个控制器,一个dao层的接口,一个Service接口,一个SerrviceImpl的实现类,一个数据库对应的mapper映射文件,以及一个或多个前端页面所对应的jsp文件。

先说后台管理界面的:
控制器

dao层接口

entity实体类

拦截器

分页

service接口
serviceImpl实现类

util工具类

mapper映射文件,mybatis,spring,springmvc的配置文件,以及数据库连接文件和日志文件

前端界面

代码的解释

一、web.xml文件:
1. 首先在web.xml文件里面配置中文乱码过滤器

   <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>

2. sprinf配置文件信息

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring/applicationContext.xml</param-value></context-param>

3. 日志配置

<context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:config/log4j.properties</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

4. 配置前端控制器

<servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/springmvc/springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><error-page><error-code>404</error-code><location>/WEB-INF/errors/404.jsp</location></error-page><error-page><error-code>500</error-code><location>/WEB-INF/errors/500.jsp</location></error-page><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>

5. 监听器

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

二、entity实体类的解释

admin文件夹
1. User

/*** 用户实体类* @author 17877**/@Component
public class User {private Long id;//用户id,设置自增private String username;//用户名,登录名private String password;//登录密码private Long roleId;//所属角色idprivate String photo;//头像照片地址private int sex;//性别0,代表未知,1代表男,2代表女private Integer age;//年龄private String address;//家庭住址

2. Log

/*** 系统日志* @author 17877**/
@Component
public class Log {private Long id;private String content;//日志内容private Date createTime;//创建时间

3. Menu

/*** 菜单实体类* @author 17877**/
@Component
public class Menu {private Long id;private Long parentId;//父类idprivate Long _parentId;//父类id,用来匹配easyui的父类idprivate String name;//菜单名称private String url;//点击后的urlprivate String icon;//菜单icon图表

4. Role

/*** 角色role实体* @author 17877**/
@Component
public class Role {private Long id;private String name;private String remark;//角色备注

5. Authority

/*** 权限实体* @author llq**/
@Component
public class Authority {private Long id;private Long roleId;//角色idprivate Long menuId;//菜单id

common

1. Account

/*** 客户实体* @author17877**/
@Component
public class Account {private Long id;//客户idprivate String name;//客户名称private String password;//密码private String email;//邮箱private String trueName ;//真实姓名private int sex;//性别:0:未知,1:男,2:女private int status;//状态:0:表示冻结、1:表示可用private Date createTime;//注册时间

2. Comment

/*** 评论实体* @author 17877**/
@Component
public class Comment {private Long id;//评论idprivate Long productId;//所属商品idprivate Product product;private Long userId;//所属用户idprivate Account account;private int type;//评价类型,0:差评,1:好评,2:中评private String content;//评论内容private Date createTime;//评论时间

3. Order

/*** 订单实体* @author17877**/
@Component
public class Order {public static int ORDER_STATUS_WAITING = 0;//待发货public static int ORDER_STATUS_SENT = 1;//已发货public static int ORDER_STATUS_FINISH = 2;//已完成private Long id;//订单分类idprivate String sn;//订单编号private Long userId;//所属用户idprivate String address;//收货地址private Double money;//订单总价private int productNum;//订单商品数private int status;//订单状态private String remark;//订单备注private Date createTime;//添加时间private List<OrderItem> orderItems = new ArrayList<OrderItem>();

4. OrderItem

/*** 订单子项实体* @author17877**/
@Component
public class OrderItem {private Long id;//商品分类idprivate Long orderId;//所属订单idprivate Long productId;//所属商品idprivate String name;//商品名称private String imageUrl;//商品主图private Double price;//商品价格private int num;//商品数量private Double money;//商品金额

5. Product

/*** 商品实体* @author17877**/
@Component
public class Product {private Long id;//商品分类idprivate Long productCategoryId;//分类idprivate String name;//商品名称private String tags;//分类标签,用来按照商品分类搜索private String imageUrl;//商品主图private Double price;//商品价格private int stock;//商品库存private int sellNum;//销量private int viewNum;//浏览量private int commentNum;//评论数private String content;//商品详情描述private Date createTime;//添加时间

6. ProductCategory

/*** 商品分类实体* @author 17877**/
@Component
public class ProductCategory {private Long id;//商品分类idprivate Long parentId;//分类父idprivate Long _parentId;//父类id,用来匹配easyui的父类idprivate String name;//商品分类名称private String tags;//分类标签,用来标记识别分类的层级关系private String remark;//商品分类备注

三、dao层的解释

admin

1.AuthorityDao

/*** user用户的 dao* @author 17877**/
@Repository
public interface UserDao {public User findByUsername(String username);public int add(User user);public int edit(User user);public int editPassword(User user);public int delete(String ids);public List<User> findList(Map<String, Object> queryMap);public int getTotal(Map<String, Object> queryMap);
}

2.LogDao

/*** 系统日志类Dao* @author 17877**/
@Repository
public interface LogDao {public int add(Log log);public List<Log> findList(Map<String,Object> queryMap);public int getTotal(Map<String,Object> queryMap);public int delete(String ids);
}

3.MenuDao

/*** 菜单管理dao* @author llq**/
@Repository
public interface MenuDao {public int add(Menu menu);public List<Menu> findList(Map<String, Object> queryMap);public List<Menu> findTopList();public int getTotal(Map<String, Object> queryMap);public int edit(Menu menu);public int delete(Long id);public List<Menu> findChildernList(Long parentId);public List<Menu> findListByIds(String ids);
}

4.RoleDao

/*** 角色role dao* @author llq**/
@Repository
public interface RoleDao {public int add(Role role);public int edit(Role role);public int delete(Long id);public List<Role> findList(Map<String, Object> queryMap);public int getTotal(Map<String, Object> queryMap);public Role find(Long id);
}

5.UserDao

/*** user用户的 dao* @author 17877**/
@Repository
public interface UserDao {public User findByUsername(String username);public int add(User user);public int edit(User user);public int editPassword(User user);public int delete(String ids);public List<User> findList(Map<String, Object> queryMap);public int getTotal(Map<String, Object> queryMap);
}

common

1.Account

/*** 客户dao层* @author 17877**/
@Repository
public interface AccountDao {/*** 添加客户* @param account* @return*/public int add(Account account);/*** 编辑客户* @param account* @return*/public int edit(Account account);/*** 删除客户* @param id* @return*/public int delete(Long id);/*** 多条件搜索词查询客户* @param queMap* @return*/public List<Account> findList(Map<String, Object> queryMap);/*** 获取符合条件的总记录数* @param queryMap* @return*/public Integer getTotal(Map<String, Object> queryMap);/*** 根据id查询客户* @param id* @return*/public Account findById(Long id);/*** 根据用户名查找客户* @param name* @return*/public Account findByName(String name);
}

2.CommentDao

/*** 商品dao层* @author 17877**/
@Repository
public interface CommentDao {/*** 添加评论* @param comment* @return*/public int add(Comment comment);/*** 编辑评论* @param comment* @return*/public int edit(Comment comment);/*** 删除评论* @param id* @return*/public int delete(Long id);/*** 多条件搜索词查询评论* @param queMap* @return*/public List<Comment> findList(Map<String, Object> queryMap);/*** 获取符合条件的总记录数* @param queryMap* @return*/public Integer getTotal(Map<String, Object> queryMap);/*** 根据id查询评论* @param id* @return*/public Comment findById(Long id);
}

3.OrderDao

/*** 订单dao层* @author 17877**/
@Repository
public interface OrderDao {/*** 添加订单* @param order* @return*/public int add(Order order);/*** 添加订单子项* @param orderItem* @return*/public int addItem(OrderItem orderItem);/*** 编辑订单* @param order* @return*/public int edit(Order order);/*** 删除订单* @param id* @return*/public int delete(Long id);/*** 多条件搜索词查询订单* @param queMap* @return*/public List<Order> findList(Map<String, Object> queryMap);/*** 获取符合条件的总记录数* @param queryMap* @return*/public Integer getTotal(Map<String, Object> queryMap);/*** 根据id查询订单* @param id* @return*/public Order findById(Long id);/*** 根据订单号查询所属的订单子项* @param orderId* @return*/public List<OrderItem> findOrderItemList(Long orderId);/*** 获取统计信息* @param queryMap* @return*/public List<Map<String,String>> getStats(Map<String, Object> queryMap);
}

4.ProductCategoryDao

/*** 商品分类dao层* @author 17877**/
@Repository
public interface ProductCategoryDao {/*** 添加商品分类* @param productCategory* @return*/public int add(ProductCategory productCategory);/*** 编辑商品分类* @param productCategory* @return*/public int edit(ProductCategory productCategory);/*** 删除商品分类* @param id* @return*/public int delete(Long id);/*** 多条件搜索词查询商品分类* @param queMap* @return*/public List<ProductCategory> findList(Map<String, Object> queMap);/*** 获取符合条件的总记录数* @param queryMap* @return*/public Integer getTotal(Map<String, Object> queryMap);/*** 根据id查询商品分类* @param id* @return*/public ProductCategory findById(Long id);
}

5.ProductDao

* 商品dao层信息* @author 17877**/import java.util.List;
import java.util.Map;import org.springframework.stereotype.Repository;import com.xieyunjie.programmer.entity.common.Product;@Repository
public interface ProductDao {/*** 添加商品* @param productCategory* @return*/public int add(Product product);/*** 编辑商品* @param productCategory* @return*/public int edit(Product product);/*** 删除商品* @param id* @return*/public int delete(Long id);/*** 多条件搜索词查询商品* @param queMap* @return*/public List<Product> findList(Map<String, Object> queryMap);/*** 获取符合条件的总记录数* @param queryMap* @return*/public Integer getTotal(Map<String, Object> queryMap);/*** 根据id查询商品* @param id* @return*/public Product findById(Long id);/*** 更新统计信息* @param product* @return*/public int updateNum(Product product);
}

四、service和serviceImpl的解释

Service
例如:UserService

/*** uesr用户service* @author 17877**/
@Service
public interface UserService {public User findByUsername(String username);public int add(User user);public int edit(User user);public int editPassword(User user);public int delete(String ids);public List<User> findList(Map<String, Object> queryMap);public int getTotal(Map<String, Object> queryMap);
}

其余方法同上,内容同dao层

Serviceimpl

例如:UserServiceImpl

/*** user用户serviceImpl* @author 17877**/
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic User findByUsername(String username) {// TODO Auto-generated method stubreturn userDao.findByUsername(username);}@Overridepublic int add(User user) {// TODO Auto-generated method stubreturn userDao.add(user);}@Overridepublic int edit(User user) {// TODO Auto-generated method stubreturn userDao.edit(user);}@Overridepublic int delete(String ids) {// TODO Auto-generated method stubreturn userDao.delete(ids);}@Overridepublic List<User> findList(Map<String, Object> queryMap) {// TODO Auto-generated method stubreturn userDao.findList(queryMap);}@Overridepublic int getTotal(Map<String, Object> queryMap) {// TODO Auto-generated method stubreturn userDao.getTotal(queryMap);}@Overridepublic int editPassword(User user) {// TODO Auto-generated method stubreturn userDao.editPassword(user);}}

其余方法同上,这里不再赘述

五、interceptor的解释

拦截器
后台登陆拦截器

/*** 后台登录拦截器* @author 17877**/
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {// TODO Auto-generated method stub}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {// TODO Auto-generated method stub}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object arg2) throws Exception {// TODO Auto-generated method stubString requestURI = request.getRequestURI();Object admin = request.getSession().getAttribute("admin");if(admin == null){//表示未登录或者登录失效System.out.println("链接"+requestURI+"进入拦截器!");String header = request.getHeader("X-Requested-With");//判断是否是ajax请求if("XMLHttpRequest".equals(header)){//表示是ajax请求Map<String, String> ret = new HashMap<String, String>();ret.put("type", "error");ret.put("msg", "登录会话超时或还未登录,请重新登录!");response.getWriter().write(JSONObject.fromObject(ret).toString());return false;}//表示是普通链接跳转,直接重定向到登录页面response.sendRedirect(request.getServletContext().getContextPath() + "/system/login");return false;}//获取菜单idString mid = request.getParameter("_mid");if(!StringUtils.isEmpty(mid)){List<Menu> allThirdMenu = MenuUtil.getAllThirdMenu((List<Menu>)request.getSession().getAttribute("userMenus"), Long.valueOf(mid));request.setAttribute("thirdMenuList", allThirdMenu);}return true;}}

六、page的解释

分页的基本信息

/*** 分页基本信息* @author 17877**/
@Component
public class Page {private int page = 1;//当前页码private int rows;//每页显示数量private int offset;//对应数据库中的偏移量

七、util的解释

验证码的生成器

/*** 验证码生成器* * @author llq*/
public class CpachaUtil {/*** 验证码来源*/final private char[] code = {'2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R','S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};/*** 字体*/final private String[] fontNames = new String[]{"黑体", "宋体", "Courier", "Arial", "Verdana", "Times", "Tahoma", "Georgia"};/*** 字体样式*/final private int[] fontStyles = new int[]{Font.BOLD, Font.ITALIC|Font.BOLD};//代码过多这里不再赘述!

菜单操作的公用方法

/*** 关于菜单操作的一些公用方法* @author 17877**/
public class MenuUtil {/*** 从给定的菜单中返回所有顶级菜单* @param menuList* @return*/public static List<Menu> getAllTopMenu(List<Menu> menuList){List<Menu> ret = new ArrayList<Menu>();for(Menu menu:menuList){if(menu.getParentId() == 0){ret.add(menu);}}return ret;}/*** 获取所有的二级菜单* @param menuList* @return*/public static List<Menu> getAllSecondMenu(List<Menu> menuList){List<Menu> ret = new ArrayList<Menu>();List<Menu> allTopMenu = getAllTopMenu(menuList);for(Menu menu:menuList){for(Menu topMenu:allTopMenu){if(menu.getParentId() == topMenu.getId()){ret.add(menu);break;}}}return ret;}//代码过多这里不再赘述!

八、config的解释

mybatis
数据库的映射文件
1.admin
(1).AuthorityMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xieyunjie.programmer.dao.admin.AuthorityDao"><!-- 权限插入操作 --><insert id="add" parameterType="Authority">insert into authority(id,roleId,menuId) values(null,#{roleId},#{menuId})</insert><!-- 权限信息搜索查询 --><select id="findListByRoleId" parameterType="Long" resultType="Authority">select * from authority <if test="_parameter != null">where roleId = #{roleId} </if></select><!-- 删除权限信息 --><delete id="deleteByRoleId" parameterType="Long">delete from authority where roleId = #{roleId}</delete>
</mapper>

(2).LogMapper.xml

<mapper namespace="com.xieyunjie.programmer.dao.admin.LogDao"><!-- 日志插入操作 --><insert id="add" parameterType="com.xieyunjie.programmer.entity.admin.Log">insert into log(id,content,createTime) values(null,#{content},#{createTime})</insert><!-- 日志信息搜索查询 --><select id="findList" parameterType="Map" resultType="com.xieyunjie.programmer.entity.admin.Log">select * from log <if test="content != null">where content like '%${content}%' </if><if test="offset != null and pageSize != null">limit #{offset},#{pageSize}</if></select><!-- 模糊搜索总条数 --><select id="getTotal" parameterType="Map" resultType="Integer">select count(*) from log <if test="content != null">where content like '%${content}%' </if></select><!-- 删除日志信息 --><delete id="delete" parameterType="String">delete from log where id in(${value})</delete>
</mapper>

(3).MenuMapper.xml

<mapper namespace="com.xieyunjie.programmer.dao.admin.MenuDao"><!-- 菜单插入操作 --><insert id="add" parameterType="Menu">insert into menu(id,parentId,name,url,icon) values(null,#{parentId},#{name},#{url},#{icon})</insert><!-- 菜单信息模糊分页搜索查询 --><select id="findList" parameterType="Map" resultType="Menu">select * from menu where 1 = 1 <if test="parentId != null">and parentId = #{parentId}  </if><if test="name != null">and name like '%${name}%' </if><if test="offset != null and pageSize != null">limit #{offset},#{pageSize}</if></select><!-- 菜单信息模糊分页搜索查询总记录数 --><select id="getTotal" parameterType="Map" resultType="Integer">select count(*) from menu where 1 = 1  <if test="parentId != null">and parentId = #{parentId}  </if><if test="name != null">and name like '%${name}%' </if></select><!-- 获取顶级菜单信息 --><select id="findTopList" parameterType="Map" resultType="Menu">select * from menu where parentId = 0</select><!-- 获取某一分类的子菜单信息 --><select id="findChildernList" parameterType="Long" resultType="Menu">select * from menu where parentId = #{parentId}</select><!-- 根据菜单id获取菜单信息 --><select id="findListByIds" parameterType="String" resultType="Menu">select * from menu where id in(${value})</select><!-- 修改菜单信息 --><update id="edit" parameterType="Menu">update menu set name = #{name},parentId = #{parentId},url = #{url},icon = #{icon} where id = #{id}</update><!-- 删除菜单信息 --><delete id="delete" parameterType="Long">delete from menu where id = #{id}</delete>
</mapper>

(4).RoleMapper.xml

<mapper namespace="com.xieyunjie.programmer.dao.admin.RoleDao"><!-- 角色插入操作 --><insert id="add" parameterType="Role">insert into role(id,name,remark) values(null,#{name},#{remark})</insert><!-- 角色信息模糊分页搜索查询 --><select id="findList" parameterType="Map" resultType="role">select * from role <if test="name != null">where name like '%${name}%' </if><if test="offset != null and pageSize != null">limit #{offset},#{pageSize}</if></select><!-- 角色信息模糊分页搜索查询总记录数 --><select id="getTotal" parameterType="Map" resultType="Integer">select count(*) from role  <if test="name != null">where name like '%${name}%' </if></select><!-- 根据id获取角色 --><select id="find" parameterType="Long" resultType="Role">select * from role where id = #{id}</select><!-- 修改角色信息 --><update id="edit" parameterType="Role">update role set name = #{name},remark = #{remark} where id = #{id}</update><!-- 删除角色信息 --><delete id="delete" parameterType="Long">delete from role where id = #{id}</delete>
</mapper>

(5).UserMapper.xml

<mapper namespace="com.xieyunjie.programmer.dao.admin.UserDao"><!-- 根据用户名查找用户 --><select id="findByUsername" parameterType="String" resultType="User">select * from user where username = #{username}</select><!-- 添加用户 --><insert id="add" parameterType="User">insert into user(id,username,password,roleId,photo,sex,age,address) values(null,#{username},#{password},#{roleId},#{photo},#{sex},#{age},#{address})</insert><!-- 修改用户 --><update id="edit" parameterType="User">update user set username = #{username},roleId = #{roleId},photo = #{photo},sex = #{sex},age = #{age},address = #{address} where id = #{id}</update><!-- 修改用户密码 --><update id="editPassword" parameterType="User">update user set password = #{password} where id = #{id}</update><!-- 删除用户 --><delete id="delete" parameterType="String">delete from user where id in(${value})</delete><!-- 分页获取用户列表 --><select id="findList" parameterType="Map" resultType="User">select * from user where 1 = 1 <if test="username != null">and username like '%${username}%' </if><if test="roleId != null">and roleId = #{roleId}  </if><if test="sex != null">and sex = #{sex}  </if><if test="offset != null and pageSize != null">limit #{offset},#{pageSize}</if></select><!-- 获取符合结果的总记录数 --><select id="getTotal" parameterType="Map" resultType="Integer">select count(*) from user where 1 = 1 <if test="username != null">and username like '%${username}%' </if><if test="roleId != null">and roleId = #{roleId}  </if><if test="sex != null">and sex = #{sex}  </if></select>
</mapper>

2.common文件夹下的目录为:
(1).AccountMapper.xml
(2).CommentMapper.xml
(3).OrderMapper.xml
(4).ProductCategoryMapper.xml
(5).ProductMapper.xml
具体代码这里不再赘述!
spring
1.加载过滤器
2. 加载配数据源配置文件 db.properties
3.配置 C3P0 数据源
4.事务管理器 (JDBC)
5.启动声明式事务驱动
6.spring 通过 sqlSessionFactoryBean 获取 sqlSessionFactory 工厂类
7.配置扫描 dao 包,动态实现 dao 接口,注入到 spring 容器中
8.具体代码不在赘述!
springmvc
1.扫描包中的 Controller 注解
2. 启动 mvc 注解驱动
3.启动定时任务
4.静态资源处理
*5.配置视图解析器 *
6.上传文件
7.后台访问拦截器
具体代码这里不再赘述!
数据库连接文件

datasource.connection.driver_class=com.mysql.jdbc.Driver
datasource.connection.url=jdbc:mysql://localhost:3306/db_online_shop?useUnicode=true&characterEncoding=utf-8
datasource.connection.username=root
datasource.connection.password=root

日志文件

### direct log message to stdout ###
log4j.appender.stdout.Target = System.out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%nlog4j.rootLogger=INFO, stdout
#debug,info,warning,error

九、controller控制器的解释

admin

1.AccountController

客户管理控制器
@RequestMapping("/admin/account")
@Controller
public class AccountController {@Autowiredprivate AccountService accountService;/*** 客户列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("account/list");return model;}具体代码这里不再赘述!

2.CommentCotntroller

/*** 评论管理控制器* @author Administrator**/
@RequestMapping("/admin/comment")
@Controller
public class CommentController {@Autowiredprivate CommentService commentService;/*** 评论列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("comment/list");return model;}具体代码这里不再赘述!

3.LogController

/*** 日志管理控制器* @author llq**/
@RequestMapping("/admin/log")
@Controller
public class LogController {@Autowiredprivate LogService logService;/*** 日志列表页面* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("log/list");return model;}具体代码这里不再赘述!

4.MenuController

/*** 菜单管理控制器* @author llq**/
@RequestMapping("/admin/menu")
@Controller
public class MenuController {@Autowiredprivate MenuService menuService;/*** 菜单管理列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.addObject("topList", menuService.findTopList());model.setViewName("menu/list");return model;}

5.OrderController

/*** 订单管理控制器* @author Administrator**/
@RequestMapping("/admin/order")
@Controller
public class OrderController {@Autowiredprivate OrderService orderService;@Autowiredprivate AccountService accountService;/*** 订单列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("order/list");model.addObject("accountList", JSONArray.fromObject(accountService.findList(new HashMap<String, Object>())));return model;}

6.ProductCategoryController

/*** 商品分类管理控制器* @author 17877**/
@RequestMapping("/admin/product_category")
@Controller
public class ProductCategoryController {@Autowiredprivate ProductCategoryService productCategoryService;/*** 商品分类列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model) {model.setViewName("product_category/list");return model;}

7.ProductController

/*** 商品管理控制器* model.setViewName("product/list");* 对应的是视图的.js文件* @author Administrator**/
@RequestMapping("/admin/product")
@Controller
public class ProductController {@Autowiredprivate ProductCategoryService productCategoryService;@Autowiredprivate ProductService productService;/*** 商品列表页* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("product/list");model.addObject("productCategoryList", JSONArray.fromObject(productCategoryService.findList(new HashMap<String, Object>())));return model;}

8.RoleController

/*** 角色role控制器* @author llq**/
@RequestMapping("/admin/role")
@Controller
public class RoleController {@Autowiredprivate RoleService roleService;@Autowiredprivate AuthorityService authorityService;@Autowiredprivate MenuService menuService;/*** 角色列表页面* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("/role/list");return model;}

9.StatsController

/*** 统计管理控制器* @author llq**/
@RequestMapping("/admin/stats")
@Controller
public class StatsController {@Autowiredprivate OrderService orderService;/*** 统计列表页面* @param model* @return*/@RequestMapping(value="/stats",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("stats/stats");return model;}

10.SystemController

/*** 系统操作类控制器* @author 17877**/
@Controller
@RequestMapping("/system")
public class SystemController {@Autowiredprivate UserService userService;@Autowiredprivate RoleService roleService;@Autowiredprivate AuthorityService authorityService;@Autowiredprivate MenuService menuService;@Autowiredprivate LogService logService;/*** 系统登录后的主页* @param model* @return*/@RequestMapping(value="/index",method=RequestMethod.GET)public ModelAndView index(ModelAndView model,HttpServletRequest request){List<Menu> userMenus = (List<Menu>)request.getSession().getAttribute("userMenus");model.addObject("topMenuList", MenuUtil.getAllTopMenu(userMenus));model.addObject("secondMenuList", MenuUtil.getAllSecondMenu(userMenus));model.setViewName("system/index");return model;//WEB-INF/views/+system/index+.jsp = WEB-INF/views/system/index.jsp}

11.UserControlle

/*** 用户管理控制器* @author llq**/
@RequestMapping("/admin/user")
@Controller
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate RoleService roleService;/*** 用户列表页面* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){Map<String, Object> queryMap = new HashMap<String, Object>();model.addObject("roleList", roleService.findList(queryMap));model.setViewName("user/list");return model;}

十、前端界面

1.system/login.jsp后台登陆界面
2.system/index.jsp后台管理主页
3.system/welcome.jsp欢迎界面
4.system/edit_password.jsp修改密码界面

5.menu/list.jsp菜单管理界面

6.role/list.jsp角色管理界面

7.user/list.jsp用户列表界面

8.log/list.jsp日志界面

9.product_category/list.jsp商品分类,分类列表

10.product/list.jsp商品管理商品列表界面

11.account/list.jsp客户管理客户列表界面

12.order/list.jsp订单管理订单列表

13.comment/list.jsp评论管理评论列表

14.stats/ststs.jsp销售统计,统计图表

至此!该系统的后台模块已经介绍完毕!

如有兴趣可以看下一篇关于前台的介绍,之后还会推出一篇关于该项目所用到的知识点!!!

最后附上该项目的视频出处!!!

项目视频

基于SSM的网上商城(上)相关推荐

  1. 基于SSM的网上商城(中)

    上一篇已经大致介绍了该项目的结构以及后台部分的管理和界面 具体链接如下: 基于SSM的网上商城(上) 代码链接 这篇来讲讲前台管理和界面的一些内容: 一:前台的展示界面: 1.common公共界面 ( ...

  2. 基于SSM的网上商城系统设计与实现

    今天给大家分享一个基于SSM的网上商城系统系统,分享给大家,希望多多支持 源码在文章末尾链接获取 一.项目背景 网上购物的悄然兴起,是社会经济发展的一个产物,与传统的店铺相比,网易购购物平台具有一定的 ...

  3. 基于SSM的网上商城项目

    前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,商品交易当然也不能排除在外,随着商品交易管理的不断成熟,它彻底改变了过去传统的经营修理方式,不仅使商品交易 ...

  4. 毕设项目 - 基于SSM的网上购物商城(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统开发流程 3.3 系统结构设计 4 项目获取 1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大 ...

  5. VUE毕设项目 - 基于SSM的网上购物商城(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统开发流程 3.3 系统结构设计 4 项目获取 1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大 ...

  6. javaweb基于SSM开发网上电子购物商城系统+论文+PPT 课程设计 毕业设计源码

    基于SSM开发网上电子购物商城系统+论文+PPT:(毕业设计/课程设计) 开发工具: MyEclipse(eclipse/idea)+Jdk+Tomcat+MySQL数据库 演示视频: 基于SSM开发 ...

  7. 基于SSM的创意商城动态网站【毕设-附源码】

    基于SSM的创意商城动态网站 目 录 1 引言 1 1.1 课题背景 1 1.2 目的和意义 1 1.3系统开发技术的特色 1 1.4 论文结构安排 2 2 创意商城的需求分析 3 2.1 系统可行性 ...

  8. 基于SSM实现汽车配件商城系统

    作者主页:编程千纸鹤 作者简介:Java.前端.Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 项目编号:BS-SC-033 ...

  9. 基于SSM的鲜花商城管理系统

    基于SSM的鲜花商城管理系统 摘  要:伴随着科学技术的发展,网络技术得到了快速的普及,我们已进入一个崭新的信息化时代.传统模式的管理方法已经无法满足对于海量数据信息进行高效的.快捷的管理需求.为了有 ...

  10. 基于php+Mysql网上商城系统 开题报告

      本科生毕业论文 基于PHP+Mysql网上商城系统 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本科生毕业论文(设计)开题报 ...

最新文章

  1. 连接黑屏_连接百度Carlife后,MMI黑屏了?
  2. linux系统启动报错:[contains a file system with errors, check forced]的解决方法参考
  3. oracle 创建database link
  4. idea上一些比较有用的插件
  5. C#中的String编码转换
  6. 刷leetcode第705题- 设计哈希集合
  7. jdbc Template 介绍和 spring 链接数据源的四种方式
  8. Python实现石头-剪刀-布小游戏
  9. python编程入门指南-《中小学生Python编程入门指南》附录二
  10. 笑看 等什么君 简谱
  11. redis源码阅读—hyperloglog(基数统计)
  12. JAVA面试题大全(part_1)
  13. crt远程连接linux目录的颜色不显示,SecureCRT连接linux设置vim显示颜色
  14. GT sport真实赛道详解 - Brands Hatch | 伯蘭士赫治GP賽車場
  15. 计算机 教案,计算机教案.doc
  16. #Sora#peewee query 笔记
  17. python的脑安装了ffmpeg_python脚本实现音频m4a格式转成MP3格式
  18. JAD反编译tricks
  19. 计算机软件和软件系统的区别,系统软件和软件系统是一回事吗?如果不是,那 – 手机爱问...
  20. LabVIEW自适应屏幕分辨率缩放

热门文章

  1. 电脑打开内存占用过高问题(开机85%【16G运存】)
  2. Off World Live 插件:广播UE4内部的音频信号到NDI
  3. python 美化输出_如何让Python输出更漂亮:PrettyPrinter美化打印包使用手册
  4. 关于在android平台使用nanohttpd实现的http服务在WIFI环境下响应明显太慢的问题
  5. oracle加索引 oracle,Oracle索引创建及管理
  6. 无线通信基础知识14:数字通信之调制
  7. 计算机辅助汽车人机工程未来挑战,汽车人机工程学
  8. C++ primer plus 第六版 第十一章 复习题
  9. 华为面试题之洞穴逃生
  10. 什么叫运营---一个人,一张网,一艘船,独钓寒江雪!