得意处论地谈天,俱是水底捞月;拂意时吞冰啮雪,才为火内栽莲。
1、基础知识
1.1浏览器请求与服务器响应模型
- HTTP是Web上客户端与服务器之间进行通信时所用的协议
- 服务器使用HTTP向客户发送HTML
这很重要,下面的字段是标准,所开发的接口都围绕着着写要素来展开,理解即可,尤其是一些重要的首部字段,决定这服务器与浏览器之间的交互方式与各自的动作!!!
请求流的关键要素
- HTTP方法(要完成的动作)。
- 要访问的页面(URL)。
- 表单参数(如方法参数等)。
响应流的关键要素
- 状态码(表示请求是否成功)
- 内容类型(包括文本、图片、HTML等)。
- 内容(具体的HTML、图片等)。
URL
静态页面和动态页面
- 静态页面:原封不动地呆在目录中。服务器找到静态页面,并把它原样传回给客户。每个客户看到的东西都一样。
- Web服务器应用只提供静态页面,但是有一个辅助应用可以生成非静态的即时页面,而且这个辅助应用能与Web服务器通信。动态页面可以是一个编目、Web日志,甚至只是一个随机选择显示图片的页面.
*
Eclipse中JavaWeb
目录结构
2、Web应用体系
2.1、什么是容器
Servlet没有main方法。它们受控于另一个Java应用,这个Java应用称为容器
Tomcat就是这样一个容器。如果Web服务器应用得到一个指向某Servlet的请求(而不是其他请求,如请求一个普通的静态HTML页面),此时服务器不是把这个请求交给Servlet本身,而是交给部署该Servlet的容器。要由容器向Servlet提供HTTP请求和响应,而且要由容器调用Servlet的方法。
2.2容器能提供什么?
- 通信支持:利用容器提供的方法,能够轻松的让Servlet与Web服务器对话。无需自己建立ServerSocket、监听端口、创建流等。容器知道自己与Web服务器之间的协议,所以你的Servlet不必担心Web服务器和自己Web代码之间的API。
- 生命周期管理:容器控制着Servlet的生与死。它会负责加载类、实例化和初始化Servlet、调用Servlet方法,并使servlet实例能够被垃圾回收。有了容器的控制,你就不用太多的考虑资源管理
- 多线程支持:容器会自动的为它接收的每个Servlet请求创建一个新的线程,针对客户的请求,如果servlet已经运行完响应的HTTP方法,这个线程就会结束(也就是会死掉)。这并不是说不用考虑线程安全性,还是会遇到同步的问题到 。
- 声明方式实现安全:利用容器,可以使用XML部署描述来配置(和修改)安全性,而不必将其硬编码写到servlet(或其他)类代码中。 注解到底好不好
- JSP支持
2.3 容器如何处理请求
70)
2.4容器是怎样根据url找到servlet
使用部署描述文件将URL映射到Servlet
将Servlet部署到Web容器时,会创建一个相当简单的XML文档,这称为部署描述文件(DD),部署描述文件会告诉容器如何运行你的Servlet和JSP。尽管使用部署描述文件不只是为了映射Servlet名,最起码要知道,可以使用两个XML元素把URL映射到servlet,其中一个将客户知道的URL名映射到你自己的内部名,另一个元素把你自己的内部名映射到一个完全限定类名。