关于用ajax进行中文验证出现乱码的问题!

I_am_a_Beginner 2015-11-14 06:11:28
这是我的代码!
html的代码
<html>
<head>
<title></title>
<script type="text/javascript">
var xmlHttp ;
var flag = false ;
function createXMLHttp(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest() ;
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
}
}
function checkUserid(username){

createXMLHttp() ;
xmlHttp.open("POST","/javaee_bookcase1/CheckServlet?username="+username) ;
xmlHttp.onreadystatechange = checkUseridCallback ;
xmlHttp.send(null) ;
document.getElementById("msg").innerHTML = "正在验证..." ;
}
function checkUseridCallback(){

if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
var text = xmlHttp.responseText ;

if(text == "true"){ // 用户id已经存在了
document.getElementById("msg").innerHTML = "用户ID重复,无法使用!" ;
flag = false ;
} else {
document.getElementById("msg").innerHTML = "此用户ID可以注册!" ;
flag = true ;
}
}
}
}
function checkForm(){
return flag ;
}
</script>
</head>
<body>
<form action="regist.jsp" method="post" onsubmit="return checkForm()">
用户ID:<input type="text" name="username" onblur="checkUserid(this.value)"><span id="msg"></span><br>
姓  名:<input type="text" name="name"><br>
密  码:<input type="password" name="password"><br>
<input type="submit" value="注册">
<input type="reset" value="重置">
</form>
</body>
</html>

servlet的代码
package servlet ;
import java.sql.* ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class CheckServlet extends HttpServlet{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/blog" ;
public static final String DBUSER = "root" ;
public static final String DBPASS = "admin" ;
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
request.setCharacterEncoding("utf-8") ;
String username=request.getParameter("username");
System.out.println(username);
response.setContentType("text/html") ;
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
PrintWriter out = response.getWriter() ;

try{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "SELECT COUNT(username) FROM user WHERE username=?" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,username) ;
rs = pstmt.executeQuery() ;
if(rs.next()){
System.out.println(rs.getInt(1));
if(rs.getInt(1)>0){
out.print("true") ;
} else {
out.print("false") ;
}
}
}catch(Exception e){
e.printStackTrace() ;
}finally{
try{
conn.close() ;
}catch(Exception e){}
}
}
}

xml的代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>hello4</servlet-name>
<servlet-class>servlet.CheckServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello4</servlet-name>
<url-pattern>/CheckServlet</url-pattern>
</servlet-mapping>
</web-app>

问题如下:
1、我的html和servlet这两个页面的编码方式都是utf-8,为什么从HTML页面转进servlet页面的中文,怎么变成了乱码了??
2、怎么才不会出现乱码了??
(请有办法的朋友,试一下我粘贴出来的代码,怎么才能解决乱码的问题!!)
...全文
378 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
star_xing1 2015-11-19
  • 打赏
  • 举报
回复
js 代码:url=encodeURI(url);注意是整个URL 服务器端的代码:String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
梁志伟2 2015-11-17
  • 打赏
  • 举报
回复
应该是版本问题
qq_27379693 2015-11-17
  • 打赏
  • 举报
回复
原生态 AJAX代码 好像少东西了 GET方式 和POST方式 不同
boboSir 2015-11-17
  • 打赏
  • 举报
回复
xmlHttp.open(......) //加下面这一行能解决你的问题 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); ..... 至于jquery里的ajax请求,是没有charset=utf-8,加上后,你就不会有这些乱七八糟的转码问题了
Cry_King 2015-11-17
  • 打赏
  • 举报
回复
1.首先确定页面和数据库编码以及ajax传输数据是否格式一直 2.尝试把post改为get方式提交 3.new String(request.getParameter( "firstName" ).getBytes( "ISO8859-1" ));进行转码 4.尝试在js encode转码 5.修改拦截器 统一拦截ajax 进行转码
wang1hong2lu3 2015-11-17
  • 打赏
  • 举报
回复
  xmlHttp.open("POST","/javaee_bookcase1/CheckServlet?username="+username)  是这里的问题 你把username放上那就不是 post请求了 是get方式了
_南天北落 2015-11-17
  • 打赏
  • 举报
回复
引用 22 楼 u013495423 的回复:
要是跟MySQL有关的话,可以试试改这个: public static final String DBURL = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8" ;
这个还没到数据库是 页面到action
  • 打赏
  • 举报
回复
要是跟MySQL有关的话,可以试试改这个: public static final String DBURL = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8" ;
三目君 2015-11-17
  • 打赏
  • 举报
回复
在tomcat 的配置目录 conf 下,修改server.xml文件,找到
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
加入 URIEncoding="UTF-8" 。tomcat 默认是 ISO-8851-1
_南天北落 2015-11-17
  • 打赏
  • 举报
回复
1. 看页面的编码方式是不是UTF-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 2. 确认后台的编码方式是不是UTF-8,如果是的话就改一下 tomcat编码方式 3. 改了tomcat中的server.xml不行,确定了servlet、页面是统一风格的编码还是不行的话,那你就转化字符吧。
兮小仙 2015-11-17
  • 打赏
  • 举报
回复
ajax传值到后台,中文乱码,使用encodeURI编码两次传递到后台,在后台解码两次
javaliu1 2015-11-17
  • 打赏
  • 举报
回复
前面刚刚说错了 试试这样 new String(request.getParameter( "firstName" ).getBytes( "ISO8859-1" ));utf-8 轮流着换,再不行 看下接受的是什么编码格式在进行相应的转换
javaliu1 2015-11-17
  • 打赏
  • 举报
回复
设置response的编码格式 response.setContentType("text/xml" ); response.setCharacterEncoding("GBK" );
I_am_a_Beginner 2015-11-16
  • 打赏
  • 举报
回复
引用 12 楼 yanghaimingg 的回复:
tomcat设置统一编码为UTF-8
我就是把tomcat设置统一编码为UTF-8了,但是还是不行喔,还有其他方法吗?
mtian2020 2015-11-16
  • 打赏
  • 举报
回复
tomcat设置统一编码为UTF-8
  • 打赏
  • 举报
回复
sinat_31535993 2015-11-16
  • 打赏
  • 举报
回复
原生ajax的POST请求不是这么写的 你写的那种是GET请求当然会乱码,后台手动转码吧
mtian2020 2015-11-16
  • 打赏
  • 举报
回复
jsp head标签中加入<%@ page contentType="text/html;charset=utf-8"%> 试试
xwt799023 2015-11-15
  • 打赏
  • 举报
回复
编码问题,仔细查查吧
Hydra_Greed 2015-11-15
  • 打赏
  • 举报
回复
引用 5 楼 I_am_a_Beginner 的回复:
[quote=引用 2 楼 Hydra_Greed 的回复:] String oldName = request.getParameter ("username"); Byte[] nameByte = oldName.getByte("ISO-8851-1"); String username = new String(nameByte,"UTF-8");
你的做法我试过,但是还是出现乱码了!还有其他方法吗??(建议用我的代码试一下!)[/quote] Byte[] nameByte = oldName.getBytes("ISO-8859-1");写对没有 如果不行的话 String oldName=request.getParameter("username"); Byte[] nameByte = oldName.getBytes("GBK"); String username = new String(nameByte,"UTF-8");再试一次 如果再不行的话......
加载更多回复(7)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧