0

我在 java 中有一个 web 服务,其方法FindEl(string myel)接受 utf - 8 string paraeter

选择查询应该找到以该字符串开头的所有元素 这是 Java 中的代码 - 用于我的 Web 服务
public class locselall {

public String FindEl(String myel ) throws ClassNotFoundException 
{
//
    String selectQuery = "select biz_subject from pl_biz WHERE biz_subject ILIKE '"+ myel + "%'";
//get rows 
    }

当我在浏览器中输入以测试我的网络服务并选择它时没有问题:

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;
// for example I enter "ШИФ " - utf  8 cahracters
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;

        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 完全相同 - 但来自服务器的响应没有选择任何记录 3


我认为问题在于我的变量 newstr 包含 utf - 8 (cyrilic) 字符并且它没有正确发送到服务器,因此它无法选择任何记录!

我试过的

  1. 添加了带有 charset = utf -8 的元标记

没有什么

  1. 我读到他的问题可能出在我的 tomcat 服务器上,我添加了

server.xml 文件中的 URIEncoding = "utf-8"

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding="UTF-8"/>

依然没有

提前致谢

4

1 回答 1

1

尝试encodeURIComponent在发送的 URL 上使用。我似乎记得以前看到过这个问题,它适用于拉丁字母字符,但西里尔字母失败了。

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