我是ajax的新用户,我正在进行ajax调用,它会点击servlet
,它会使用out.println()
获取数据并将数据打印到jsp。它工作正常,但我觉得它不是很好的方式。这是我的编码,
Ajax调用,
xmlHttpReq.open('GET', "RTMonitor?rtype=groups&groupname="+temp, true);
在RTMonitor servlet中,
sql ="SELECT a.vehicleno,a.lat,a.lng,a.status,a.rdate,a.rtime from latlng a,vehicle_details b where a.vehicleno=b.vehicleno and b.clientid="+clientid +" and b.groupid in(select groupid from group_details where groupname='"+gname+"' and clientid='"+clientid+"')";
resultSet = statement.executeQuery(sql);
while(resultSet.next())
{
response.setContentType("text/html");
out.println("<tr>"+
"<td>"+" "+" "+resultSet.getString("vehicleno")+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+" "+"<br>"+"<br>"+"</td>"+);
//other <td>s
}
我认为这不是好方法。所以我认为将响应作为JSON
对象返回。告诉我如何将对象作为JSON返回并在<td>
中设置值。并告诉我JSON是一个好方法,或者有任何其他方式请建议我。
答案 0 :(得分:0)
对JSON转换的对象的解释如下:Converting Java Object to Json using Marshaller
其他事项:
一般情况下,除非您的目标是学习,否则不应自行编写低级AJAX代码。有许多跨浏览器运行的Javascript库以健壮的方式提供这些东西,例如JQuery。 JQuery的API有 getJSON ,你无疑会发现它非常有用(API doc):
var params = {myObjectId: 1337}; // just some parameters
$.getJSON( "myUrl/myAjaxAction", params, function( data ) { /* this is the success handler*/
alert(data.myObject.name); // assuming that returned data (JSON) is: {myObject: {name: 'Hello World!'}}
});
答案 1 :(得分:-1)
您应尽量避免将服务器端代码与客户端代码混合在一起。 您的客户端代码应该只提供一个漂亮而丰富的用户界面,通过操纵服务器提供的数据。服务器端代码应该只处理来自不同调用的数据,或者来自存储(通常是数据库)的数据。
通常来自客户端和服务器的通信(异步或非通信)是这样的:
好的,现在让我们将注意力转移到您的具体问题上。
你的ajax调用:xmlHttpReq.open('GET', "RTMonitor?rtype=groups&groupname="+temp, true);
应该将请求发送到servlet并期望一些数据返回处理并以一种很好的方式呈现给用户。您的servlet应该通过查询数据库来处理请求(您应该更改代码,以便它使用预准备语句,因为它们阻止了SQL注入)。通过这样做,您可以将客户端代码与服务器端代码分开。
private List<YourObject> loadObjectsBySomeLogic() throws SQLException{
String sql ="SELECT a.vehicleno,a.lat,a.lng,a.status,a.rdate,a.rtime FROM latlng a,vehicle_details b WHERE a.vehicleno=b.vehicleno AND b.clientid= ? AND b.groupid in(select groupid from group_details where groupname= ? and clientid= ?)";
List<YourObject> list = new ArrayList<YourObject>();//new ArrayList<>(); for Java versions > 1.7
PreparedStatement ps = null;
ResultSet rs = null;
try{
ps = connection.prepareStatement(sql);
ps.setLong(1, clientId);
ps.setString(2, gname);
ps.setLong(3, clientId);
rs = ps.executeQuery();
while(rs .next())
{
//load data from ResultSet into an object/list of objects
}
}finally{
closeResources(rs , ps);
}
return list;
}
private static final void closeResources(final ResultSet rs , final PreparedStatement ps){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
//nasty rs. log the exception?
LOGGER.error("Could not close the ResultSet!" , e);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
//nasty ps. log the exception?
LOGGER.error("Could not close the PreparedStatement!" , e);
}
}
}
您可以将此方法委托给另一个处理业务/应用程序域逻辑的对象,但在这种情况下,这不是我们的观点。
您可以使用Json作为数据格式,因为它有一种很好且易于理解的格式化数据的方式,并且与XML相比它更轻量级。您可以使用任何Java库将数据编码为Json。我将提供一个使用Gson库的示例。
List<YourObject> list = loadObjectsBySomeLogic();
String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
现在你的Ajax请求应该处理来自服务器的Json数据(我建议你使用jQuery进行Ajax调用,因为它已经过测试,并且在所有主流浏览器上运行良好)。
$.get('RTMonitor', function(responseJson) {
//handle your json response by rendering it using html + css.
});