1.要导入上传字节码文件【上传用的】
2.设置表单提交方式为post和enctype="multipart/form-data"
3.导入【拷贝用的】
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'systemUser.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="back/SystemItemServlet?op=add" method="post" enctype="multipart/form-data" name="myForm">
商品名称<input type="text" name="name"><br><br>
商品价格<input type="text" name="price"><br><br>
添加时间<input type="text" name="putTime"><br><br>
商品图片<input type="file" name="img"/><br><br>
商品描述<textarea name="description"></textarea><br><br>
<input type="submit" value="添加">
<input type="reset" value="重置">
</form>
</body>
</html>
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.zxg.dao.IItemDao;
import com.zxg.dao.IItemTypeDao;
import com.zxg.dao.impl.ItemDao;
import com.zxg.dao.impl.ItemTypeDao;
import com.zxg.util.PrimaryKeyUtil;
import com.zxg.vo.Item;
import com.zxg.vo.ItemType;
public class SystemItemServlet extends HttpServlet {
private IItemDao itemDao = new ItemDao();
private IItemTypeDao itemTypeDao = new ItemTypeDao();
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String op = request.getParameter("op");
// 这里可以采用StringUtils包来判断,由于没有该库
// 自己手写下
if (op != null && !"".equals(op.trim())) {
if ("list".equals(op)) {
this.list(request, response);
} else if ("add".equals(op)) {
//上传
this.add(request, response);
} else if ("listTypes".equals(op)) {
this.listTypes(request, response);
}
return;
}
this.list(request, response);
}
private void list(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Item> items = this.itemDao.findAll();
request.setAttribute("items", items);
request.getRequestDispatcher("/back/SystemItem/list.jsp").forward(
request, response);
}
private void listTypes(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
List<ItemType> types = this.itemTypeDao.findAll();
request.setAttribute("types", types);
request.getRequestDispatcher("/back/SystemItem/add.jsp").forward(
request, response);
}
/**
* 上传
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置总文件大小为5M
upload.setSizeMax(1024 * 1024 * 5);
//设置单个文件上传的大小
upload.setFileSizeMax(1024 * 1024 * 5);
//把客户端上传的文件流读取到内存并封装为List<FileItem>接口
//文件可能有多个
try {
Item item = new Item();
List<FileItem> list = upload.parseRequest(request);
Map<String, String> map = new HashMap<String, String>();
for(FileItem fileItem : list){
if(fileItem.isFormField()){
String key = fileItem.getFieldName();
//防止乱码
String value = fileItem.getString("gbk");
map.put(key, value);
}else{
//获取选择框的文件全称(包括文件名称+后缀),自定义文件名
//需拆分文件全称获取后缀,然后跟自定义文件名组成新的文件全称
String fileName = fileItem.getName();
//获取文件扩展名,即后缀,如.doc
String ext = fileName.substring(fileName.lastIndexOf("."));
fileName = PrimaryKeyUtil.getOnlyFileName() + ext;
map.put("img",fileName);
//获取webroot下的upload的绝对路径,利用servletContext获取WebRoot下的文件
//斜杠带不带都可,如D:/apache-tomcat-6.0.30/webapps/myshop/upload
String uploadPath = this.getServletContext().getRealPath("/upload");
//这样写也可以new File(uploadPath+"/"+fileName),写到服务器的upload文件下并生成
//自定义文件全名
//fileItem.write(new File(uploadPath,fileName));
fileItem.write(new File(uploadPath+"/" + fileName));
}
}
//拷贝,map拷贝到item中
org.apache.commons.beanutils.BeanUtils.populate(item, map);
//添加到数据库
this.itemDao.add(item);
} catch (Exception e) {
e.printStackTrace();
}
}
}