开发者社区> 问答> 正文

用POST提交内容到servlet中处理,后端接收不到


[font='Helvetica Neue', Helvetica, 'Trebuchet MS', Arial, sans-serif]用户在输入了一串内容后(中文),用POST提交,结果到servlet里面转码时就丢失内容了。
servlet里面有写:// 设置请求编码req.setCharacterEncoding("UTF-8");
jsp里面也是有写:
用chrome F12查看也可以看到表单有提交内容,就是到servlet里面就丢失了。
求帮助
部分代码如下:
@SuppressWarnings("unchecked")
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        StringBuffer result = new StringBuffer();
        PrintWriter out = null;
        String method = null;
        try {
            // 设置不创建Session
            req.getSession(false);

            // 设置响应类型和编码
            res.setContentType("text/html; charset=UTF-8");

            // 设置请求编码
            req.setCharacterEncoding("UTF-8");
            // 到这个地方就不可以了 map里面就没有值了。。。-_-!~~
            logger.info("after map : " + JsonUtil.toJson(req.getParameterMap()));

            // 声明不缓存
            res.setHeader("Cache-Control", "no-cache");
            res.setHeader("Expires", "Thu, 01 Nov 2012 10:00:00 GMT");
            res.setHeader("Pragma", "no-cache");


            // 获取输出对象
            out = res.getWriter();

            // String version = ParamUtil.getParameter(req, "version", "2");
            method = ParamUtil.getParameter(req, "method", "");
            String var = 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;
            }

            // 创建请求
            TwRequest jReq = 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"));
            String referer = req.getHeader("Referer");
            boolean isInternal = false;
            for(String internal : ((LinkedHashMap<String,LinkedList<String>>)ConfigUtil.getConfigValue("internal_ip")).get("ip")){
                if(ip.startsWith(internal)) isInternal = true;
            }

            // 组装参数
            String key, value;
            Map.Entry<?, ?> entry;
            Map<?, ?> map = req.getParameterMap();
            Iterator<?> iter = 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);
                } else if (key.startsWith("params[")) {

                    // 设置参数
                    jReq.setParams(key.substring(key.indexOf("[") + 1, key.length() - 1), value);
                }
            }
            out.print(result);
            return;
        } catch (Exception e) {
            logger.error("处理请求出错!method = " + method, e);
            result.append(JsonUtil.getFailedResponse("-1", "处理请求出错!"));
            out.println(result);
            return;
        } finally {
            if (out != null) {
                out.close();
            }
        }
}

另外为了确定jsp页面没有问题,我写了一个测试的jsp页面,代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="提交到上面的servlet">
  <label for="params.content"></label>
  <input name="params.content" type="text" id="params.content" value="在这里填入内容" />
  <input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>

另外用户提交的内容里面好像是包含了特殊的字符,我检查了一下可能是特殊字符导致转码出错了,但是没有找到对应的解决方法。

展开
收起
码农007 2014-06-09 17:19:01 9793 0
1 条回答
写回答
取消 提交回答
  • Re用POST提交内容到servlet中处理,后端接收不到
    servlet doPost里面处理。
    有可能你是doGet处理
    如果后端Class是用doGet处理请求,会有HTTP错误码提示的。

    如果是doGet/doPost的问题。可以这样:
    public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      doPost(request,response);
      }


    2014-06-10 10:37:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
十分钟上线-使用函数计算构建支付宝小程序服务 立即下载
机器学习在互联网后端技术中的应用 立即下载
低代码开发师(初级)实战教程 立即下载