为什么我得到带有额外字符的responseText(通过Ajax从Servlet到javaScript)?

为什么我得到带有额外字符的responseText(通过Ajax从Servlet到javaScript)?,javascript,ajax,servlets,Javascript,Ajax,Servlets,我在一个项目中工作。在其中,我尝试从使用以下代码创建的会话中获取用户名:- GetCurrentUserInfo.java package servlet; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.Vector; import javax.servlet.ServletConfig; import javax.ser

我在一个项目中工作。在其中,我尝试从使用以下代码创建的会话中获取用户名:-

GetCurrentUserInfo.java

package servlet;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Vector;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetCurrentUserInfo extends HttpServlet
{

    ServletContext contx = null;
    public void init(ServletConfig config) throws ServletException
    {
        contx = config.getServletContext();
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        try
        {
            OutputStream outer = res.getOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(outer);
            String userName = (String) req.getSession().getAttribute("username");
            oos.writeChars(userName);
            oos.flush();
            oos.close();
        }

        catch (Throwable e)
        {
            e.printStackTrace();

        }
    }
}
调用.js

 function getUserInfo()
 {
     var userInfoHttp;
     if (window.XMLHttpRequest)
     {
         userInfoHttp = new XMLHttpRequest()
     }
     else if (window.ActiveXObject)
     {
         userInfoHttp = new ActiveXObject("Microsoft.XMLHTTP")
     }
     userInfoHttp.open("POST", "GetCurrentUserInfo", false);
     userInfoHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     userInfoHttp.onreadystatechange = function ()
     {
         if (userInfoHttp.readyState == 4)
         {
             if (userInfoHttp.status == 200)
             {
                 var res = TrimString(userInfoHttp.responseText);
                 alert(res);
             }
         }
     }
     userInfoHttp.send(null);
     isAnnotationUpdate = false;

 }
我想我得到的用户名中有一些额外的字符,如:���W�s�@�s�.�C�o�m“
实际上,我的用户名是s@s.com只有。

我认为有两件事可以解决您的编码问题

首先使用OutputStreamWriter并为其指定编码值

OutputStream stream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
String userName=(String)req.getSession().getAttribute("username");
writer.write(userName);
writer.flush();
然后确保您的响应具有正确的编码

response.setCharacterEncoding("UTF-8");
相关文章:

更新

还有一件事我在最初的回答中忘了。将响应对象的ContentyOe设置为text/plain,因为实际上返回的是纯文本字符

response.setContentType("text/plain");

我认为有两件事可以解决您的编码问题

首先使用OutputStreamWriter并为其指定编码值

OutputStream stream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
String userName=(String)req.getSession().getAttribute("username");
writer.write(userName);
writer.flush();
然后确保您的响应具有正确的编码

response.setCharacterEncoding("UTF-8");
相关文章:

更新

还有一件事我在最初的回答中忘了。将响应对象的ContentyOe设置为text/plain,因为实际上返回的是纯文本字符

response.setContentType("text/plain");