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

z2acfund  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(354)

当我转到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开始不显示页面,而是下载一个没有扩展名的文件。
我检查了ascii表中的垂直选项卡是否保留了11号。为什么ascii表中的11代码使浏览器不显示而是下载文件?
这就是这个文件的内容:

lzfw57am

lzfw57am1#

为什么我要使用servlet下载一个没有扩展名的文件?
因为您刚刚打开了一个响应流并开始写入它。在俗语中,您只是将一些字节发送回浏览器,但浏览器不知道字节是什么。是html吗?是纯文本吗?这是图像吗?还有别的事吗?
因此,在开始编写响应之前,您需要通过设置内容类型来说明该响应是什么。替换您的此代码:

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

与:

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

或任何您喜欢的内容类型(a) text/plain 也可以为您正在做的事情工作)。
另见:
servlet中“response.setcontenttype(“text/html”)的用法是什么
java—servlet的默认内容类型

相关问题