0

我有一个 Web 服务,它尝试在一个大数据库中查找以在客户端 html 页面中输入的这三个字母开头的所有元素:

这是 Java 中的代码 - 用于我的 Web 服务

public class locselall 
{



public String FindEl(String myel ) throws ClassNotFoundException 
{

    String strXml = "<response>";

    Class.forName("org.postgresql.Driver");
    try 
    {
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/plovdivbizloca", "postgres", "tan");
    }

    catch (SQLException ex) 
    {

        ex.printStackTrace();
    }


    Statement mystmt = null;
    String selectQuery = "select biz_subject from pl_biz WHERE biz_subject ILIKE '"+ myel + "%'";

    try {
        mystmt = conn.createStatement();
        ResultSet mysr = mystmt.executeQuery(selectQuery);
        ResultSetMetaData rsmd = mysr.getMetaData();
        int colCount = rsmd.getColumnCount();
        int numberrow = 0;
        strXml += "<rows>";

        while (mysr.next()) 
        {
            strXml += "<row id= '" + numberrow + "'>";
            for (int i = 1; i <= colCount; i++) 
            {
                String elementname = rsmd.getColumnName(i);
                String elementValue = mysr.getString(i);
                strXml += "<colunm colname='" + elementname
                        + "' colvalue='" + elementValue + "'/>";
            }
            numberrow++;
            strXml += "</row>";
        }
        strXml += "</rows>";

    } 
    catch (Exception ex) 
    {

    }
    strXml += "</response>";

    return strXml;
}

}

当我在浏览器中输入时没有问题

http://localhost:9091/locselall/services/locselall/FindEl?myel=СИТ

一切正常;


这是客户端的html页面

<html>
<head>
<script>

var xmlhttp;
    if (window.XMLHttpRequest) 
    {
        xmlhttp = new XMLHttpRequest();
    } 
    else 
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
function triming()
{

var strInput= document.getElementById('txtInput').value;
//var newstr = strInput.replace(/[\p{L}]/gi, '');
var newstr = strInput.replace(/[^\u0400-\u04FF0-9]/gi, '');

         xmlhttp.onreadystatechange = function() 
        { 
            if (xmlhttp.readyState==4 && xmlhttp.status==200) 
            {
                alert(xmlhttp.responseText);
                //var xmlObj = xmlhttp.responseXML;   
                //var textXML = xmlObj.documentElement.firstChild.firstChild.nodeValue;





            }

        }


        var url = "http://localhost:9091/locselall/services/locselall/FindEl?myel="+ newstr;
        alert (url);

        document.getElementById('pr').innerHTML = url;

        xmlhttp.open("GET", url, true);
        xmlhttp.send(); 





}

</script>

</head>
<body>
<input type= "text" id="txtInput"   />
<input type="button" id="btnSearch" onClick = "triming();"/>
<div id="pr"></div>



</body>
</html>

如您所见,我有一个关于 url 的警报,它与我在浏览器中输入以测试我的 web 服务的 url 完全相同 - 但这次我没有得到任何记录;服务器只返回,这意味着当它到达要选择的语句时,它不能被执行

我认为问题在于我的变量 newstr 应该包含 utf - 8 元素并且它没有正确发送到服务器。结果它无法选择任何记录!

提前致谢

4

1 回答 1

0

好吧,问题是,当你http://localhost:9091/locselall/services/locselall/FindEl?myel=СИТ在 Chrome 等浏览器中访问 url 时,它实际上会向这个 URL 发出请求:

http://localhost:9091/locselall/services/locselall/FindEl?myel=%D0%A1%D0%98%D0%A2

为确保这也发生在代码中,您必须使用encodeURIComponent

var url = "http://localhost:9091/locselall/services/locselall/FindEl?myel="+ 
          encodeURIComponent(newstr);
于 2013-02-03T12:50:19.583 回答