以下scneraion:
我的java.sql.ResultSet
中有一个rs
Servlet
。现在我想制作一个图表(使用纪元https://fastly.github.io/epoch/getting-started/)。
图表js需要数据采用以下格式:
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
看起来像这样:
x,y
x,y
...
Servlet
和JSP
之间的沟通应该如何?我应该将ResultSet
obejct
发送到JSP并在那里转换它还是应该在Servlet中转换它?
答案 0 :(得分:2)
我至少会将ResultSet
中的数据提取到Collection
(例如List
)并在JSP中使用(使用JSTL)。
但是如果它是一个选项,我会认真考虑完全放弃JSP并重新实现servlet作为REST服务,你可以从客户端的Javascript调用(并直接从servlet返回数据作为JSON)。
编辑:要扩展第二个选项,您可以将数据转换为JSON字符串(手动或使用像Jackson这样的库 - see here for an example),然后将该字符串放在servlet响应中。
然后从Javascript中可以调用servlet。我不知道你正在使用什么框架,但你可以用几行jquery来做(参见jquery.get())
答案 1 :(得分: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或类似意义返回json的http端点,这意味着您实际上不需要自定义servlet。