ssm实战(4,5)------分类管理,商品管理

Posted lemonades

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssm实战(4,5)------分类管理,商品管理相关的知识,希望对你有一定的参考价值。

分类管理

功能:

获取节点

增加节点

修改名字

获取分类ID

递归子节点ID

 

 

接口:

 

注:

1 在对功能的操作前,要对安全性进行检验,如:是否登录(使用session);管理员权限(role值的检查);参数是否为空; 用户登录密码的MD5加密;

2 Set<Category>:使用set集合,Category要重写equal和hashcode

 

学习目标

 

递归查询子节点

 

商品管理:

 

功能:

 

前台功能: 产品搜索,动态排序列表产品详情,分页功能

后台功能:商品列表,商品搜索,图片上传,富文本上传,商品详情,商品上下架,增加商品,更新商品

 

接口:

 

前台接口: 1 产品搜索及动态排序list;2 产品detail ; 

后台接口 :1 产品list ;2 产品搜索 ; 3 图片上传 ;4 产品详情; 5 产品上下架 ; 6  新增产品或修改产品 ;7 富文本上传图片

 

注: 

1 写业务逻辑时,先校验参数或者其他,如果校验不通过直接return,校验通过后再编写业务逻辑

 

学习目标:

 

0 FTP服务的对接

  1.使用MultipartFile上传文件到达项目发布后的web-app目录的upload,再把文件上传到ftp服务器,再删除掉web-app目录的upload里边的文件

 

1 SpringMVC文件的上传:

  SpringMVC文件上传:1 首先创建FileServiceImpl,用于上传文件,2 创建FTPUtil用于创建上传到FTP服务器,3 再把上传到web-app里边的文件删除

package com.eshop.service.impl;

import com.eshop.service.IFileService;
import com.eshop.util.FTPUtil;
import com.google.common.collect.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Service("iFileService")
public class FileServiceImpl implements IFileService 
    private static Logger logger= LoggerFactory.getLogger(FileServiceImpl.class);

    @Override
    public String upload (MultipartFile file, String path)
        //文件名
        String fileName=file.getOriginalFilename();
        //扩展名  abc.jpg ----> jpg
        String fileExtensionName=fileName.substring(fileName.lastIndexOf(".")+1);
        //要上传的文件名
        String uploadFileName= UUID.randomUUID().toString()+"."+fileExtensionName;
        logger.info("开始上传文件,上传的文件夹名:,上传路径:,新文件夹名:",fileName,path,uploadFileName);
        //判断有没有该文件夹,没有就创建
        File fileDir=new File(path);
        if(!fileDir.exists())
            //创建文件夹前,要打开 可写的权限 ,防止tomcat没有开权限
            fileDir.setWritable(true);
            fileDir.mkdirs();
        
        //创建一个完全的文件
        File targetFile=new File(path,uploadFileName);
        try 
            file.transferTo(targetFile);
            //文件上传已完成

            //将targetFile上传到FTP服务器上面
            FTPUtil.uploadFile(Lists.newArrayList(targetFile));
            //上传完后,把targetFile删除
            targetFile.delete();
         catch (IOException e) 
            logger.error("上传文件异常",e);
            return null;
        
        return targetFile.getName();
    

 

package com.eshop.util;

import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

public class FTPUtil 
    private static Logger logger= LoggerFactory.getLogger(FTPUtil.class);
    private static String ftpIp =PropertiesUtil.getProperty("ftp.server.ip");
    private static String ftpUser =PropertiesUtil.getProperty("ftp.user");
    private static String ftpPass =PropertiesUtil.getProperty("ftp.pass");

    private String ip;
    private int port;
    private String user;
    private String pwd;
    private FTPClient ftpClient;

    /**
     *
     * @param ip
     * @param port 端口
     * @param user
     * @param pwd
     */
    public FTPUtil(String ip, int port, String user, String pwd) 
        this.ip = ip;
        this.port = port;
        this.user = user;
        this.pwd = pwd;
    

    /**
     * 开发出去的上传文件的静态方法
     * @param fileList
     * @return
     */
    public static boolean uploadFile(List<File> fileList) throws IOException 
        FTPUtil ftpUtil=new FTPUtil(ftpIp,21,ftpUser,ftpPass);
        logger.info("开始连接FTP服务器");
        boolean result= ftpUtil.uploadFile("img",fileList);
        logger.info("连接服务器结束,上传结果为:",result);
        return result;
    

    /**
     * 上传文件的具体逻辑
     * @param remotePath 远程路径:Linux里边的FTP服务器是一个文件夹,如果要上传的是到这个文件夹下边的文件夹,就要使用remotePath
     * @param fileList
     * @return
     */
    private boolean uploadFile(String  remotePath, List<File> fileList) throws IOException 
        boolean uploaded=true;
        FileInputStream fis=null;
        //连接ftp服务器
        if(connectServer(this.ip,this.port,this.user,this.pwd))
            try 
                //切换工作目录
                ftpClient.changeWorkingDirectory(remotePath);
                //设置缓冲区
                ftpClient.setBufferSize(1024);
                //设置编码方式
                ftpClient.setControlEncoding("UTP-8");
                //文件类型设置为二进制的文件类型
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                //切换工作模式
                ftpClient.enterLocalPassiveMode();
                /* 开始上传文件到ftp !!!*/
                for(File fileItem:fileList)
                    fis=new FileInputStream(fileItem);
                    ftpClient.storeFile(fileItem.getName(),fis);
                
             catch (IOException e) 
                logger.error("上传文件异常",e);
                uploaded=false;
            finally 
                //关闭资源
                fis.close();
                ftpClient.disconnect();
            
        
        return uploaded;
    

    private boolean connectServer(String ip, int port, String user, String pwd)
        boolean isSuccess=false;
        ftpClient=new FTPClient();
        try 
            ftpClient.connect(ip,port);
            isSuccess=ftpClient.login(user,pwd);
         catch (IOException e) 
            logger.error("连接FTP服务器异常",e);
        
        return isSuccess;
    

    public String getIp() 
        return ip;
    

    public void setIp(String ip) 
        this.ip = ip;
    

    public int getPort() 
        return port;
    

    public void setPort(int port) 
        this.port = port;
    

    public String getUser() 
        return user;
    

    public void setUser(String user) 
        this.user = user;
    

    public String getPwd() 
        return pwd;
    

    public void setPwd(String pwd) 
        this.pwd = pwd;
    

    public FTPClient getFtpClient() 
        return ftpClient;
    

    public void setFtpClient(FTPClient ftpClient) 
        this.ftpClient = ftpClient;
    

 应用:

    @RequestMapping("upload.do")
    @ResponseBody
    public ServerResponce upload(HttpSession session,@RequestParam(name = "upload_name",required = false) MultipartFile file, HttpServletRequest request)
        User user=(User)session.getAttribute(Const.CURRENT_USER);
        if(user==null)
            //强制用户登录
            return ServerResponce.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录");
        
        if(iUserService.checkAdminRole(user).isSuccess())
            //填充业务
            String path=request.getSession().getServletContext().getRealPath("upload");
            String targetFileName = iFileService.upload(file, path);
            String url= PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;

            Map fileMap= Maps.newHashMap();
            fileMap.put("uri",targetFileName);
            fileMap.put("url",url);
            return ServerResponce.createBySuccess(fileMap);
        else 
            return ServerResponce.createByErrorMessage("无权限操作");
        
    

 

2 流读取Properties配置文件:

package com.eshop.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

public class PropertiesUtil 
    private static Logger logger= LoggerFactory.getLogger(PropertiesUtil.class);

    private static Properties properties;
    /*静态代码块(只执行一次) 优于 普通代码块 优于 构造代码块*/
    static 
        String fileName="eshop.properties";
        properties=new Properties();
        try 
            properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8"));
         catch (IOException e) 
            logger.error("配置文件读取异常",e);
        
    

    /**
     * 得到配置文件里边的值
     * @param key
     * @return
     */
    public static String getProperty(String key)
        //避免key左右有空格,trim()去掉空格
        String value=properties.getProperty(key.trim());
        if(StringUtils.isBlank(value))
            return null;
        
        return value.trim();
    

    public static String getProperty(String key,String defaultVaule)
        //避免key左右有空格,trim()去掉空格
        String value=properties.getProperty(key.trim());
        if(StringUtils.isBlank(value))
            return defaultVaule;
        
        return value.trim();
    

 

3 抽象POJO,BO,VO对象的转换关系及解决思路

4 joda-time快速入门

package com.eshop.util;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.Date;

public class DateTimeUtil 
    //使用joda-time对时间进行处理
    //1.string --> date    2.date --> string
    private static String STANDARD_FORMAT="yyyy-MM-dd HH:mm:ss";
    /**
     * 字符串装换时间格式,传入一个事件格式
     * @param dateTimeStr
     * @param formatStr 事件格式
     * @return
     */
    public static Date strToDate(String dateTimeStr,String formatStr)
        DateTimeFormatter dateTimeFormatter= DateTimeFormat.forPattern(formatStr);
        DateTime dateTime=dateTimeFormatter.parseDateTime(dateTimeStr);
        return dateTime.toDate();
    

    public static String dateToStr(Date date,String formatStr)
        if(date==null)
            return StringUtils.EMPTY;
        
        DateTime dateTime=new DateTime(date);
        return dateTime.toString(formatStr);
    

    /**
     * 字符串装换时间格式,默认事件格式
     * @param dateTimeStr
     * @return
     */
    public static Date strToDate(String dateTimeStr)
        DateTimeFormatter dateTimeFormatter= DateTimeFormat.forPattern(STANDARD_FORMAT);
        DateTime dateTime=dateTimeFormatter.parseDateTime(dateTimeStr);
        return dateTime.toDate();
    

    public static String dateToStr(Date date)
        if(date==null)
            return StringUtils.EMPTY;
        
        DateTime dateTime=new DateTime(date);
        return dateTime.toString(STANDARD_FORMAT);
    

 

 

5 静态块

静态代码块(只执行一次) 优于 普通代码块 优于 构造代码块

 

6 Mybatis-PageHelper 分页和动态排序

7 Mybatis对 list 集合遍历的方法

8 Mybatis对 where 语句的动态拼装

 

以上是关于ssm实战(4,5)------分类管理,商品管理的主要内容,如果未能解决你的问题,请参考以下文章

IDEA+Java+SSM+Mysql+JSP实现Web宠物商城系统

JavaWeb SSM 《精品毕设》商城管理系统(豪华毕设) 前台 + 后台(源码 + 论文)主要实现的登录注册商品管理添加商品商品分类管理商品类型管理品牌管理用户管理角色管理等功能

java ssm springboot女士电商平台10(源码+sql+论文可运行《精品毕设》)登录注册商品浏览分类管理模糊查找轮播图热销商品购物车订单订单流程控制用户管理

JavaWeb SSM SpringBoot女士电商平台10(源码+sql+论文可运行《精品毕设》)登录注册商品浏览分类管理模糊查找轮播图热销商品购物车订单订单流程控制用户管理

IDEA+Java+SSM+Jsp+Mysql实现Web商品信息管理系统

JavaWeb SSM SpringBoot+Redis网上水果超市商城(源码+论文可运行《精品毕设》)主要实现登录注册商品分类浏览订单评论收藏购物车个人信息地址管理后台管理