为什么我要使用 servlet 下载没有扩展名的文件?

Why am I downloading a file with no extension using servlet?

我在访问 servlet 时正在下载没有扩展名的文件

这是doGet方法的代码(这些只是测试线,不要当真):

try {
        PrintWriter pw = response.getWriter();
        pw.write("test");
        pw.println(request.getParameter("a"));
        DAOFactory m = DAOFactory.getDAOFactory(1);
        Connection conForTests = MySQLDAOFactory.getConnection();
        UserDao s = m.getUserDao();
        boolean check  = s.validateUser("test1","test1",conForTests);
        pw.write(String.valueOf(check));
        User user = s.findUser("test1",conForTests);
        int id = user.getUserId();
        pw.write(11);

    } catch (SQLException|IOException  sqlException) {
        System.out.println("asdsad");
        sqlException.printStackTrace();
    }

    System.out.println("asdsad");
}

我逐行检查了所有删除它们的行,我发现在这一行:

 pw.write(11);

那 11 是一个用户 ID,所以为了不每次都检索该 ID,我刚刚写了 11。servlet 开始时不显示页面,而是下载没有扩展名的文件。

我检查了 11 个数字用于 ASCII 中的垂直制表符 table。为什么 ASCII table 中的 11 代码使浏览器无法显示但正在下载文件?

这就是这个文件的内容:

Why am I downloading a file with no extension using servlet?

因为您刚刚打开了一个响应流并开始写入其中。通俗地说,您只是将一些字节发送回浏览器,但浏览器不知道字节是什么。是html吗?是纯文本吗?是图像吗?还有其他事情吗?

因此在开始编写响应之前,您需要通过设置内容类型来说明该响应是什么。替换你的这段代码:

try {
    PrintWriter pw = response.getWriter();
    ....

与:

try {
    response.setContentType("text/html")
    PrintWriter pw = response.getWriter();
    ....

或您喜欢的任何内容类型(text/plain 也适用于您正在做的事情)。

另请参阅:

  • what is the use of "response.setContentType("text/html")" in servlet