0

クライアント側のHTMLページに入力された3文字で始まるすべての要素を大きなデータベースで見つけようとするWebサービスがあります。

これが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 に答える