UploadUtils中的params集合到底该如何处理?

UploadUtils中的params集合到底该如何处理?

是直接将接收到表单的各项数据储存到集合中?

还是将数据储存在food类,然后把food类封装进params中?

作业的要求描述也让人有点搞不清楚,具体操作的时候两种方法我都试了。如果直接储存在集合中,第一次上传没问题,但是第二次就会覆盖之前的菜品,静态集合该怎么用?如果把food类封装进params,那servlet上传的方法该如何获取params的“id”key值来选中正确的food上传到foodDaolmpl中。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

如果把数据都封装到food中,就不用再存储到params中了。所以如果你用集合写了,可以就不用Food类了,如果用Food类的话,整个结构确实需要改一下,FoodDaoImpl类中的List存储的就应该都是Food类的对象。

关于覆盖的问题,建议你把添加菜品相关的代码贴出来,帮你看看。

祝学习愉快!


  • 驱车上东门 提问者 #1
    老师我把工具类和添加servlet回复在上面了,第二次上传会覆盖第一次菜品的原因是,工具类的集合没有清空吗?还是因为他是静态集合的原因?
    2018-03-25 09:04:10
  • 驱车上东门 提问者 #2
    非常感谢!
    2018-03-26 17:46:49
提问者 驱车上东门 2018-03-25 09:02:37
public class UploadUtils {

	public static Map<String, Object> params = new HashMap<>();

	public static String getUUIDFileName(String fileName) {
		int idx = fileName.lastIndexOf(".");
		String extention = fileName.substring(idx);
		String uuidFileName = UUID.randomUUID().toString().replace("-", "") + extention;
		return uuidFileName;
	}

	public static Map<String, Object> UploadFile(HttpServletRequest request, String uploadDirectory)
			throws IOException {

		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
		List<FileItem> items = null;
		
		try {
			items = servletFileUpload.parseRequest(request);
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Map<String, String> map = new HashMap<>();
		
		String url = null;
		
		for (FileItem item : items) {
			if (item.isFormField()) {
				String name = item.getFieldName();
				String value = item.getString("UTF-8");
				map.put(name, value);
			} else {
				String fileName = item.getName();
				if (fileName != null && !fileName.equals("")) {
					fileName = getUUIDFileName(fileName);
					// 获得文件上传的路径
					String path = uploadDirectory;
					url = path + "\\" + fileName;
					InputStream is = item.getInputStream();
					OutputStream os = new FileOutputStream(url);
					int len = 0;
					byte[] b = new byte[1024];
					while ((len = is.read(b)) != -1) {
						os.write(b, 0, len);
					}
					is.close();
					os.close();
				}
			}
		}
		

		params.put("id",map.get("id"));
		params.put("foodName",map.get("foodName"));
		params.put("taste",map.get("taste"));
		params.put("foodImage",url);
		params.put("price",map.get("price"));
		params.put("description",map.get("description"));
		
		return (Map<String, Object>) params;

	}

}

public class FoodAddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String uploadDirector = this.getServletContext().getRealPath("/upload");
		UploadUtils upload = new UploadUtils();
		FoodDaolmpl add = new FoodDaolmpl();
		add.addFood(upload.UploadFile(request, uploadDirector));
		response.sendRedirect(request.getContextPath() + "/showFoodList.jsp");
	}


  • 建议将params的定义去掉,在UploadFile方法中直接return map就可以了。 祝学习愉快!
    2018-03-26 11:18:09
  • 提问者 驱车上东门 回复 一叶知秋519 #2
    谢谢老师,解决了。
    2018-03-26 17:47:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师