web
一、HTTP
超文本传输协议(HyperText Transfer Protocol),web浏览器和web服务器之间的数据交换。
1、HTTP请求协议包括:请求行、请求头,请求体
- 请求行:包括请求方式、资源路径、协议/版本(协议规定7种请求方式,常用GET和POST)
GET:将请求参数追加到URL后面,数据大小有限制大约1024,没有请求体。
POST:请求参数显示在请求体,数据大小没有显示
- 请求头:
- 请求体:用户提交的参数,键值对,用&连接
2、HTTP响应协议:响应行、响应头、响应体
- 响应行:包括协议/版本、状态码、状态码描述
状态码:200请求成功
302请求重定向
304请求资源没有改变,访问本地缓存
404请求资源不存在
500服务器内部错误
- 响应头:
- 响应体:服务器发给浏览器的正文
二、基本概念
1、软件架构:
C/S:Client/Server客户端/服务器
B/S:Browser/Server浏览器/服务器
2、J2EE/JavaEE:
企业级开发Java规范(接口),包括sevlet,jsp,jdbc,xml,jta,javamail
3、URL:
Uniform Resource Locator,统一资源定位符是对互联网上资源位置的一种表示
4、JavaWeb三大组件:
Servlet、Filter、Listener
5、servlet的任务:
1)获取请求数据
2)处理请求
3)完成响应
6、serlvet 声明周期:
一个servlet对象从创建到销毁的过程。
1)创建时间:用户第一次访问serlvet创建serlvet的事例(单例)
2)销毁时间:项目从服务器中移除,或关闭服务器的时候
7、serlvet被访问的流程:
1)用户第一次访问serlvet的时候,首先服务器会创建一个serlvet实例
2)创建serlvet实例的同时执行init()方法
3)每次请求服务器都会创建一个新的线程访问serlvet中的service方法,在service方法内部根据请求方式的不同doXXX方法
4)当serlvet从服务器中移除,或关闭服务器,serlvet实例就会被销毁,destory方法就会执行
8、文件下载需要在http协议中设置两个响应消息头:
设置接受程序处理数据的方式:Content-Disposition:attachment;filename=
设定实体内容的MIME类型:Content-Type:application/x-msdownload
9、tomcat默认编码集是iso8859-1,所以解决乱码:
Request处理乱码
Get请求:name = new String(name.getBytes(“iso8859-1”),“utf-8”)
Response处理乱码:
Response.setContentType(“”text/html;charset=utf-8”)
10、请求转发与重定向:
请求转发:当web资源收到客户端的请求后,服务器去通知另一个资源去处理请求(带有请求参数)
ServletRequest.getRequestDisapatcher(Stringpath).forward/include
重定向:重新定向到新的地址
ServletResponse.sendRedirect()
11、Cookie分类:
会话级别的Cookie:默认的,关闭了浏览器那就销毁
持久级别的Cookie:需要设置有效时长,浏览器关闭也不会销毁
setMaxAge(int i),设置时长
setPath(String uri),设置Cookie有效路径
12、Cookie 和Session:
- Cookie:
客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
1)服务器和客户端之间传递和存储数据,由服务器端写的;由客户端保存的。
2)cookie并不是javaEE独有的,而是由HTTP协议指定的,只要遵循HTTP协议,都可以用cookie技术
3)Cookie的value是有长度限制的,4KB。
4)一个浏览器接收的cookie也是有上限。300个
5)一个网站存储的cookie也是有上限的。30个
6)cookie不支持直接存中文。
- Session:
是服务端的解决方案,它是通过服务器来保持状态的,记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
1)Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
2)Session中可以禁止Cookie,可以使用URL重写的方法获取Session的id。
- 区别:
1)Session服务端的会话技术(把会话数据保存在服务端),是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
2)Cookie客户端的会话技术(把会话数据保存在客户端),是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式
3)Session 依赖于 Cookie,Cookie相对于Session不安全
4)Cookie存储数据是字符串,过多,浏览器不支持
5)Session 存储数据值是 Object 类型,过多,服务器压力大
13、servlet三大作用域:
1)ServletContext针对一个WEB应用。一个WEB应用只有一个ServletContext对象,使用该对象保存的数据在整个WEB应用中都有效
创建:服务器开启时
销毁:服务器关闭时或项目移除时
2)HttpSession针对一次会话,使用该对象保存数据,一次会话(多次请求)内数据都有效
创建:服务器第一次调用getSession()的时候
销毁:非正常关闭服务器(正常关闭,Session被序列化)
Session过期了,默认时间是30分钟
手动调用Session的invalidate的方法
3)HttpServletRequest针对一次请求。使用该对象保存数据,一次请求(一个页面,如果是请求转发,多个页面)内数据有效
创建:客户端向服务器发送一次请求
销毁:服务器为这次请求做出响应之后,销毁request
4)三个作用域对象操作的api相同
存放数据:setAttribute(name, value)
获取数据:getAttribute(name)
删除数据:removeAttribute(name)
14、JSP:
Java Server Pages,是建立在servlet规范上的动态网页开发技术。当客户端发出请求访问jsp文件时,jsp容器会将jsp文件转换成一个java文件,在编译成class文件,这个class文件就是servlet。
15、JSP内置对象:(JSP2.0规范中提供了9个隐式内置对象)
此外,JSP还提供了一个特殊的隐藏域对象:param,任何get请求内的key-value值都可以通过param.value获得
16、缓存实现原理: (HTTP 协议如何实现缓存? 怎么判断服务器端的资源是否发生改变了?)
1)浏览器第一次访问服务器,服务器发送响应数据,同时还要携带一个响应头Last-Modified------------ 保存了资源文件的最后修改时间
2)浏览器获取数据、显示数据,底层还要将数据进行缓存,并且保存last-Modified对应的值
3)浏览器第二次访问服务器,携带者B中保存的最后修改时间If-modified-since 到服务器
4)服务器取出If-modified-since 对应的时间值,和文件的最后修改时间比较;如果值一样,返回304,浏览器直接取本地缓存,如果不一样,直接响应资源
17、ServletContext:
每个“Web 应用程序”都有一个上下文对象(往上可以和服务器交互,往下可以管理当前项目中的资源,因此就称之为上下文对象)---- ServletContext,可以被不同的Servlet共享,这个对象是程序已启动就内置好的,我们不能自己创建,this.getServletContext()
18、邮件协议:
1)SMTP协议:发邮件协议
SImple Mail Transfer Protocol(简单邮件传输协议),定义了邮件客户端软件与SMTP服务器之间及两台SMTP服务器间的通讯规则
2)POP3协议:收邮件协议
Post Office Protocol(邮件协议),定义了邮件客户端软件与POP3服务器的通讯规则