用户输入一串内容,用POST提交到servlet中处理,后端接收不到内容
如标题,用户在输入了一串内容后(中文),用POST提交,结果到servlet里面转码时就丢失内容了。
servlet里面有写:
// 设置请求编码
req.setCharacterEncoding("UTF-8");
jsp里面也是有写:
<meta content="text/html; charset=utf-8"/>
用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>
另外用户提交的内容里面好像是包含了特殊的字符,我检查了一下可能是特殊字符导致转码出错了,但是没有找到对应的解决方法。
Joker疯
10 years, 7 months ago