2015-11-26 71 views
-1

以下scneraion的最佳方式:對Servlet和JSP通信

我有一個java.sql.ResultSetrsServlet。現在我想製作一個圖表(使用紀元https://fastly.github.io/epoch/getting-started/)。眼下

var data = [ { label: 'Layer 1', values: [ {x: 0, y: 0}, {x: 1, y: 1}, {x: 2, y: 2} ] }, { label: 'Layer 2', values: [ {x: 0, y: 0}, {x: 1, y: 1}, {x: 2, y: 4} ] } ];

,我ResultSet看起來是這樣的:

圖表JS數據需要在以下格式

x,y

x,y

。 ..

ServletJSP之間的通信應該如何進行?我應該只發送ResultSetobejct到JSP並將其轉換到那裏,或者我應該在Servlet中轉換它嗎?

回答

2

我將在最小提取從ResultSet數據到一個Collection(例如List)中並用在JSP工作(使用JSTL)。

但是,如果這是一個選項,我會認真考慮完全放棄JSP,並將servlet重新實現爲您從客戶端的Javascript調用的REST服務(並直接從servlet中將數據作爲JSON返回)。

編輯:要擴展第二個選項,可以將數據轉換爲JSON字符串(手動或使用類似Jackson的庫 - see here for an example),然後將該字符串放入servlet響應中。

然後從Javascript中可以調用該servlet。我不知道你正在使用什麼框架,但你可以用幾行jQuery來完成(參見jquery.get()

+0

你能解釋第二個選項多一點嗎? – farahm

+0

看到我的編輯,希望這可以幫助。 –

2

在我看來,Servlet不應該引用ResultSet。您應該封裝這個邏輯在其中可以進行測試,嘲笑服務,攔截等等等等

public class Series { 
    private String label; 
    private List<Point> points; 

    // getters and setters 
} 

public class Point { 
    private double x; 
    private double y; 

    // getters and setters 
} 

public interface ChartService { 
    List<Series> getAverageRainfall(Date from, Date to); 
} 

public class ChartServiceImpl implements ChartService { 
    public List<Series> getAverageRainfall(Date from, Date to) { 
     // here is where you might reference java.sql.ResultSet 
    } 
} 

這可以然後輕鬆地變成使用spring一個HTTP端點返回JSON或類似的意思是你實際上並不需要一個自定義的servlet。