java web 工作原理
动态网页与静态网页最本质的区别是: 能否进行数据库操作
动态网页最大的特点就是具有交互性 , 交互性指: 服务端会根据不同的用户请求显示不同的结果
OSI 7层参考模型
1.应用层
2.表示层
3.会话层
4.传输层
5 网络层
6 .数据链路层
7 .物理层
HTTP协议(hypertext transfer protocol) : 超文本传输协议 ,是面向应用层的协议
TCP/IP 四层模型
1 . 应用层 HTTP
2. 传输层 TCP UDP
3. 网际层 IP
4.网络接口层 LAN WAN
---------------------- ------------------- --------------------------- ------------------------------------------
学习web的根本是 http 协议的5大主要特点
1. 遵循 请求/响应 模型 : 客户端/服务器的 请求/响应模式 (这是最根本的特点)
2. 无连接 客户端有请求 ,服务端才会有响应 , 没有请求就没有响应 , (有别于其他的响应的模型) , 服务端在一次连接
响应结束过后, 会立即断开连接 ,
3. 无状态 : http协议对事务处理 没有记忆能力 , 不会受之前的任何状态的影响(结果是响应速度会提高) , 但是没有记忆能力,在特殊的情况下
(之后的请求,需要之前的信息时) 传送的数据量会增大
4. 简单快速 :客户端想服务器请求服务时 ,只需要传送请求的method(get post) 8种方法 和 请求的路径
5.灵活 :http协议允许传输 任意类型的数据对象
http 定义事物处理的流程
1.连接
2.请求
请求由3部分组成
1. 请求行 包括 : 1 http方法(常用 get post) 2 请求的URL 连接地址 3 , http版本
2 消息报头
3 请求正文
3.响应
响应由3部分组成
1.状态行 包括 : 1 http版本 2 响应码 3 响应的描述
2.消息报头
3.响应正文
4.断开连接
----------------------------- ---------------------------- -------------------------------------------
WEB开发的指标 :1 高并发 2.快速响应
动态页面web技术
基于java servlet/JSP 技术 ( java server pages)
servlet 的主要任务是响应请求
WEB容器(直接拿来用)
web容器负责管理和运行servlet
web容器对servlet的支持包括
1. 通讯支持(信息从哪里来 ? 本质就是完成数据的响应和请求 , 这就是通信) :
将请求和响应信息封装成请求和响应对象
2.对servlet 生命周期的管理(加载 初始化 服务(这里就是响应请求) 销毁 卸载)
注意: 在正常情况下servlet只会初始化一次 ,并且处理服务会调用多次 ,销毁也只会调用一次
但是servlet长时间不用 , 初始化和销毁可能进行多次
3.多线程支持
4. jsp支持
5.处理安全性
------------------------------------------ ---------------------------------------------------
什么是servlet
servlet 是运行在web容器中 , 按照其自身的规范编写的java应用程序
1 servlet 是用java 语言编写的 , 是一个java类 , 因此servlet遵守所有的java语言规范,
并且他可以调用一般java可以调用的JDK类库
2. servlet是在web容器中运行 , 他编译后的.class文件被服务器调用和执行 , web服务器使用
该class文件去处理浏览器请求 , 并将处理的结果返回个客户端
3.由于servlet 特殊的应用特点 , 他有自身特殊的规则 , 一般来说必须调用java servlet API ,
必须是对特定的类或接口的继承和实现 , ,并且必须从写特定的方法,去处理客户端的请求
---------------------------------------------- ----------------------------------------------------------
servlet 基本配置
首先 : 要使用servlet 程序 , 就必须要在web.xml中进行配置
1 定义servlet 本身
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.Servlet.MyServlet</servlet-class>
</servlet>
2 .截取请求
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/Servlet.do</url-pattern>
</servlet-mapping>
Servlet的配置包括两部分:
1、<servlet>配置Servlet的名字和完整类路径:
servlet-name是自定义的,就是给Servlet取个名字。
servlet-class是Servlet完整的类 的全路径,就是从一开始的包一直“.”到该Servlet。
2、<servlet-mapping>是用来截获请求的,包括servlet-name和url-pattern。
servlet-name跟<servlet>中的servlet-name是对应的,两个servlet-name一定要一致,否则会找不到对应的Servlet。
url-pattern是截获请求的规则,当表单提交的时候,会根据特定的规则调用相对应的Servlet。下面会具体阐述。
url-pattern大致分为以下几种方式:
1、完全匹配
如:<url-pattern>/servlet/MyServlet.do</url-pattern>
2、目录匹配
如:<url-pattern>/servlet/*</url-pattern>
3、扩展名匹配
如:<url-pattern>*.do</url-pattern>
在web.xml文件中,以下语法用于定义映射:
l. 以”/‘开头和以”/*”结尾的是用来做路径映射的。
2. 以前缀”*.”开头的是用来做扩展映射的。
3. “/” 是用来定义default servlet映射的。
4. 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action
容器查找规则:
1、容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。
2、如果一个请求匹配多个“目录匹配”,容器会选择最长的匹配。
例如:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/b/*,此 时访问http://localhost/test/b时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
注意:”/*.action”这样一个看起来很正常的匹配会错。因为这个匹配即属于路径映射,也属于扩展映射,会导致容器无法判断。