这一章节主要是介绍了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)对线程进行同步;

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

  1. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  2. 《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API

    要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...

  3. 《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术

    第六章主要介绍了JSP的相关知识. 1.JSP:是通过在HTML文件中加入java程序片段(Java Scriptlet)和JSP标记,就构成了JSP文件.JSP实质上是Servlet.JSP的API ...

  4. 《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql

    终于学到如何访问Mysql了 1. 可以看看此章节提供的sql脚本,以后可以照着写了.此外,对于Mysql如何使用,最好的地方就是其官网介绍了.http://dev.mysql.com/doc/ref ...

  5. 《TomCat与Java Web开发技术详解》(第二版) 第六章节对应CD附带的helloapp无法启动的问题解决

    首先记录一下如何解决此章节CD中附带的helloapp无法启动的问题 我用的tomcat版本是:7.0.47:为了便于控制,针对此章节的helloapp,我在tomcat/conf/Catalina/ ...

  6. 《TomCat与Java Web开发技术详解》(第二版) 第三章节的学习总结--利用Context元素来自定义web应用的存储位置

    在学习完第三章后(第三章提供的web应用是helloaapp,我将其放到了tomcat/webapps中),对Context元素的作用理解不深:但是当进入第四章后,发现第四章提供的源码包中也有一个叫h ...

  7. 《TomCat与Java Web开发技术详解》(第二版) 第一章节的学习总结--HTTP组成+基本访问方式

    1.需要看懂HTML文件中的组成元素的基本含义.不同的组成元素,可以使得HTML支持文本,图片(img,将图片发给客户端),静态音频/视频(embed src,将音频视频发给客户端),超链接(href ...

  8. Java Web开发之详解JSP

    JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...

  9. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

随机推荐

  1. 图床plus演示 | 图床及在线分享演示文稿工具

    文章目录 关于图床 什么是图床? 墙内 墙外 关于在线分享演示文稿 在线分享演示文稿 工具分享 待补充 关于图床 什么是图床? 这并不是一个多么高大上的名词概念!用比较通俗的话来说,当你在撰写新文章时 ...

  2. win7 下注册dll文件失败

    1.win7 下注册dll文件失败,提示模块“xx.dll”已加载,但找不到入口点DllRegisterServer 原因:该dll文件非可注册组件,没有包含DllRegisterServer函数,可 ...

  3. zookeeper 学习笔记3

    ZooKeeper 允许客户端向服务端注册一个 Watcher 监听, ZooKeeper 允许客户端向服务端注册一个 Watcher 监听, ZooKeeper 允许客户端向服务端注册一个 Watc ...

  4. 【spring data jpa】spring data jpa的in查询

    如下: List<Dealer> findDealersByTidAndUidIn(String tid,List<String> uidList); 在dao层里面直接写这个 ...

  5. kubernetes1.5.2集群部署过程--安全模式

    使用https安全模式部署kubernetes集群,能保证集群通讯安全.有效限制非授权用户访问.但部署比非安全模式复杂的多. 本文为etcd.kubernetes集群中各个组件配置证书认证,所有组件通 ...

  6. Linux命令基本格式

    1 起始符td@td-Lenovo-IdeaPad-Y410P:~$ 第一个td表示当前登录管理员名,中间@无实际意义,td-Lenovo-IdeaPad-Y410P表示主机名,-表示当前所在目录(h ...

  7. java的几个概念AOP、IOC、DI、DIP、工厂模式、IOC容器

    1.AOP:面向切面编程 把一些公共类,比如日志类.安全类.数据库连接类.系统统一的认证.权限管理类.资源池(如数据库连接池的管理).性能监控等做成一个公共类,当其他类需要时,进行注入(调用).这样这 ...

  8. ios开发 Socket通信

    Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的双发,即客户端(Clien ...

  9. Makefile学习之通配符和自动变量

    规则中的通配符 “*” ,“?” ,“ [...]”, " % " , " wildcard " 1.“*”  *.c表示所有后缀为.C的文件: 如果文件中用到 ...

  10. Java防止SQL注入的几个途径

    java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用 PreparedStatement来代替Statement来执行SQL语句,其 ...