Tomcat- Servlet不能打印所有内容

时间:2015-09-23 06:43:52

标签: java tomcat servlets web-applications

我有下面的代码,用于在进行BASIC身份验证时打印输入的用户名和密码,但是当我尝试在将代码修改为java程序后在本地运行时,它是如何打印它的。以下是成功验证后浏览器中的输出。

Output Snapshot

下面是我使用的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>");
    }

}

3 个答案:

答案 0 :(得分:1)

问题是在这一行上触发的:

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

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

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

答案 1 :(得分:0)

尝试关闭并冲洗掉对象。

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

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

答案 2 :(得分:0)

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

您在浏览器窗口中看不到错误消息的原因是因为您的servlet已生成足够的输出以填充内部响应缓冲区,因此缓冲区已被刷新,&#34;提交&#34 ;响应(这是一个半技术术语,至少就servlet规范而言)。

一旦响应已经“#34;承诺&#34; (也就是说,第一个字节已经发送到客户端),你不能改变响应状态代码,任何标题等等,所以没有办法告诉客户端有什么东西坏了,除了破坏页面输出本身。

当事情开始变得有趣时,总是最好看一下日志。