Java问题记录

错误记录

  • 1. Java一个对象多次调用set方法
  • 2. Response对象进行页面跳转没有效果
  • 3. 上传文件提示“文件名、目录名或卷标语法不正确”
  • 4. 下载文件大体步骤以及出现乱码解决

1. Java一个对象多次调用set方法

Java中创建一个对象object,并用List对象list的add方法保存object。
object再次调用set方法,list再次添加后会发现之前添加的内容和第二次set内容相同,第一次set的对象被覆盖了。
这是因为内存只创建了一次object对象,之后每次set并add,之前的object对象也会被更新。
因此当在写代码时,当在循环内部object调用set方法,list添加object对象时要在循环内创建object对象。这样的object在内存中并不是独一份了。

2. Response对象进行页面跳转没有效果

if(pageEntity==null){
        System.out.println("请求顺序出错,请先访问当前项目下/ThreeTierArchitectureJSP/QueryStudentByPage");
        response.sendRedirect("QueryStudentByPage");
    }

判断pageEntity为空时,使页面用response对象进行页面跳转时发现,不管怎么改 response.sendRedirect(“QueryStudentByPage”);中的url对象都不会跳转,进而执行后面代码造成对pageEntity这个空对象的操作。原来是在判断语句末尾没加return。如下就好了

  if(pageEntity==null){
        System.out.println("请求顺序出错,请先访问当前项目下/ThreeTierArchitectureJSP/QueryStudentByPage");
        response.sendRedirect("QueryStudentByPage");
        return;
    }

3. 上传文件提示“文件名、目录名或卷标语法不正确”

我在代码中使用了 FileItem.getName方法,获取上传文件的名字。

 String fileName = fileItem.getName();

但是后端的在调用getName方法时,不同浏览器返回给后端的文件名也不尽相同,分为带绝对路径的文件名和不带绝对路径的文件名这两种。所以可能存在在A浏览器可以上传成功,但是到B就报错这种情况。自己测试过上传的浏览器Microsoft Edge(带绝对路径的文件名),Chrome(不带绝对路径的文件名)。
如何做到万无一失,每个浏览器都可以上传呢?可以通过subString的方法截取字符串获取不带绝对路径的文件名

      fileName=fileName.substring(fileName.lastIndexOf("\\")+1);

4. 下载文件大体步骤以及出现乱码解决

实现下载文件的话,doGet方法内先给response设置响应头

resp.addHeader("content-Type","application/octet-stream");
resp.addHeader("content-Disposition","attachment;fileName="+ fileName);

先使用getServletContext().getResourceAsStream()方法获得文件输入流

InputStream inputStream = getServletContext().getResourceAsStream(fileFatherPath+fileName);

再通过resp.getOutputStream()获得对用户响应的输出流后

ServletOutputStream servletOutputStream = resp.getOutputStream();

之后把 inputStream 内读到的内容写入到 servletOutputStream 里就完成了下载。
之后会发现下载中文文件会出现和实际文件名字不完全相同的现象,比如下载图片 “杨超越.jpg”,下载提示文件名却是 _.jpg_ 这样,这时对文件名设置响应编码格式就好了(不同浏览器内核设置方式不尽相同,此方法支持浏览器Microsoft Edge, Chrome)

resp.addHeader("content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName,"utf-8"));

你可能感兴趣的:(Java)