添加商品(上傳圖片) 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