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

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

当我转到servlet时,我正在下载一个没有扩展名的文件
这是doget方法的代码(这些只是测试行,不要太认真):

  1. try {
  2. PrintWriter pw = response.getWriter();
  3. pw.write("test");
  4. pw.println(request.getParameter("a"));
  5. DAOFactory m = DAOFactory.getDAOFactory(1);
  6. Connection conForTests = MySQLDAOFactory.getConnection();
  7. UserDao s = m.getUserDao();
  8. boolean check = s.validateUser("test1","test1",conForTests);
  9. pw.write(String.valueOf(check));
  10. User user = s.findUser("test1",conForTests);
  11. int id = user.getUserId();
  12. pw.write(11);
  13. } catch (SQLException|IOException sqlException) {
  14. System.out.println("asdsad");
  15. sqlException.printStackTrace();
  16. }
  17. System.out.println("asdsad");
  18. }

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

  1. pw.write(11);

11是一个用户id,为了避免每次都检索到该id,我刚刚编写了11。servlet开始不显示页面,而是下载一个没有扩展名的文件。
我检查了ascii表中的垂直选项卡是否保留了11号。为什么ascii表中的11代码使浏览器不显示而是下载文件?
这就是这个文件的内容:

lzfw57am

lzfw57am1#

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

  1. try {
  2. PrintWriter pw = response.getWriter();
  3. ....

与:

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

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

展开查看全部

相关问题