(三十)商品管理-添加商品(上傳圖片)


添加商品(上傳圖片)
    1.修改頁面上添加連接
        /store/adminProduct?method=addUI
    2.在addUI請求轉發到 添加頁面
    3.在表單頁面上
        修改action : /store/addProductServlet
        提交方式: method="post"
        添加enctype屬性: enctype="multipart/form-data"
        給每個字段添加name屬性
    4.addProductServlet
        通過request.getParameterMap獲取的信息全部為空
        我們想使用beanuitls.populate(bean,map),
        我們需要創建一個map集合 ,將前台接受過來信息手動的put到map中
        注意:
            商品的圖片:
                1:保存到服務器的磁盤
                2.在數據中添加圖片的位置
        
        調用productservice完成添加商品操作
        重定向到所有的商品的上面
        
    ////////////////////////////////
    ////////////////////////////////
    ////////////////////////////////
fileUpload使用
            創建一個磁盤文件項工廠
                DiskFileItemFactory factory = new DiskFileItemFactory();
            創建一個核心文件上傳對象 ServletFileUpLoad
                ServletFileUpload upload = new ServletFileUpload(factory);
            上傳對象調用方法解析請求 獲取一個List<FileItem>
                List<FileItem> list = upload.parseRequest(request);
            遍歷list獲取每一個文件項
                
                isFormFiled():判斷是否是普通上傳組件
                    true:普通上傳組件
                    false:文件上傳組件
                getFiledName():獲取表單子標簽的name屬性值
                若是普通的上傳組件
                    getString("utf-8"):獲取用戶輸入的值
                若是文件上傳組件
                    getName():獲取上傳文件的名稱
                    getInputStream():獲取上傳文件流
                    最后刪除臨時文件
                        delete()

導入fileupload的jar包

http://pan.baidu.com/s/1jIb11gq

/store/WebContent/admin/product/list.jsp

/store/src/com/louis/web/servlet/AdminProductServlet.java

/**
     * 跳轉到添加商品的頁面
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String addUI(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //查詢所有的分類 返回list
        CategoryService cs=(CategoryService) BeanFactory.getBean("CategoryService");
        List<Category> clist = cs.findAll();
        
        //將list放入request
        request.setAttribute("clist", clist);
        return "/admin/product/add.jsp";
    }

/store/WebContent/admin/product/add.jsp

/store/src/com/louis/web/servlet/AddProductServlet.java

package com.louis.web.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

import com.louis.domain.Category;
import com.louis.domain.Product;
import com.louis.service.ProductService;
import com.louis.utils.BeanFactory;
import com.louis.utils.UUIDUtils;
import com.louis.utils.UploadUtils;

/**
 * Servlet implementation class AddProduct
 */
public class AddProductServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        try {
            //0.創建map 放入前台傳遞的數據
            HashMap<String, Object> map = new HashMap<>();
            
            //創建磁盤文件項
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //創建核心上傳對象
            ServletFileUpload upload = new ServletFileUpload(factory);
            //解析request
            List<FileItem> list = upload.parseRequest(request);
            //遍歷集合
            for (FileItem fi : list) {
                //判斷是否是普通的上傳組件
                if(fi.isFormField()){
                    //普通上傳組件
                    map.put(fi.getFieldName(),fi.getString("utf-8"));
                }else{
                    //文件上傳組件
                    //獲取文件名稱
                    String name = fi.getName();
                    
                    //獲取文件的真實名稱    xxxx.xx
                    String realName = UploadUtils.getRealName(name);
                    //獲取文件的隨機名稱
                    String uuidName = UploadUtils.getUUIDName(realName);
                    
                    //獲取文件的存放路徑
                    String path = this.getServletContext().getRealPath("/products/1");
                    
                    //獲取文件流
                    InputStream is = fi.getInputStream();
                    //保存圖片
                    FileOutputStream os = new FileOutputStream(new File(path, uuidName));
                    
                    IOUtils.copy(is, os);
                    os.close();
                    is.close();
                    
                    //刪除臨時文件
                    fi.delete();
                    
                    //在map中設置文件的路徑
                    map.put(fi.getFieldName(), "products/1/"+uuidName);
                    
                }
                
            }
            
            
            
            //1.封裝參數
            Product p = new Product();
            BeanUtils.populate(p, map);
            
            //1.1 商品id
            p.setPid(UUIDUtils.getId());
            
            //1.2 商品時間
            p.setPdate(new Date());
            
            //1.3 封裝cateogry
            Category c = new Category();
            c.setCid((String)map.get("cid"));
            
            p.setCategory(c);
            
            //2.調用service完成添加
            ProductService ps=(ProductService) BeanFactory.getBean("ProductService");
            ps.add(p);
            
            //3.頁面重定向
            response.sendRedirect(request.getContextPath()+"/adminProduct?method=findAll");
        } catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("msg", "商品添加失敗~");
            request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
            return;
        }
        
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

 

/store/WebContent/WEB-INF/web.xml

  <servlet>
    <description></description>
    <display-name>AddProductServlet</display-name>
    <servlet-name>AddProductServlet</servlet-name>
    <servlet-class>com.louis.web.servlet.AddProductServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddProductServlet</servlet-name>
    <url-pattern>/addProduct</url-pattern>
  </servlet-mapping>

 /store/src/com/louis/service/impl/ProductServiceImpl.java

    /**
     * 添加商品
     */
    @Override
    public void add(Product p) throws Exception {
        ProductDao pdao=(ProductDao) BeanFactory.getBean("ProductDao");
        pdao.add(p);
    }

/store/src/com/louis/dao/impl/ProductDaoImpl.java

/**
     * 添加商品
     */
    @Override
    public void add(Product p) throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        /**
         * `pid` VARCHAR(32) NOT NULL,
          `pname` VARCHAR(50) DEFAULT NULL,
          `market_price` DOUBLE DEFAULT NULL,
          
          `shop_price` DOUBLE DEFAULT NULL,
          `pimage` VARCHAR(200) DEFAULT NULL,
          `pdate` DATE DEFAULT NULL,
          
          `is_hot` INT(11) DEFAULT NULL,
          `pdesc` VARCHAR(255) DEFAULT NULL,
          `pflag` INT(11) DEFAULT NULL,
          `cid` VARCHAR(32) DEFAULT NULL,
         */
        String sql="insert into product values(?,?,?,?,?,?,?,?,?,?);";
        qr.update(sql, p.getPid(),p.getPname(),p.getMarket_price(),
                p.getShop_price(),p.getPimage(),p.getPdate(),
                p.getIs_hot(),p.getPdesc(),p.getPflag(),p.getCategory().getCid());
    }

 

問題:

beanutils

uploadfile

map


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM