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

Java 为什么我要使用servlet下载一个没有扩展名的文件?,java,tomcat,servlets,ascii,Java,Tomcat,Servlets,Ascii,当我转到servlet时,我正在下载一个没有扩展名的文件 这是doGet方法的代码(这些只是测试行,不要太认真): 我检查了所有的行,一行一行地移除它们,我发现在这行: pw.write(11); 这就是11是一个用户id,为了避免每次都检索那个id,我刚刚写了11。servlet开始时不显示页面,而是下载不带扩展名的文件 我检查了ASCII表中的垂直选项卡是否保留了11号。为什么ASCII表中的11代码使浏览器不显示而是下载文件 这就是这个文件的内容: 为什么我要使用servlet下载一

当我转到servlet时,我正在下载一个没有扩展名的文件

这是doGet方法的代码(这些只是测试行,不要太认真):

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

 pw.write(11);
这就是11是一个用户id,为了避免每次都检索那个id,我刚刚写了11。servlet开始时不显示页面,而是下载不带扩展名的文件

我检查了ASCII表中的垂直选项卡是否保留了11号。为什么ASCII表中的11代码使浏览器不显示而是下载文件

这就是这个文件的内容:

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

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

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

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

或者您喜欢的任何内容类型(文本/纯文本也可以用于您正在做的事情)

另见:


我不理解这一点,但为什么当我键入其他字符串时,显示它没有任何问题?我的意思是,当我向printstream键入内容时,除了第11个数字,浏览器默认显示为html/文本,因此我不需要指定内容类型,但是当第11个数字出现时,它不想显示它,只想下载一些没有扩展名的文件,在该文件中有两个括号代表11个数字,你能告诉我html文档中的meta标记吗?我的意思是,如果总是html文档,那么将内容类型设置为html文档的目的是什么,我的意思是,我们在响应对象中指定内容类型,这样浏览器将获得包含该信息的内容类型标题,但在html文件中,我们使用http equiv属性编写元标记,并将内容类型设置为另一种类型会发生什么,它只在文件是html的情况下起作用,这样浏览器就可以取消该元标记,但这一切的目的是什么?我的意思是,如果文件是html,浏览器只能取消该元标记,所以响应头必须设置为text/html,但在文件中,我们将元标记属性值设置为另一种内容类型,这样做的目的是什么谢谢你的回答这些都是告诉浏览器如何解释响应的机制。如果没有它们,浏览器将进行猜测,这有时可能是错误的。对于第一个问题,垂直选项卡是ASCII中的一个控制字符,因此它不是可打印文本中所期望的。因此,浏览器可能会遇到它,并猜测内容是二进制的。对于其他控件字符,结果可能是相同的,而不仅仅是垂直制表符。关于你的第二个问题,请看这个
try {
    PrintWriter pw = response.getWriter();
    ....
try {
    response.setContentType("text/html")
    PrintWriter pw = response.getWriter();
    ....