2011-10-03 100 views
0

我从JSP中的数据库查询生成JSON字符串,但它始终有不可打印的字符,我不明白为什么!为什么我的json字符串中有28个不可打印的字符?

的JSP生产JSON低于:

String user = "username"; // set a username 
    String password = "password"; // set a password 
    Class.forName("org.firebirdsql.jdbc.FBDriver"); // JDBC for firebird a.k.a. Jaybird 
    String DB = "jdbc:firebirdsql://123.123.123.123:3050/C:\\db.fdb"; 

    JSONArray obj=new JSONArray(); //Creating the json object 

    Connection connection = DriverManager.getConnection(DB, user, password);    
    Statement statement = connection.createStatement(); 

    int i=0; 
    Class.forName("org.firebirdsql.jdbc.FBDriver"); // JDBC for firebird a.k.a. Jaybird 
    String query = "SELECT ses.sessionid, ses.datetime, ses.guid, ses.staffid FROM session ses ORDER by ses.datetime"; 
    ResultSet resultset = statement.executeQuery(query); 

    while (resultset.next()) 
    { 
    JSONObject j = new JSONObject(); 
    j.put("SessionID", resultset.getString("sessionid")); 
    j.put("DateTime", resultset.getString("datetime")); 
    j.put("GUID", resultset.getString("guid")); 
    j.put("StaffID", resultset.getString("staffid")); 
    obj.add(i, j); 
    i++; // Counter for indexing the JSONArray 
    } 

    resultset.close(); 
    statement.close(); 
    connection.close(); 

这是我使用PHP中显示的代码:

echo '*'.$json.'*<br>'; 
    echo strlen($json).'<br>'; 
    $json = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json); 
    echo '*'.$json.'*<br>'; 
    echo strlen($json).'<br>'; 

其示出了:

* [{"SessionID":"850","DateTime":"2011-10-03 14:21:37.0","GUID":"51e71c19-ca13-4053-bd95-2addb5ba69f6","StaffID":"804"}] * 
146 
*[{"SessionID":"850","DateTime":"2011-10-03 14:21:37.0","GUID":"51e71c19-ca13-4053-bd95-2addb5ba69f6","StaffID":"804"}]* 
118 

所以28个不可打印字符的区别 - 主要是在开始时。他们如何到达那里,如何在JSP中摆脱它们?

谢谢

回答

1

因为JSP是作为HTTP响应的视图技术的一部分。除<% %>之外的所有内容都会发送到响应中,包括空格和换行符(右键单击由PHP生成的HTML页面,执行查看源代码,您也将亲自看到这些换行符,它们是您认为“不可打印“字符)。

删除<% %>之外的任何空格和换行符,或者更好地使用servlet来代替。你可以在How to use Servlets and Ajax?

+0

的回答中找到JSON生成Servlet的一些启动示例。没有太多空白,大部分来自我无法控制的“@page import”。是一个servlet的唯一方式,因为这意味着重写我的所有代码。 – williamsdb

+0

只需删除'%>'和'<%'之间的任何空格,包括换行符。你不需要重写所有的代码。只需复制到'doGet()'方法就行了。你只需要自己准备''出''response.getWriter()'。无论如何,将Java代码写入JSP文件而不是Java类是一个不好的做法。永远不要那样做。另见http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files – BalusC

相关问题