Servlet和JSP通信的最佳方式

时间:2015-11-26 14:41:45

标签: java html jsp servlets epoch.js

以下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

...

ServletJSP之间的沟通应该如何?我应该将ResultSet obejct发送到JSP并在那里转换它还是应该在Servlet中转换它?

2 个答案:

答案 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。