Java EE实现模拟一个资源管理器

来源:互联网 发布:淘宝美工装修 编辑:程序博客网 时间:2024/06/04 19:24

进项目组,经理给培训。

            任务描述:使用Java和JSP作出一个模拟资源管理器的东西,点击指定文件,文件则下载,文件夹则进入下一级目录。

            遇到问题:1、使用哪种方式实现点击进入首个文件夹。

       思路1:吧文件目录结构做成一颗树,读到内存中,然后在页面逐级显示。但是貌似工程量有点大,所以果断放弃。

       思路2:直接使用JavaAPI中File类,在浏览器端显示每个文件名(使用Java内嵌代码或者EL表达式JSTL标签均可,建议EL表达式或者JSTL,因为使用Java内嵌代码报错很难找虽然),读取每个child(比使用数简单好多),然后我选择在JSP页面中添加一个超链接,url后面有一个参数,然后前后台交互。后台依靠url参数path,确认前台点击的是哪个文件,同时也给出了路径(也可以使用post,但是这就要多加一步)。后台向前台传送一个File[] 向前台传送指定目录下所有的file/dir。当前台点击的时候,如果是文件夹isDirectory(),则使用path传到后台,Servlet返回它的childFiles;如果是文件,那么就调用downloadservlet(或许把它写成一个共能方法比做成servlet更好用一点)。

                                 2、在下载已中文名命名的文件的时候总是检测不到文件名。

       这个解决方法是从网上找的,说白了就是前后台参数传递的编码问题,挺蛋疼的。我设置参数传递的时候,习惯性忽略掉了通过服务器从前台网后台传参数Tomcat默认为ISO-8859-1。然后就导致读不到中文参数,后来修改代码如下:

在后台处理跳转页面的时候。我吧path重新转成byte格式,制定了编码为"ISO-8859-1",然后又把它指定为一个new String ,指定String编码UTF-8(我的Eclipse默认编码为UTF-8)。

path = new String(path.getBytes("ISO-8859-1"), "utf-8");

然后就是我需要下载文件的文件名,我也是类似上面做了编码方式转换:

        // 设置Content-Disposition
        response.setHeader("Content-Disposition", "attachment;filename="
                +new String(fileName.getBytes("utf-8"),"ISO-8859-1"));

0 0