JavaWeb学习笔记08--Servlet(1)

上一篇:JavaWeb学习笔记07–Tomcat
下一篇:JavaWeb学习笔记09–Servlet(2)

Servlet:

  1. 概念
* Servlet(Server Applet),全称Java Servlet,未有中文译文。
      * Servlet是用Java编写的服务器端程序。
      * 主要用于交互式地浏览和修改数据,生成动态Web内容。
 
* 定义:
      * 狭义的Servlet是指Java语言实现的一个接口。
      * 广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。      

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

  1. 步骤
* 用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
   * 1、编写一个Java类,实现servlet接口。
   * 2、把开发好的Java类部署到web服务器中。
  1. 执行原理
* Servlet接口定义了Servlet与servlet容器之间的契约:
    * Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。
    * 但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。

1. 用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。
2. ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

ServletRequest中封装了当前的Http请求,因此开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操做ServletResponse对象就能把响应轻松的发回给用户。

对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

  1. 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
    * Servlet 通过调用 init () 方法进行初始化。
    * Servlet 调用 service() 方法来处理客户端的请求。
    * Servlet 通过调用 destroy() 方法终止(结束)。
    * 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
  1. Servlet3.0 注解配置
* Servlet3.0开始支持使用注解来配置。

* 注解只是代替了一部分的web.xml的 配置,通常在针对单个Servlet的配置时使用注解

* 优势:
    * 将硬编码拉回到程序中。
    * 配置简单。
  1. Servlet的体系结构
Servlet -- 接口
	|
GenericServlet -- 抽象类
	|
HttpServlet  -- 抽象类

* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
	* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

* HttpServlet:对http协议的一种封装,简化操作
	1. 定义类继承HttpServlet
	2. 复写doGet/doPost方法
  1. Servlet相关配置
1. urlpartten:Servlet访问路径
	1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
2. 路径定义规则:
	1. /xxx:路径匹配
	2. /xxx/xxx:多层路径,目录结构
	3. *.do:扩展名匹配

HTTP:

* 概念:Hyper Text Transfer Protocol 超文本传输协议
	* 传输协议:定义了,客户端和服务器端通信时,发送数据的格式
	* 特点:
		1. 基于TCP/IP的高级协议
		2. 默认端口号:80
		3. 基于请求/响应模型的:一次请求对应一次响应
		4. 无状态的:每次请求之间相互独立,不能交互数据

	* 历史版本:
		* 1.0:每一次请求响应都会建立新的连接
		* 1.1:复用连接

* 请求消息数据格式
	1. 请求行
		请求方式 请求url 请求协议/版本
		GET /login.html	HTTP/1.1

		* 请求方式:
			* HTTP协议有7中请求方式,常用的有2* GET:
					1. 请求参数在请求行中,在url后。
					2. 请求的url长度有限制的
					3. 不太安全
				* POST:
					1. 请求参数在请求体中
					2. 请求的url长度没有限制的
					3. 相对安全
	2. 请求头:客户端浏览器告诉服务器一些信息
		请求头名称: 请求头值
		* 常见的请求头:
			1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
				* 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

			2. Referer:http://localhost/login.html
				* 告诉服务器,我(当前请求)从哪里来?
					* 作用:
						1. 防盗链:
						2. 统计工作:
	3. 请求空行
		空行,就是用于分割POST请求的请求头,和请求体的。
	4. 请求体(正文)* 封装POST请求消息的请求参数的

	* 字符串格式:
		POST /login.html	HTTP/1.1
		Host: localhost
		User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
		Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
		Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
		Accept-Encoding: gzip, deflate
		Referer: http://localhost/login.html
		Connection: keep-alive
		Upgrade-Insecure-Requests: 1		
		username=zhangsan	


*2. 响应消息:服务器端发送给客户端的数据
	* 数据格式:
		1. 响应行
			1. 组成:协议/版本 响应状态码 状态码描述
			2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
				1. 状态码都是3位数字 
				2. 分类:
					1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
					2. 2xx:成功。代表:200
					3. 3xx:重定向。代表:302(重定向)304(访问缓存)
					4. 4xx:客户端错误。
						* 代表:
							* 404(请求路径没有对应的资源) 
							* 405:请求方式没有对应的doXxx方法
					5. 5xx:服务器端错误。代表:500(服务器内部出现异常)
						
				
		2. 响应头:
			1. 格式:头名称: 值
			2. 常见的响应头:
				1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
				2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
					* 值:
						* in-line:默认值,在当前页面内打开
						* attachment;filename=xxx:以附件形式打开响应体。文件下载
		3. 响应空行
		4. 响应体:传输的数据


	* 响应字符串格式
		HTTP/1.1 200 OK
		Content-Type: text/html;charset=UTF-8
		Content-Length: 101
		Date: Wed, 06 Jun 2018 07:08:42 GMT

		<html>
		  <head>
		    <title>$Title$</title>
		  </head>
		  <body>
		  hello , response
		  </body>
		</html>
		

上一篇:JavaWeb学习笔记07–Tomcat
下一篇:JavaWeb学习笔记09–Servlet(2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章