2012-03-07 66 views
0

我们已经发布了一个将客户数据发送到Java服务器的客户端(.NET WinForms)应用程序。尽管客户端发送的大部分数据都在服务器端接受,但由于其中存在&字符,因此某些记录被截断,因为客户端发送原始文件&并且不对其进行URL编码,所以我们通过使用以下代码修复了它:接收包含'&'的字符串的服务器端修复(&符号)

string dataBefore="A & B"; 
string dataBefore = System.Web.HttpUtility.UrlEncode(dataBefore); 

这是不可能为我们更新所有的客户端应用程序(这是已经发货),我们正在考虑一个服务器端修复程序。

随着小提琴手的帮助下,我们已确保全部数据已经离开了客户,但是当服务器读取如下:

//in java 
String dataReceied=request.getParameter("data"); 

它就会如果数据包含&

可能有人帮助截断我们建议一个服务器端(Java)修复这个?是否有可能在java中访问请求流(而不是request.getParameter())?

+0

使用POST或GET发送请求吗? – pap 2012-03-07 11:42:13

+0

@pap,myRequest.Method =“POST”; //将内容类型设置为一个FORM myRequest。ContentType =“application/x-www-form-urlencoded”;所以它是POST – sebastso 2012-03-08 07:39:19

回答

0

你可以访问使用HttpServletRequest.getQueryString()javadoc)的原始查询字符串,其中:

返回String包含查询字符串或null如果URL中不包含查询字符串。 该值未由容器解码。

你可以让他们对该字符串执行手动解码,而不是使用getParameter()

@使用getParameterMap()可能没有用处,因为你不知道哪个命令参数提供了韦斯利的主意。

我建议实施这一逻辑作为Servlet过滤器,解耦的固定从实际的servlet逻辑中断开参数。这将涉及编写HttpServletRequestWrapper的自定义子类,其覆盖getParameter()并且手工解码查询字符串。然后你的servlet就可以使用HttpServletrequest API,就好像一切都是有趣的嘘声。

+1

谢谢,我们将实施这个解决方案 – sebastso 2012-03-09 11:01:30

0

它被切断,因为&标志着一个新的URL参数,在这样的要求: google.com?query=java &页= 2。 Java将所有这些参数转换为一个Map,所以这就是它出错的地方。

你有没有尝试迭代通过request.getParameterMap()?剩下的数据很可能以下一个参数的名字命名。如果这不起作用,请查看HTTPServletRequest的the API以查看是否有其他方式获取您的数据。

祝你好运!

PS你们在实习生中写过&的客户有多愤怒?听起来很乱!