出现乱码怎么回事?

出现乱码怎么回事?

http://img1.sycdn.imooc.com//climg/5ad715800001db9308220062.jpg

出现乱码?

http://img1.sycdn.imooc.com//climg/5ad7159700015d2902840075.jpg

还有就是表单提交过来的name值为null?

http://img1.sycdn.imooc.com//climg/5ad715c30001821109780560.jpg

http://img1.sycdn.imooc.com//climg/5ad715dc0001410c11230557.jpg

正在回答 回答被采纳积分+1

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

3回答
提问者 shammgod4342601 2018-04-19 22:49:52

http://img1.sycdn.imooc.com//climg/5ad8ac740001796e08930070.jpg

public class AddServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            // 创建磁盘文件项工厂类
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 创建一个核心解析类
            ServletFileUpload fileUpload = new ServletFileUpload(factory);
            List<FileItem> list = fileUpload.parseRequest(request);
            Map<String, Object> foodMap = new HashMap<>();
            // 遍历所有的文件项
            for (FileItem fileItem : list) {
                // 如果是普通表单项
                if (fileItem.isFormField()) {
                    String name = fileItem.getFieldName();
                    String value = fileItem.getString("UTF-8");
                    System.out.println("name" + name + ",value" + value);
                    foodMap.put(name, value);
                } else { // 如果不是普通表单项
                    // 获取存放文件的文件夹的路径
                    String path = this.getServletContext().getRealPath("/upload");
                    System.out.println("path" + path);
                    File parentFile = new File(path);
                    if (!parentFile.exists()) {
                        parentFile.mkdirs();
                    }
                    String uuidFileName = UploadUtils.getUUIDFileName(fileItem.getString());
                    System.out.println("uuidfilename : " + uuidFileName);
                    // 获取图片的路径
                    String realPath = path + "\\" + uuidFileName;
                    System.out.println("realPath" + realPath);
                    InputStream is = fileItem.getInputStream();
                    OutputStream os = new FileOutputStream(realPath);
                    int len = -1;
                    byte[] b = new byte[1024];
                    while ((len = is.read(b)) != -1) {
                        os.write(b, 0, b.length);
                    }
                    foodMap.put(fileItem.getName(), realPath);
                }
            }
            System.out.println("菜品信息:" + foodMap.toString());
            // 取出list,把map加入到这个list中
            List<Map<String, Object>> foodList = (List) this.getServletContext().getAttribute("food_list");
            foodList.add(foodMap);
            System.out.println("添加的菜品信息:" + foodList.toString());
            this.getServletContext().setAttribute("food_list", foodList);

            // 添加成功跳转页面
            // TODO

        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
怎么还出现乱码?

  • 单看你这段代码是没有问题的,建议同学检查一下Eclipse和项目的编码是不是都是UTF-8
    2018-04-20 09:53:44
  • 提问者 shammgod4342601 回复 一叶知秋519 #2
    eclipse怎么检查
    2018-04-20 12:50:30
  • 一叶知秋519 回复 提问者 shammgod4342601 #3
    Window-->Preferences 打开"首选项"对话框,左侧导航树,导航到 General-->Workspace 将编码方式改为UTF-8。祝学习愉快!
    2018-04-20 14:20:35
好帮手慕珊 2018-04-19 09:23:31

http://img1.sycdn.imooc.com//climg/5ad7ef550001f6b307590165.jpg

把fileItem.getName()改成 String name = fileItem.getFieldName(); 再试试

关于乱码的问题,检查一下jsp页面,servlet是否都设置成了UTF-8的格式。

祝学习愉快!

喜欢做梦的鱼 2018-04-18 18:10:40

请同学先检查一下,表单提交的method属性设置值是get还是post?另外,核实一下,表单元素的name与提取的参数名是否一致?

  • 提问者 shammgod4342601 #1
    是post请求,我是用FileItem提取表单的元素名哦
    2018-04-18 19:45:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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