WEB概述
HTTP
- web浏览器与web服务器之间的一问一答的交互过程,必须遵循一定的规则,就是HTTP协议。HTTP是hypertext transfer protocol(超文本传输协议)的简写,他是TCP/IP协议之上的一个应用层协议,用于定义web浏览器和web服务器之间交换数据的过程以及数据本身的格式。
- HTTP协议到底约束了什么
1)约束了浏览器以何种格式向服务端发送数据
2)约束了服务器应该以何种格式来接收客户端发送的数据
3)约束了服务器应该以何种格式来反馈数据给浏览器
4)约束了浏览器应该以何种格式来接收服务器反馈的数据。 - HTTP1.0规范
每次请求都要新建连接,响应结束后断开连接,连接不会复用效率较低。
HTTP1.1规范
在一次请求结束后会保持连接一段时间,下次再次请求时可以复用连接,提高了效率。 - 请求信息
1)请求行(位于第一行)
2)请求头
3)请求实体:从第一个空行开始,后面的都是正文(可以没有)。只有POST请求才有请求实体。 - 响应信息
1)状态行(位于第一行)
200 表示成功处理完成请求
302 表示请求重定向
304 表示通知浏览器使用缓存中的资源
307 表示通知浏览器使用缓存中的资源
404 找不到资源
500 服务器端错误
2)响应头
3)响应正文:从第一个空行开始,后面的都是正文。
GET请求和POST请求
- GET的请求数据在浏览器的地址栏(不安全),而POST不会。POST比GET更安全
- GET的请求信息存放于请求行中,而POST的请求信息存放于请求实体中。
- GET方式请求的数据不能超过2k,而POST没有上限(比如文件上传是,必须使用POST方式)
- GET可以缓存,而POST没有缓存。
注意:查询的时候使用GET,其他时候使用POST。(表单全部使用POST提交)
WEB服务器
- Servlet容器
能够运行Servlet/JSP(动态资源开发技术)的环境就叫做Servlet容器。 - web容器
能够运行web应用的环境叫做web容器。 - web服务器
1)web容器/Servlet容器具体来说就是web服务器。
2)常见的web服务器有:Tomcat、WebSphere、WebLogic等。 - 虚拟主机
tomcat中可以配置管理多个网站,外界在访问这些网站时,并不知道这些网站是运行在同一个tomcat中的,感觉起来就像他们各自运行在各自的虚拟出来的主机中一样,所以将一个网站交给tomcat去管理的过程称为为tomcat配置一台虚拟主机。 - web应用
web资源按照一定的规则整合起来组成能够被web访问的应用程序就叫做web应用
Servlet
- Servlet是sun公司提供的一门用于开发动态web资源的技术。按照这套规范写出来的Servlet可以放置到web应用中在Servlet容器中运行。
- 开发一个Servlet只需要两个步骤:
1)写一个类实现javax.servlet接口。
2)在web.xml中为servlet配置对外访问路径。 - Servlet的生命周期
1)Servlet第一次被访问时,创建对象,创建出来后会立即执行init()方法进行初始化的操作。
2)从此以后该对象一直驻留在内存中,为后续的对本Servlet的请求进行服务,调用service()方法。
3)直到服务器关闭或web应用被移出容器时,随着web应用的销毁Servlet对象也会被销毁,但在销毁之前会调用destroy()方法执行一些善后的工作。 - Servlet的请求流程
1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
2)浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。
3)服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。
4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。
5)服务器根据http请求头中的请求URL判断当前访问的是web应用中的哪个web资源。
6)检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet处理。 - Servlet线程安全问题
1)造成的根本原因:Servlet是单例的,Servlet中的非static的成员变量只有一份,多个客户端好比是多个线程,都访问的是同一个空间。
2)解决方案:
① 让当前的Servlet实现javax.servlet.SingleThreadModel接口。包装只有一个线程放Servlet,如果有多个线程就排队。如此的话,性能超低(已过时)
② 在Servlet中,不要使用成员变量,使用局部变量。每一个用户,每一个请求都会调用service方法,而局部变量在service方法中,每一次都是新的空间。
Cookie
- 解决的问题:HTTP的无状态连接,使得在一次会话中,多个请求之间无法共享数据,无法跟踪用户的会话信息。
- Cookie是客户端技术。程序吧每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。、
- Cookie的操作
4. Cookie的缺陷
Session
- Session是服务器端的技术。利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于sessin为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。
- Session的操作
- Session的细节
转发和重定向
- 请求转发的特点
1)浏览器地址栏不发生改变
2)请求转发只发送一个请求
3)共享同一个请求中的数据
4)最终响应给浏览器的由转发后的Servlet来决定
5)请求转发不能跨域访问,只能跳转到当前应用中的资源
6)请求转发可以访问WEB/INF目录下的资源 - URL重定向的特点
1)浏览器的地址栏发生改变
2)URL重定向发送了两次请求
3)不共享请求中的数据
4)最终响应给浏览器的由Servlet2来决定(把目标地址拷贝到浏览器地址栏,敲回车)
5)URL重定向能跨域访问,可以访问其他应用中的资源
6)URL重定向不能访问WEB/INF目录下的资源 - 如何选择
1)必须使用请求转发(forword)
① 如果需要共享请求中的数据
② 如果需要访问WEB/INF中的资源
2)如果需要跨域访问,避免表单的重复提交,只能使用URL重定向。
JSP
-
Servlet是JavaWeb提供的动态资源开发技术,是以java的程序的形式进行开发,在java中书写HTML标签是一件十分头疼的事情,所以人们开发出了JSP,看起来像是HTML一样,但可以在其中写java代码,本质上是动态web资源,Jsp会在第一次访问时被容器翻译为Servlet。
-
JSP的三大指令
1)page:表示jsp页面相关的配置信息
2)include:引入其他页面的内容
3)taglib:用来引入标签库 -
JSP九大内置对象
- JSP四大作用域
- JSP四大作用域
EL表达式
- 目的:从作用域中获取指定属性名的共享数据。
- 语法:${msg}
- EL从作用域中查询指定属性名的共享数据,是按顺序查找的:page、request、session、application
过滤器
- 过滤器可以对所有的请求或者响应做拦截操作
- 过滤器在开发中的运用
1)可以对请求中的字符做编码
2)登录验证过滤器
3)敏感字过滤
4)做MVC框架中的前端控制器(处理所有请求共同的操作,再分发) - Filter开发步骤
- Filter的dispatcher:表示对哪些动作进行过滤
- FilterChain(过滤器链):多个过滤器按照一定的顺序,排列起来。
注意:配置多个过滤器的时候,过滤器的先后顺序由web.xml中配置的的先后顺序来决定。 - 请求编码过滤器:CharacterEncodingFilter
监听器(Listener)
- 主要用于监听作用域对象的创建,监听作用域对象属性的添加/删除/替换;
1)监听作用域对象的创建和销毁
ServletRequestListener:监听请求对象的创建和销毁
HttpSessionListener:监听会话对象(session)的创建和销毁
ServletContextListener:监听应用的创建和销毁
2)监听作用域对象的属性的添加/删除/替换
ServletRequestAttributeListener:监听request作用域中属性的添加/删除/替换
HttpSessionAttributeListener:监听session作用域中属性的添加/删除/替换 - Web中的监听器组件,没有初始化参数,如果要解决监听器中的硬编码,只能使用全局的初始化参数。