gpt4 book ai didi

javascript - 为什么我会收到带有额外字符的响应文本(从 Servlet 到 javaScript,通过 Ajax)?

转载 作者:行者123 更新时间:2023-11-30 06:39:53 25 4
gpt4 key购买 nike

我正在做一个项目。我在其中尝试从使用以下代码创建的 session 中获取用户名:-

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");

相关文章:Unexpected character when downloading file client side from a servlet

更新

还有一些我在原始答案中忘记的东西。将响应对象的 ContentTyoe 设置为 text/plain 因为您实际上返回的是纯文本字符

response.setContentType("text/plain");

关于javascript - 为什么我会收到带有额外字符的响应文本(从 Servlet 到 javaScript,通过 Ajax)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12243263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com