友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JSP入门教程(DOC格式)-第20章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




jsp 页面都指定正确的编码格式。这依然是为了处理中文乱码,meta。jsp 中没有 

指定编码格式就是因为这也里没有中文。/include/onlineUser。jsp 里包含了中 

文,如果不设置 charset 就会显示乱码,使用 include 的时候需要注意这一点。  



10。4。 总结  



这个在线留言板包含了之前讨论过的问题:  



   1。  使用过滤器第 7。1 节  “批量设置请求编码”,处理中文乱码第 2。2 节  

       “中文乱码”。  

   2。  使用 servlet 处理转发请求第 6 章 贴近 servlet,结合数据库进行 CRUD 

      操作第 5 章 结合 javabean 实现 CRUD,并使用 foward 和 redirect 进行 

      请求转发和页面重定向第 3 章 请求的跳转与转发。  

   3。  页面显示数据的时候使用了 el 和 taglib 第 9 章 封装 taglib 组件。  

   4。  使用过滤器控制访问权限第 7。2 节  “用filter 控制用户访问权限”, 

      使用监听器操作在线用户列表第 8 章 配置 listener监听器。  



例子在 10…01 目录下,将目录复制到tomcat 的webapps 目录下即可使用。  



源代码在 10…01/WEB…INF/src 目录下,在将整个目录复制到webapps 下后,可以 

使用 pile。bat 进行编译。  



数据库脚本在 10…01/WEB…INF/sql 目录下,修改import。sql 后,执行 run。bat 

可改变数据库中的初始数据。  



                                  102 / 148  


…………………………………………………………Page 103……………………………………………………………

                                      



                       第 11 章 文件上传  



注意  



http 协议允许用户以请求形式将本地文档上传到服务器,这部分将涉及到二进 

制数据的处理,java 开源社区提供了许多处理文件上传的工具包,所以我们仅 

仅介绍上传的原理流程和工具配置,不会重新制造轮子。  



如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章: 

第 12 章 导出文件。  



   1。  了解http 使用 POST 和 GET 发送请求的区别。  

   2。  了解如何使用html 表单上传文件。  

   3。  了解使用 mons…fileupload 处理用户上传的文件。  



11。1。 远程网盘  



                                                                             



用户点击浏览选择需要上传的本地文件,然后点击提交上传到服务器。  



文件列表中显示已上传文件的名称,大小和上传时间,可以点击文件名浏览或下 

载文件,也可以点击删除删除文件。  



                                   103 / 148  


…………………………………………………………Page 104……………………………………………………………

                                                 



                                                                                                    



请看一下这里的 temp 和 upload 目录,mons…fileupload 会把从请求中接收 

到的文件临时保存在 temp 目录下等待处理,我们可以使用write()方法将临时 

文件移动到我们指定的目录,也可以直接用 delete()方法删除。  



upload 目录是上传文件的存放目录,上传成功的文件最后都会保存到这个目录 

下。  



                                                                                                                 



为了使用 mons…fileupload 处理上传文件,需要把两个依赖包放到 

WEB…INF/lib 目录下。  



                                                                                      



这样就能在 UploadServlet。java 中使用 mons…fileupload 了,处理上传的 

save()方法如下:  



public void save(HttpServletRequest request;HttpServletResponse  

response)  

    throws Exception {  

    String temp = getServletContext()。getRealPath(〃/temp〃); // 上传时 

存放临时文件的目录  

    String uploadDir = getServletContext()。getRealPath(〃/upload〃); //  

上传文件存放的目录  

    DiskFileUpload diskFileUpload = new DiskFileUpload();  



                                             104 / 148  


…………………………………………………………Page 105……………………………………………………………

                                         



    diskFileUpload。setSizeMax(1*1024*1024); // 设置允许用户上传文件大 

小;单位 :字节  

    diskFileUpload。setSizeThreshold(4096);  // 设置最多只允许在内存中 

存储的数据;单位 :字节  

    diskFileUpload。setRepositoryPath(temp); // 设置一旦文件大小超过 

getSizeThreshold()的值时数据存放在硬盘的目录  

  

    //开始读取上传信息  

    List fileItems = diskFileUpload。parseRequest(request);  

    Iterator iter = fileItems。iterator(); // 依次处理每个上传的文件  

  

    while  (iter。hasNext()) {  

        FileItem item = (FileItem) iter。next(); // 忽略其他不是文件域 

的所有表单信息  

        if  (!item。isFormField()) {  

            String name = item。getName(); // 获取上传文件名;包括路径  

            name = name。substring(name。lastIndexOf(〃”) + 1); // 从全 

路径中提取文件名  

            long size = item。getSize();  

            if  (name != null && !name。equals(〃〃) && size != 0) {  

                String filePath = System。currentTimeMillis() + 〃_〃 +  

name;  

                item。write(new File(uploadDir; filePath));  

  

                Upload upload = new Upload();  

                upload。setFileName(name);  

                upload。setFilePath(〃upload/〃 + filePath);  

                upload。setFileSize(size);  

                upload。setAddDate(new Date());  

  

                list。add(upload);  

            }  

        }  

    }  

    response。sendRedirect(〃index。jsp〃);  

}   



getServletPath()。getRealPath(〃/temp〃)将得到“tomcat 安装目录 + /webapps  

+ /temp”,这是我们获得服务器下目录下唯一方法,得到了这个完整路径后才 

可以决定将文件保存到什么地方。  



处理文件上传的第一步是创建一个 DiskFileUpload,为它设置临时目录,文件 

大小限制,内存缓存的大小。  



                                      105 / 148  


…………………………………………………………Page 106……………………………………………………………

                                    



得到 DiskFileUpload 实例后,调用 parseRequest(request)解析请求,解析的 

结果是一个列表,因为我们可能上传多个问题见。  



现在可以循环得到的列表处理每一个FileItem,如果 isFormField()返回 false, 

表示当前 FileItem 对应一个上传的文件,下面就能从 FileItem 中获得文件名和 

文件大小,最后调用 write()方法写入 upload 目录下。  



调用 write()之后,temp 目录下对应的临时文件自动会被删除,如果想保存文件 

的具体信息,还需要进行另外的处理,这里我们使用的是一个自定义 javabean, 

每次上传成功后会创建一个 Upload,将文件名,文件保存的路径,文件大小, 

上传时间加入 UploadServlet 中定义的 list 变量中,下次执行 

upload。do?method=list 请求的时候会将其中保存的数据显示到 list。jsp 中。 

当然如果服务器重启后内存中的数据就会丢失,实际开发时我们需要将上传信息 

保存到数据库中。  



11。2。 浏览器部分的设置  



文件上传需要客户端与服务器端配合工作,客户端的浏览器必须将文件内容附加 

到 http 协议请求中,这样服务器才能处理。  



浏览器端有几点需要注意的。  



   1。  使用 method=〃GET〃。  



      表单默认使用 method=〃GET〃提交请求,GET 方式的请求是没有请求体 

       (body)的,所有参数都将附加到url 后传递给服务器。  



                                                                   



      文件上传需要将二进制数据放到请求体(body)中,所以我们必须指定表 

      单使用 method=〃POST〃。  



                                  106 / 148  


…………………………………………………………Page 107……………………………………………………………

                                                                 



                                                                                                                 



2。  为表单设置 enctype=〃multipart/form…data〃。  



      不设置 enctype 的情况表单只会把文件名传递到服务器,enctype 的效果 

      是把本地文件以二进制的形式附加到请求的 body 中,供服务器接收解析。  



                                                                                                                 



                                                          107 / 148  


…………………………………………………………Page 108……………………………………………………………

                                              



                            第 12 章 导出文件  



注意  



超越 contentType=〃text/html〃,servlet 不只可以生成 text/html 类型的 html 

文本,也可以生成 image/jpeg 类型的图片,http 支持的所有文件格式都可以通 

过 servlet 生成。  



如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章: 

第 13 章 剖析 el 表达式。  



    1。  了解如何使用 servlet 生成图片。  

    2。  了解设置 contentType 使 servlet 生成不同格式的文件。  



1
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!