2012-03-07 48 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你們在實習生中寫過&的客戶有多憤怒?聽起來很亂!

相關問題