代码如下:
js文件如下://设XMLHttpRequest变量
var XMLHttpReq=false;

//创建一个XMLHttpRequest对象
function createXMLHttpRequest(){
if(window.XMLHttpRequest){ //Mozilla 
XMLHttpReq=new XMLHttpRequest();
}
else if(window.ActiveXObject){
try{
XMLHttpReq=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
    alert("你的浏览器不支持ajax!");
    return false;
}
}
}
}
//发送请求函数
function sendURL(url){
createXMLHttpRequest();
XMLHttpReq.open("POST",url,true);
alert(url);
XMLHttpReq.onreadystatechange=parse;   //指定响应的函数
XMLHttpReq.send(null);  //发送请求
}
function parse(){
if(XMLHttpReq.readyState==4){ //对象状态
if(XMLHttpReq.status==200){//信息已成功返回,开始处理信息
document.getElementById("status").innerHTML=XMLHttpReq.responseText;
}else{
window.alert("所请求的页面有异常");
}
}
}
//身份验证 
function checkUsername(){
var username = document.getElementById("registerName").value;
alert(username);   //这里通过检查能得到中文
if(username == ""){
alert("请输入用户名!");
return false;
} else{
    var url = "/myJava_Item/servlet/XMLHttpRequest?XMLusername="+username ;
sendURL(url);
}
}
Java文件如下:package com.servlet.ajax;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.util.ConnDB;@SuppressWarnings("serial")
public class XMLHttpRequest extends HttpServlet { Connection conn = null ;
Statement stm = null ;
ResultSet rs = null ; public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("gb2312");
System.out.println("XMLusername="+request.getParameter("XMLusername"));  //【这里检查接收到得为乱码!!!】
String XMLusername = request.getParameter("XMLusername");

response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
boolean isValid = true;
try {
conn = ConnDB.getconnDB();
stm = conn.createStatement();
rs = stm.executeQuery("select * from [user] where username='"+XMLusername+"'");//执行SQL语句,如果此用户存在,就返回此用户的信息,且只有一条数据,否则返回空
    if(rs.next()) {
     isValid = false ;
    } else {
     isValid = true ;
    }
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();stm.close();conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(isValid){
out.println("用户名可以使用");
}
else{
out.println("用户名已被注册");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request,response);
} public void init(ServletConfig config) throws ServletException {
// Put your code here
super.init(config);
}}以上为源程序,在Java文件取得用户填写的数据是乱码,一直找不到原因。

解决方案 »

  1.   

    URIEncoding="gb2312"
    Tomcat\conf\server.xml 设置端口那里加上这一句
      

  2.   

    要看你的应用服务器是什么,一般情况下jboss、tomcat会有这个问题,weblogic不会。
    你可以对
    function sendURL(url){
        createXMLHttpRequest();
        XMLHttpReq.open("POST",url,true);
        alert(url);
        XMLHttpReq.onreadystatechange=parse;   //指定响应的函数
        XMLHttpReq.send(null);  //发送请求
    }
    中的url进行编码,使用encodeURIComponent
      

  3.   

    还有就是上楼所说的更改URL的编码了。