按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
/list。jsp 和/view。jsp 两个页面上的在线用户列表显示效果完全一样,如果有
可能的话,我们希望将这些重复的部分从原来的页面中剥离出来,集中在一起让
其他页面调用,这样更容易管理和维护。
为了实现这一功能,我们需要借用另一个 jsp 指令(directive):include。
这里的 file 可以使用相对路径,也可以使用绝对路径。这里的绝对路径与使用
forward 时一致,都是以应用目录为根目录,参考这里的讨论第 3。4。1。2 节 “绝
对路径”。
我们顺便再看一下/include/onlineUser。jsp 的内容:
在线用户
 ;{item}
这就是一个单独的 jsp 页面,可以在里边使用 jsp 指令(directive),el,甚
至是 taglib。
不过 taglib 还是要在使用前定义的,因为每个页面都使用了相同的 taglib 定义
和其他一些相同的 html 配置(编码,css 等),我们也把这部分提取成一个 jsp
页面,让其他页面引用。这个页面也放在 include 目录下,meta。jsp 的内容如
下。
101 / 148
…………………………………………………………Page 102……………………………………………………………
meta。jsp 里定义了我们使用的 taglib,设置了默认的 contextPath,gb2312 的
编码格式和 forum。css 样式表。在其他页面里对它进行引用就可以让其他页面内
容也得到里边定义的功能,包括标签库定义和使用 c:set 设置的变量。
index
include 之间的 jsp 中的定义和变量都是可以相互调用的,但是我们必须为每个
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。n