Tomcat- Servlet 没有打印所有内容

Tomcat- Servlet not printing everything

我有下面的代码,用于在进行 BASIC 身份验证时打印输入的用户名和密码,但是当我将代码修改为 java 程序有效。下面是认证成功后浏览器的输出。

下面还有我使用的Servlet代码。

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Base64;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("This is the Test Servlet");

        Enumeration headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = (String) headerNames.nextElement();
            out.print("<br/>Header Name: <em>" + headerName);
            String headerValue = request.getHeader(headerName);
            out.print("</em>, Header Value: <em>" + headerValue);
            out.println("</em>");
        }
        out.println("<hr/>");
        String authHeader = request.getHeader("authorization");
        out.println("User and Password in Base64 encoding--------------------------->>>" + authHeader);
        //String encodedValue = authHeader.split(" ")[1];
        String encodedValue = authHeader;
        //byte arr[] = Base64.decodeBase64(encodedValue);
        byte[] asBytes = Base64.getDecoder().decode(encodedValue);
        out.println(new String(asBytes, "utf-8")); 
        out.println("Not printing ????");
        out.println("</em>");
    }

}

此行触发问题:

out.println(new String(asBytes, "utf-8")); 

因为String没有这样的构造函数。您可能打算使用 this constructor:

out.println(new String(asBytes,  Charset.forName("UTF-8"))); 

尝试关闭并刷新输出对象。

out.close();
out.flush();

我希望这会在屏幕上打印输出。

您的 servlet 中可能有错误导致执行突然停止。

您在浏览器中看不到漂亮的错误消息的原因 window 是因为您的 servlet 已产生足够的输出来填充内部响应缓冲区,因此缓冲区已被刷新,"committing" 响应(这是一个半技术术语,至少就 servlet 规范而言)。

一旦响应已经"committed"(也就是说,第一个字节已经发送到客户端),你不能改变响应状态码,任何头等,所以没有办法告诉客户有什么东西坏了,而不是破坏页面输出本身。

当事情开始变得有趣时,最好查看日志。