老师,求助!莫名的空指针异常

老师,求助!莫名的空指针异常

# 具体遇到的问题
老师您好,我调用fi.getName()的时候会得到null,想问一下是哪里少做了什么操作吗?

fi.getString()能得到正确的结果,然后想switch的时候就报空指针异常了
# 报错信息的截图

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

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


# 相关课程内容截图

# 尝试过的解决思路和结果
我试过不加enctype="multipart/form-data"

,chrome开发工具network里面可以看到请求,request.getParameter("pname")是能得到结果的
# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

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

2回答

同学你好,1. getFieldName()方法用于返回表单标签name属性的值。则建议同学修改代码为getFieldName()方法。如下图所示:

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

2.  getName()方法用于获得文件上传字段中的文件名。可能是未获取到文件名,所以导致数据为null。

好帮手慕小尤 2020-10-21 11:06:52

同学你好,1. 空指针异常是在使用null调用方法就会出现的异常,则建议同学查看55、66、101行是否存在问题。

2. multipart/form-data是指表单数据由多部分构成,既有文本数据,又有文件等二进制数据。只有使用了multipart/form-data,才能完整的传递文件数据,进行文件上传的操作。

3. get请求是将数据以字符串形式存放到url中,二进制文件没办法存放在url中,所以get请求不能传输二进制文件,如果需要上传文件,则建议修改为post请求。如下所示:

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

4. 如果还存在问题,则建议同学以复制粘贴的方式反馈jsp与添加的所有代码,便于老师定位问题。

  • 提问者 慕莱坞4341820 #1
    奇怪的地方就是我并不是FileItem整个为空,我可以getString()得到传入的结果,但是getName()为空,比如我截图里打印getName():getString(), 我得到的是null:test,按理说getName()得到的是input的名字呀,怎么会是空呢
    2020-10-21 11:33:31
  • 提问者 慕莱坞4341820 #2
    create.jsp <%@page contentType="text/html;charset=utf-8" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>新增油画</title> <link rel="stylesheet" type="text/css" href="css\create.css"> <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript" src="js/validation.js"></script> </head> <body> <div class="container"> <fieldset> <legend>新增油画</legend> <form action="/management?method=create" method="post" autocomplete="off" enctype="multipart/form-data"> <ul class="ulform"> <li><span>油画名称</span><span id="errPname"></span> <input id="pname" name="pname"/> </li> <li><span>油画类型</span><span id="errCategory"></span> <select id="category" name="category"> <option value="-1">请选择油画类型</option> <option value="1">现实主义</option> <option value="2">抽象主义</option> </select> </li> <li><span>油画价格</span><span id="errPrice"></span><input id="price" name="price"/></li> <li><span>作品预览</span><span id="errPainting"></span><input id="painting" name="painting" type="file" style="padding-left: 0px;"/></li> <li><span>详细描述</span><span id="errDescription"></span><textarea id="description" name="description"></textarea></li> <li style="text-align: center;"> <button type="submit" class="btn-button">提交表单</button> </li> </ul> </form> </fieldset> </div> </body> </html>
    2020-10-21 11:35:57
  • 提问者 慕莱坞4341820 #3
    private void create(HttpServletRequest request, HttpServletResponse response) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sf = new ServletFileUpload(factory); try { List<FileItem> formData = sf.parseRequest(request); Painting painting = new Painting(); for (FileItem fi : formData) { System.out.println(fi.getName() + ":" + fi.getString("UTF-8")); if (fi.isFormField()) { switch (fi.getName()) { case "pname": painting.setPname(fi.getString("UTF-8")); break; case "category": painting.setCategory(Integer.parseInt(fi.getString("UTF-8"))); break; case "price": painting.setPrice(Integer.parseInt(fi.getString("UTF-8"))); break; case "description": painting.setDescription(fi.getString("UTF-8")); } } else { String originName = fi.getName(); String fileName = originName + UUID.randomUUID(); String suffix = originName.substring(originName.lastIndexOf(".")); fileName += suffix; String path = request.getServletContext().getRealPath("/upload"); fi.write(new File(path, fileName)); painting.setPreview(fileName); } } paintingService.create(painting); } catch (Exception e) { e.printStackTrace(); } }
    2020-10-21 11:37:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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