public void execute(Context context, @Param("mapdata") FileItem mapdata) throws IOException {
brc.setBuffering(false);
ResponseMsg rm = new ResponseMsg();
try {
byte[] imgData = mapdata.get();
//...................省略
g.drawString("Total: " + list.size(), 10, 20);
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tagImg);
out.flush();
} catch (Exception e) {
logger.error(e.getMessage());
rm.setCode(RESPONSECODE.ERR);
rm.setMsg(e.getMessage());
response.reset();
sendMsg(response, JSON.toJSONString(rm));
}
}
当你访问这个web逻辑的时候,页面上看到图片正确输出了,但是后台却抛出异常,指向 byte[] imgData = mapdata.get();这一行说空指针异常,你怎么看。
调试界有一句金律:当你觉得发生不可思议的情况,那一定是多线程在作怪。
可是,可是,我的这个访问是在我本机上我自己一次访问产生的。
于是在这行上面加了一行:System.out.println(mapdata == null);再访问,前端图片出来了,但是后台出现两条记录 false,true
多线程,多线程,这不就是多线程吗?一次点击产生两次访问。
换ie,正确,只有一次访问,后台没有异常。
换回FireFox,抓包:
POST /console/makeSurf.do HTTP/1.1
Host: 10.68.104.247:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: text/
html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://10.68.104.247:8081/makesurf.htm
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------22039331017425
Content-Length: 29559
-----------------------------22039331017425
Content-Disposition: form-data; name="mapdata"; filename="google.png"
Content-Type: image/png
.PNG
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
f .Q.P,w6r.G<.W.2@P.R.G ....T.9#.h..(..(..(..(..(..(..(..(..(..(..(..(..k.ZO...]V.m.V+.*..G\...z..z...
0
GET /console/makeSurf.do HTTP/1.1
Host: 10.68.104.247:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 15
Server: Jetty(8.1.7.v20120910)
{"code":"ERR"}
我操你妈,明明是一次提交,你为什么要给老子在后面又来一次get请求?狗日的FireFox惹的祸!