Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 还有什么更好的方法可以发送响应并在表结构中打印数据?_Java_Jquery_Ajax_Json_Servlets - Fatal编程技术网

Java 还有什么更好的方法可以发送响应并在表结构中打印数据?

Java 还有什么更好的方法可以发送响应并在表结构中打印数据?,java,jquery,ajax,json,servlets,Java,Jquery,Ajax,Json,Servlets,我是ajax新手,我正在进行ajax调用,它将命中servlet,它使用out.println获取数据并将数据打印到jsp。它工作得很好,但我觉得这不是个好办法。这是我的代码 Ajax调用 xmlHttpReq.open'GET',RTMonitor?rtype=groups&groupname=+temp,true 在RTMonitorServlet中 sql ="SELECT a.vehicleno,a.lat,a.lng,a.status,a.rdate,a.rtime from latl

我是ajax新手,我正在进行ajax调用,它将命中servlet,它使用out.println获取数据并将数据打印到jsp。它工作得很好,但我觉得这不是个好办法。这是我的代码

Ajax调用

xmlHttpReq.open'GET',RTMonitor?rtype=groups&groupname=+temp,true

在RTMonitorServlet中

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>"+"&nbsp"+"&nbsp"+resultSet.getString("vehicleno")+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"&nbsp"+"<br>"+"<br>"+"</td>"+);
//other <td>s

}

我认为这不是一个好办法。所以我考虑将响应作为JSON对象返回。告诉我如何将对象作为JSON返回并在中设置值。告诉我JSON是一种很好的方式,或者有没有其他方式请建议我

对象到JSON的转换有疑问:

其他事项:

你的SQL是不安全的!请参考以下问题,该问题解释了准备好的陈述,并提供了示例: 一般来说,除非您打算学习一些东西,否则您不应该自己编写低级AJAX代码。有许多跨浏览器运行的Javascript库以健壮的方式提供这些功能,例如。JQuery的API具有getJSON,您无疑会发现它非常有用:


您应该尽量避免将服务器端代码与客户端代码混用。 您的客户端代码应该只通过操作服务器提供的数据来提供一个漂亮而丰富的用户界面。服务器端代码应该只处理来自不同调用的数据,或者来自存储(通常是数据库)的数据

通常,客户端和服务器之间的通信是异步的还是非异步的:

客户端向服务器发送请求 服务器处理请求并给出响应,通常是一些html或json/xml 客户端处理来自服务器的响应 好的,现在让我们把注意力转移到你的具体问题上

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);
        }
    }
}

这些肯定不是一个好主意!你可以用你的朋友是数据表。检查它是否有各种示例如何使用it@Daniel是的,你知道其他的方法吗。检查这个jquery插件:好的,我会试试这个,这是一个什么。暂时忽略它,将该行更改为e.printStackTrace;。我不太明白你所说的更多数据是什么意思,但有些情况下你必须处理大量数据。如果您认为sql查询将加载太多行,可以通过添加limit来限制要加载的行数。这通常与UI分页相对应。@Daniel这种PreparedStatement的使用不会阻止SQL注入。此代码与原始代码一样易受攻击。@Daniel k。。。那么,通过JSon发送数据是没有限制的,对吗?因为有时我的查询可能会返回许多行。
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);
        }
    }
}
List<YourObject> list = loadObjectsBySomeLogic();
String json = new Gson().toJson(list);
response.setContentType("application/json"); 
response.setCharacterEncoding("UTF-8"); 
response.getWriter().write(json);
$.get('RTMonitor', function(responseJson) {    
    //handle your json response by rendering it using html + css.           
});