4、HTTP与HttpServlet
HTTP是一种基于请求/响应模式的协议。客户端发送一个请求,服务器返回对该请求的响应。HTTP使用可靠的TCP连接,默认端口是80
在HTTP中,客户端/服务器之间的会话总是由客户端通过建立连接和发送HTTP请求的方式初始化,服务器不会主动联系客户端或要求与客户端建立连接。在会话开始后,浏览器或服务器都可以随时中断连接,例如,在浏览网页时可以随时点击“停止”按钮中断当前的文件下载过程,关闭与Web服务器的HTTP连接。
4.1、HTTP请求
HTTP请求由3个部分构成,分别是:请求方法、URI、协议/版本,请求头,请求正文
例如:
GET /sample.jsp HTTP/1.1 [color=red](请求方法、URI、协议/版本)[/color]
Accept:image/gif.image,image/jpeg.*.*
Accept-Lauguage:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate [color=red](请求头 Header)[/color]
[color=red](Blank line)[/color]
username=weiqin&password=1234 [color=red](请求正文)[/color]
1)、请求方法、URI、协议/版本
GET /sample.jsp HTTP/1.1
根据HTTP标准,HTTP请求可以使用多种请求方法。例如,HTTP 1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。
URI完整的指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头。
协议版本声明了通信过程中使用的HTTP的版本。
2)、请求头
请求头包含许多有关客户端环境和请求正文的有用信息。
3)、请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来是请求的正文。请求正文中可以包含客户提交的查询字符串信息。
4.2、HTTP响应
与HTTP请求类似,HTTP响应也由3个部分构成,分别是:协议、状态代码、描述,响应头,响应正文。
例如:
HTTP/1.1 200 OK
Server:ApacheTomcat/5.0
Date:Mon,6 Oct 2003 13:13:13 GMT
Content-Type:text/html
Last-Modified: Mon,6 Oct 2003 13:03:13 GMT
Content-Length:112
<html>
<head>
<title>HTTP响应示例</title>
</head>
<body>
Hello HTTP!
</body>
</html>
1)、协议、状态代码、描述
HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所使用的协议是HTTP 1.1,服务器已经成功地处理了客户端发出的请求。
2)、响应头
响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等。
3)、响应正文
响应正文就是服务器返回的HTML页面,响应头和正文之间也必须用空行分隔。
4.3、HttpServlet的功能
在了解了具体的HTTP协议规范后,可以更好地理解HttpServlet的作用。它能够根据客户发出的HTTP请求,生成相应的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创建HttpServletRequest对象,并把HTTP请求信息封装到HttpServletRequest对象中,这大大简化了HttpServlet解析请求数据的工作量。如果没有HttpServletRequest,HttpServlet只能直接处理Web客户发出的原始的字符串数据,有了HttpServletRequest后,只要调用HttpServletRequest的相关方法,就可以方便地读取HTTP请求中任何一部分信息。
HttpServletRequest中读取HTTP请求信息的常用方法:
getCookies():返回HTTP请求的Cookies
getRequestURI():返回HTTP请求URI
getQueryString():返回HTTP请求数据中的查询字符串
getMethod():返回HTTP请求方法
Servlet容器还向HttpServlet提供了HttpServletResponse对象,HttpServlet可以通过它来生成HTTP响应的每一部分内容。
HttpServletResponse提供的生成响应数据Header的方法:
addCookie(Coolie cookie):向HTTP响应中加入Cookie
setHeader(String name,String value):设置HTTP响应的Header。
4.4、Servlet容器响应Web客户请求的步骤:
(1)、Web客户向Servlet容器发出HTTP请求;
(2)、Servlet容器解析Web客户的HTTP请求;
(3)、Servlet容器创建一个HttpServletRequest对象,在这个对象中封装了HTTP请求信息;
(4)、Servlet容器创建一个HttpServletResponse对象;
(5)、Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
(6)、HttpServlet调用HttpServletRequest的有关方法,获取HTTP请求信息
(7)、HttpServlet调用HttpServletResponse的有关方法,生成响应数据
(8)、Servlet容器把HttpServlet的响应结果传给Web客户
5、创建HttpServlet的步骤
创建用户自己的HttpServlet类,通常涉及下列4个步骤:
(1)、扩展HttpServlet抽象类
(2)、覆盖HttpServlet的部分方法,如覆盖doGet或doPost方法
(3)、获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在HttpServletRequest对象中都以参数名/参数值的形式存放。
(4)、生成HTTP响应结果。通过HttpServletResponse对象可以生成响应结果。HttpServletResponse对象有一个getWriter()方法,该方法返回一个PrintWriter对象。使用PrinterWriter的print()或println()方法可以向客户端发送字符串数据流。
6、ServletContext和Web应用的关系
Servlet容器在启动时会加载Web应用,并为每个Web应用创建惟一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。
在ServletContext中设置的属性,在Web应用运行期间一直存在,当Web应用被关闭时,Servlet容器会销毁ServletContext对象,存储在ServletContext对象中的属性自然也不复存在。不同应用的ServletContext各自独立。
7、Servlet的特性及适用场合
虽然Servlet也可以用于生成动态网页,但这个功能已经逐渐让位给新锐JSP了,不过Servlet并没有因为江山代有才人而成为Java历史博物馆的古董,它依然身怀绝技笑傲江湖:
·自动启动
一般情况下,JSP只有在客户端第一次调用后,方才进行编译并初始化,而Servlet则可以通过web.xml的<load-on-startup>配置,使其在Web容器启动时自动初始化。可使用Servlet这个特性完成Web应用程序的初始化工作:如下载字典表、控制表、初始化配置信息等,启动某个后台进程等。
·路径匹配映射
Servlet可以通过web.xml 中<servlet-mapping>用通配符配置URI映射,对多个匹配的URI进行响应,而JSP只能通过一个具体的URI调用。这个特性可以使你在请求进入某个具体的页面前截获并处理它,许多Web应用框架,如Struts、Spring都利用了Servlet的这个特性,在此基础上创建构架。
·Servlet过滤器
Servlet过滤器继承于javax.servlet.Servlet并实现javax.servlet.Filter的类,在请求到达服务程序前和响应发往客户端前进行加工处理。如果有大量的页面都需要进行相同的处理,则可以使用一个Servlet过滤器对此一并处理。如你可以用Servlet过滤器进行编码转换、或者为每个页面添加一个统一的标题头等。
·Servlet监听器
J2EE定义了多个Web事件监听器接口,Servlet监听器是继承javax.servlet.Servlet并实现这些事件监听接口的类。如果 Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时做相应的处理。灵活使用 Servlet监听器,可以使一些原来很难实现的操作变得易如反掌。
此外,如果一个动态网页的页面展现逻辑少,而业务处理逻辑多,如一个计算圆周率并返回结果页面的请求,这时使用Servlet比JSP更适合。所以需要创建一个动态网页,在到底使用Servlet还是JSP的问题上举棋不定时,请这记住下面这句经典的话:Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/nht1980/archive/2009/03/09/3973196.aspx
HTTP是一种基于请求/响应模式的协议。客户端发送一个请求,服务器返回对该请求的响应。HTTP使用可靠的TCP连接,默认端口是80
在HTTP中,客户端/服务器之间的会话总是由客户端通过建立连接和发送HTTP请求的方式初始化,服务器不会主动联系客户端或要求与客户端建立连接。在会话开始后,浏览器或服务器都可以随时中断连接,例如,在浏览网页时可以随时点击“停止”按钮中断当前的文件下载过程,关闭与Web服务器的HTTP连接。
4.1、HTTP请求
HTTP请求由3个部分构成,分别是:请求方法、URI、协议/版本,请求头,请求正文
例如:
GET /sample.jsp HTTP/1.1 [color=red](请求方法、URI、协议/版本)[/color]
Accept:image/gif.image,image/jpeg.*.*
Accept-Lauguage:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate [color=red](请求头 Header)[/color]
[color=red](Blank line)[/color]
username=weiqin&password=1234 [color=red](请求正文)[/color]
1)、请求方法、URI、协议/版本
GET /sample.jsp HTTP/1.1
根据HTTP标准,HTTP请求可以使用多种请求方法。例如,HTTP 1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。
URI完整的指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头。
协议版本声明了通信过程中使用的HTTP的版本。
2)、请求头
请求头包含许多有关客户端环境和请求正文的有用信息。
3)、请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来是请求的正文。请求正文中可以包含客户提交的查询字符串信息。
4.2、HTTP响应
与HTTP请求类似,HTTP响应也由3个部分构成,分别是:协议、状态代码、描述,响应头,响应正文。
例如:
HTTP/1.1 200 OK
Server:ApacheTomcat/5.0
Date:Mon,6 Oct 2003 13:13:13 GMT
Content-Type:text/html
Last-Modified: Mon,6 Oct 2003 13:03:13 GMT
Content-Length:112
<html>
<head>
<title>HTTP响应示例</title>
</head>
<body>
Hello HTTP!
</body>
</html>
1)、协议、状态代码、描述
HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所使用的协议是HTTP 1.1,服务器已经成功地处理了客户端发出的请求。
2)、响应头
响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等。
3)、响应正文
响应正文就是服务器返回的HTML页面,响应头和正文之间也必须用空行分隔。
4.3、HttpServlet的功能
在了解了具体的HTTP协议规范后,可以更好地理解HttpServlet的作用。它能够根据客户发出的HTTP请求,生成相应的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创建HttpServletRequest对象,并把HTTP请求信息封装到HttpServletRequest对象中,这大大简化了HttpServlet解析请求数据的工作量。如果没有HttpServletRequest,HttpServlet只能直接处理Web客户发出的原始的字符串数据,有了HttpServletRequest后,只要调用HttpServletRequest的相关方法,就可以方便地读取HTTP请求中任何一部分信息。
HttpServletRequest中读取HTTP请求信息的常用方法:
getCookies():返回HTTP请求的Cookies
getRequestURI():返回HTTP请求URI
getQueryString():返回HTTP请求数据中的查询字符串
getMethod():返回HTTP请求方法
Servlet容器还向HttpServlet提供了HttpServletResponse对象,HttpServlet可以通过它来生成HTTP响应的每一部分内容。
HttpServletResponse提供的生成响应数据Header的方法:
addCookie(Coolie cookie):向HTTP响应中加入Cookie
setHeader(String name,String value):设置HTTP响应的Header。
4.4、Servlet容器响应Web客户请求的步骤:
(1)、Web客户向Servlet容器发出HTTP请求;
(2)、Servlet容器解析Web客户的HTTP请求;
(3)、Servlet容器创建一个HttpServletRequest对象,在这个对象中封装了HTTP请求信息;
(4)、Servlet容器创建一个HttpServletResponse对象;
(5)、Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
(6)、HttpServlet调用HttpServletRequest的有关方法,获取HTTP请求信息
(7)、HttpServlet调用HttpServletResponse的有关方法,生成响应数据
(8)、Servlet容器把HttpServlet的响应结果传给Web客户
5、创建HttpServlet的步骤
创建用户自己的HttpServlet类,通常涉及下列4个步骤:
(1)、扩展HttpServlet抽象类
(2)、覆盖HttpServlet的部分方法,如覆盖doGet或doPost方法
(3)、获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在HttpServletRequest对象中都以参数名/参数值的形式存放。
(4)、生成HTTP响应结果。通过HttpServletResponse对象可以生成响应结果。HttpServletResponse对象有一个getWriter()方法,该方法返回一个PrintWriter对象。使用PrinterWriter的print()或println()方法可以向客户端发送字符串数据流。
6、ServletContext和Web应用的关系
Servlet容器在启动时会加载Web应用,并为每个Web应用创建惟一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。
在ServletContext中设置的属性,在Web应用运行期间一直存在,当Web应用被关闭时,Servlet容器会销毁ServletContext对象,存储在ServletContext对象中的属性自然也不复存在。不同应用的ServletContext各自独立。
7、Servlet的特性及适用场合
虽然Servlet也可以用于生成动态网页,但这个功能已经逐渐让位给新锐JSP了,不过Servlet并没有因为江山代有才人而成为Java历史博物馆的古董,它依然身怀绝技笑傲江湖:
·自动启动
一般情况下,JSP只有在客户端第一次调用后,方才进行编译并初始化,而Servlet则可以通过web.xml的<load-on-startup>配置,使其在Web容器启动时自动初始化。可使用Servlet这个特性完成Web应用程序的初始化工作:如下载字典表、控制表、初始化配置信息等,启动某个后台进程等。
·路径匹配映射
Servlet可以通过web.xml 中<servlet-mapping>用通配符配置URI映射,对多个匹配的URI进行响应,而JSP只能通过一个具体的URI调用。这个特性可以使你在请求进入某个具体的页面前截获并处理它,许多Web应用框架,如Struts、Spring都利用了Servlet的这个特性,在此基础上创建构架。
·Servlet过滤器
Servlet过滤器继承于javax.servlet.Servlet并实现javax.servlet.Filter的类,在请求到达服务程序前和响应发往客户端前进行加工处理。如果有大量的页面都需要进行相同的处理,则可以使用一个Servlet过滤器对此一并处理。如你可以用Servlet过滤器进行编码转换、或者为每个页面添加一个统一的标题头等。
·Servlet监听器
J2EE定义了多个Web事件监听器接口,Servlet监听器是继承javax.servlet.Servlet并实现这些事件监听接口的类。如果 Web应用服务器对某个Web容器的事件感兴趣,就可以构造一个实现该事件监听接口的Servlet,以便在该事件发生时做相应的处理。灵活使用 Servlet监听器,可以使一些原来很难实现的操作变得易如反掌。
此外,如果一个动态网页的页面展现逻辑少,而业务处理逻辑多,如一个计算圆周率并返回结果页面的请求,这时使用Servlet比JSP更适合。所以需要创建一个动态网页,在到底使用Servlet还是JSP的问题上举棋不定时,请这记住下面这句经典的话:Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/nht1980/archive/2009/03/09/3973196.aspx