JavaWeb--BasicUnderstanding

如何理解Http协议:
Http是TCP/IP的上层协议,
TCP/IP负责确保一个网络节点向另一个网络节点发送的文件能作为一个完整的文件到达目的地,在传输的过程中这个文件被分解为小块传输,IP是一个底层协议,负责把数据块(数据包)沿路移动、路由到目的地;
HTTP则是另一个网络协议,依赖TCP/IP从一处向另一处完整地传送请求和响应。Http会话结构是一个简单的请求响应序列。浏览器发出请求,服务器做出响应。

如何理解URL:
http://www.hunterztygo.com:8761/dream/complete/rich.html
服务器,所请求物理服务器的唯一地址,映射到一个唯一的IP地址,
端口:一个服务器可以支持多个端口,一个服务器应用有一个端口标识,如果在URL中没有指定端口,默认使用80端口
路径:所请求资源在服务器上所在路径,因为web上大多数较早的服务器都采用unix系统,因此还是用unix语法来描述web服务器的目录层次结构
资源:可以是一个html网页,一个servlet,一个图像,pdf,音乐,视频,任何资源,这部分是可选的,如果url中没有这一部分,大多数web服务器会默认查找index.html

如何理解端口:
端口是一个逻辑链接,表示在服务器硬件上运行的一个特定软件逻辑链接,可以把端口看作一个唯一标识符,没有端口,服务器就没有办法知道客户想要连接哪个应用
如果每个端口上使用一个服务器应用,那么一个服务器上最多可以有65536个不同的服务器应用,如果使用不同的协议,则不可能再同一个端口上运行多个应用。0-1023的TCP端口已经保留,由一些知名的服务使用。

如何理解容器:
Servlet没有main方法,他们受控于另一个Java应用,这个应用就是Container
浏览器是一个软件,知道怎么与服务器进行通信,知道如何解释响应,并呈现给客户。

Tomcat就是这样一个容器,web服务应用得到一个指向servlet的HTTP请求
而不是其他请求,比如指向普通html静态页面的请求,服务器就会把这个HTTP请求交给servlet容器,而不是servlet,
容器便会创建了两个对象,HttpServletResponse HttpServletRequest
容器根据http请求中的URL找到正确的servlet为这个HTTP请求创建一个or分配一个线程,并把请求&响应对象传递给这个servlet线程。
容器调用servlet的service()方法,根据请求的不同类型,service()方法会调用doGet 或者doPost方法
将service方法的结果赛道响应对象里
线程结束,容器把响应对象转换为一个HTTP响应,把它返回给客户,然后删除HttpServletResponse 和HttpServletRequest对象。

容器提供了什么:
通信支持:
轻松的人servlet与web服务器对话,不用自己建立ServerSocket监听某个端口,创建流等等,容器知道自己怎么遇web服务器之间的协议。

生命周期管理:
容器控制着servlet的生与死,它会负责加载类,实例化和初始化servlet。调用servlet方法,以及使servlet实例能够被垃圾回收,有了容器的控制,不用考虑资源管理了。

多线程支持:
容器会自动为每个接收servlet请求创建一个新的Java线程,针对客户的请求,如果servlet已经完成相应的http服务方法,这个线程就会结束,并不是说不用考虑线程安全性问题,你还是会遇到同步的问题。不过由服务器创建和管理多个线程来处理多个请求。

声明方式实现安全:
JSP支持:

Servlet的一生:
Servlet一生只有一个实例,任何Servlet类都不会有多个实例,每个请求一个线程,容器并不关心是谁做的请求,每个到来的请求都意味着一个新的线程。

Servlet总会在第一个客户请求提供服务器之前得到加载和初始化。init方法servlet一生之中只能运行一次,在成为servlet实例之前,会加载servletConfig和servletContext里面的参数
在这里插入图片描述

Get和Post请求区别:
Get请求是幂等的,它能执行多次,而且不会产生任何不好的副作用
Post不是幂等的,Post体中提交的数据可能用于不可逆的事务。

Request常用的方法:
获取参数:
request.getParaMeterValues(“parameter”)

获取header:
request.getHeader(“User-Agent”)

获取Cookies:
Cookie[ ] cookies= request.getCookies();

获取Session:
HttpSession session=request.getSession();

获取Http方法:
String method=request.getMethod();

获取请求输入流:
InputStram input= request.getInputStream();
为什么我们需要从请求中得到一个InputStream?
如果是一个Get请求,那么除了首部信息以外就没有别的了,我们不用关心请求体,
但是POST请求有所不同,它有体信息,大多数情况下我们需要拿到参数值request.getParameter()抽出参数值(例如 color=dark)但是这些值可能很大,如果你想得到请求中参数的原始字节,就可以使用getInputStream方法。利用输入流,你可以做很多事情,比如去除所有首部信息,处理请求负载(体)的原始字节,可能还会立即把它写到服务器上的一个文件中

Response理解:
响应要返回给客户,使用响应对象得到一个输出流,并使用这个流写出HTML(or其他内容)返回给客户,
大多数情况下,使用响应只是为了向客户发回数据,一般会调用两个方法setContentType和getWriter,之后将内容写入流
也可以使用响应设置其他首部,发送错误,以及增加cookie==
在这里插入图片描述
在这里插入图片描述
如何理解HttpSession对象:
对于同一个客户,HttpSession对象可以跨多个请求保存会话状态。
与一个特定客户的整个会话期间HttpSession对象会持久存储。
会话期间客户做的所有请求,从中得到的所有信息都可以用HttpSession对象保存。
Http是无状态连接,客户与服务器之间建立连接,发出请求,得到响应,然后关闭连接,连接针对一个请求响应。对容器来说,每个请求都来自于一个新的客户。

Cookie的理解:
容器以某种方式把会话ID作为response的一部分交给客户,客户必须把会话ID作为请求的一部分发回。最简单最常用的方式就是通过Cookie来交换这个会话ID信息。
在这里插入图片描述
容器会做所有cookie工作,你只需要告诉容器你想创建or使用一个会话,其他的事情全部交给Cookie来做:
1 生成会话ID
2 创建新的cookie对象
3 把会话ID放到cookie中
4 把cookie设置为响应的一部分等等
全都由容器负责。

Http请求(浏览器不能禁用Cookie),容器会从请求中的Cookie中得到会话ID,将这个会话ID与一个现有的会话匹配,并把会话与当前请求关联。

会话的删除全部由容器来做,无需使用任何方法来删除无用的(不活动的)会话,这些事情容器会为你做的。
会话死亡三种死法:
1 超时(配置文件可以设置超时时间)
2 在会话对象上调用invalidate()
3 应用结束(崩溃or取消部署)

Cookie其实就是客户和服务器之间交换的一小段数据,服务器把cookie发送给客户,客户做出下一个请求是再把cookie返回给服务器。

Old Technology:
一个servlet可以有3个名字
使用部署描述文件把URL映射到servlet上
MVC:JSP充当视图,servlet充当控制器,JavaBean充当模型
ServletConfig对象与ServletContext对象:
在这里插入图片描述
容器要加载类,调用servlet的无参数构造函数,并调用servlet的init()方法,从而初始化servlet
init方法使得servlet可以访问ServletConfig和ServletContext对象,servlet需要从这些对象得到有关servlet配置和Web应用的信息。
容器通过调用servlet的destory()方法来结束servlet的生命。

response重定向,可以选择让别人来为你的请求处理响应,可以把请求重定向到一个完全不同的URL,或者可以把请求分配给web应用的另一个组件 ,也可以使用相对URL进行跳转
在这里插入图片描述

注意:重定向是让客户来完成工作,而请求分派要求服务器上的某某来完成动作,冲重定向=客户,请求分派=服务。

Servlet的初始化参数,以及servlet的初始化,详细使用参考原先总结。(设计servletContext和servletConfig如何被加载,以及之间的区别)

监听器

servlet涉及的线程安全,以及线程同步问题,以及如何设计

JSP
JSP元素
JSP动作
EL表达式
JSTL
自定义JSTL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值