我有下面的代码,用于在进行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>");
}
}
答案 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; (也就是说,第一个字节已经发送到客户端),你不能改变响应状态代码,任何标题等等,所以没有办法告诉客户端有什么东西坏了,除了破坏页面输出本身。
当事情开始变得有趣时,总是最好看一下日志。