为了账号安全,请及时绑定邮箱和手机立即绑定

用户输入一串内容,用POST提交到servlet中处理,后端接收不到内容

用户输入一串内容,用POST提交到servlet中处理,后端接收不到内容

呼如林 2019-03-29 22:09:39
如标题,用户在输入了一串内容后(中文),用POST提交,结果到servlet里面转码时就丢失内容了。servlet里面有写://设置请求编码req.setCharacterEncoding("UTF-8");jsp里面也是有写:用chromeF12查看也可以看到表单有提交内容,就是到servlet里面就丢失了。求帮助部分代码如下:@SuppressWarnings("unchecked")@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException{StringBufferresult=newStringBuffer();PrintWriterout=null;Stringmethod=null;try{//设置不创建Sessionreq.getSession(false);//设置响应类型和编码res.setContentType("text/html;charset=UTF-8");//设置请求编码req.setCharacterEncoding("UTF-8");//到这个地方就不可以了map里面就没有值了。。。-_-!~~logger.info("aftermap:"+JsonUtil.toJson(req.getParameterMap()));//声明不缓存res.setHeader("Cache-Control","no-cache");res.setHeader("Expires","Thu,01Nov201210:00:00GMT");res.setHeader("Pragma","no-cache");//获取输出对象out=res.getWriter();//Stringversion=ParamUtil.getParameter(req,"version","2");method=ParamUtil.getParameter(req,"method","");Stringvar=ParamUtil.getParameter(req,"var","").trim();if(!StringUtil.isNullOrBlank(var)){result.append("var");result.append(var);result.append("=");}//请求方法为空if(StringUtil.isNullOrBlank(method)){result.append(JsonUtil.getFailedResponse("-1","请求方法为空!"));out.println(result);return;}//创建请求TwRequestjReq=TwRequest.newInstance();//设置方法jReq.setMethod(method);//设置头部jReq.setHeader("userId",userId);jReq.setHeader("userName",userName);jReq.setHeader("isOnline",isOnline?1:0);jReq.setHeader("userLogin",QingBbsUtil.getUserLogin(req));jReq.setHeader("userIp",ip);jReq.setHeader("userPort",userPort);jReq.setHeader("vKey",CookieUtil.getCookieValue(req.getCookies(),"vk"));Stringreferer=req.getHeader("Referer");booleanisInternal=false;for(Stringinternal:((LinkedHashMap)ConfigUtil.getConfigValue("internal_ip")).get("ip")){if(ip.startsWith(internal))isInternal=true;}//组装参数Stringkey,value;Map.Entryentry;Mapmap=req.getParameterMap();Iteratoriter=map.entrySet().iterator();while(iter.hasNext()){entry=(Map.Entry)iter.next();key=entry.getKey().toString();value=req.getParameter(key);if(key.startsWith("params.")){//设置参数jReq.setParams(key.substring(key.indexOf(".")+1),value);}elseif(key.startsWith("params[")){//设置参数jReq.setParams(key.substring(key.indexOf("[")+1,key.length()-1),value);}}out.print(result);return;}catch(Exceptione){logger.error("处理请求出错!method="+method,e);result.append(JsonUtil.getFailedResponse("-1","处理请求出错!"));out.println(result);return;}finally{if(out!=null){out.close();}}}另外为了确定jsp页面没有问题,我写了一个测试的jsp页面,代码如下:Inserttitlehere另外用户提交的内容里面好像是包含了特殊的字符,我检查了一下可能是特殊字符导致转码出错了,但是没有找到对应的解决方法。
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

丢失内容是什么意思。
如果的后端Class是用doGet处理请求,会有HTTP错误码提示的。
如果是doGet/doPost的问题。可以这样:
 publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
  throwsServletException,IOException{
  doPost(request,response);
  }
                            
查看完整回答
反对 回复 2019-03-29
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

servletdoPost里面处理。
有可能你是doGet处理
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 583 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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