您的位置:首页 > 运维架构 > Tomcat

《TomCat与Java Web开发技术详解》(第二版) 第五章节的学习总结 ---- Servlet的高级用法

2014-03-16 18:50 253 查看
这一章节主要是介绍了Servlet技术的一些高级用法,如下是我自己的整理归纳

1.下载文件:即获取服务器文件,并把文件写入反馈给客户端

ServletContext.getResourceAsStream()得到文件输入流in;再通过response.getOutputStream()得到输出流out;最后从in中读取数据,再写入out中;

服务器端将响应正文的MIME类型设置为“application/force-download”,则浏览器就会以下载的方式来处理响应正文,即:reponse.setContentType("application/force-download");

2.上传文件:即把客户端的文件上传到服务器端

客户端将请求正文的MIME类型设置为“multipart/form-data”,其表示包括多个子部分的复合表单。表单中就可以包含文件类型的数据,当然也可以包含文本框和按钮的类型

Servlet使用Apache提供的第三方软件包:commons-fileupload-1.2.1.jar和commons-io-1.4.jar(下载位置:http://commons.apache.org/),来解析包含“multipart/form-data”类型的HTTP请求报文。实际使用的解析方法就是ServletFileIpload类的parseRequest(HttpServletRequest req)方法,此方法返回的就是一组FileItem对象的List集合。集合中的每个FileItem,实际存储的就是表单中单个子部分的实际数据。若FileItem类的IsFormField()方法返回false,就表示存储的是非普通表单域,也就是表示此部分存储的是文件。那么,就可以通过此FileItem类对象的write方法,将文件写到服务器的指定存储位置了。

3.动态生成图像:

服务器端将响应报文格式设置为“image/jpeg”,即:reponse.setContentType("image/jpeg");从而告知客户端返回的是图像

获得响应报文的输出流对象:ServletOutputStream out = response.getOutputStream();

通过某种方式将图像写入输出流对象:比如使用awt方式创建的图像对象,写入out即可;

4.读写Cookie

Cookie:服务器在客户端送给客户端的“点心”。服务器通过Cookie可以获取并跟踪客户端的相关信息;Cookie位于HTTP请求头和响应头里面;

Cookie用javax.servlet.http.Cookie类来表示,每个Cookie对象包含一个Cookie名字和Cookie值;

从HTTP请求中获得Cookie:Cookie[] cookies = request.getCookies();

向HTTP响应中加入Cookies:reponse.addCookie(...);

设置Cookie有效期:cookie.setMaxAge(...);

设置Cookie访问权限:cookie.setPath(...),用于让位于同一个Servlet服务器的其他应用获得Cookie; 和 cookie.setDomain(),用于让位于不同Servlet服务器的应用获得Cookie

5.访问web应用的工作目录

File workDir = (File)context.getAttribute("javax.servlet.context.tempdir");

6.转发和包含

请求转发:Servlet源组件把请求转发给其他Web组件(目标组件);最终响应结果由其他组件输出并返回给客户端;请求转发的方法是:

RequestDispatcher dispatcher = context.getRequestDispatcher(目标组件); dispatcher.forward(request, response);

包含:Servlet源组件把其他Web组件(目标组件)生成的响应结果包含在自身的响应结果中,并返回给客户端;包含的方法是:

RequestDispatcher dispatcher = context.getRequestDispatcher(目标组件); dispatcher.include(request, response);

7.重定向

reponse.sendRedirect(String location) --- 使得服务器返回一个状态代码为302的响应结果,表示HTTP重定向

8.访问同一个Servlet容器内的其他web应用

得到其他web应用的ServletContext对象:getContext(String uripath);

<Context>元素中的crossContext属性为false,则<Context>元素对应的web应用无法得到其他web应用的ServletContext对象;反之为true,则可以得到

9.避免并发问题

Servlet容器为每个HTTP请求分配一个工作线程。这些工作线程,并发执行同一个Servlet对象的service()方法

避免并发问题的几个原则:合理选择使用实例变量还是局部变量;使用同步机制(synchronized)对线程进行同步;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐