HTTP与HttpServlet

(1)、HTTP协议

Web浏览器和服务器通过HTTP协议在Internet上发送和接收消息。HTTP是一种基于请求/响应模式的协议。客户端发送一个请求,服务器端返回对该请求响应。

HTTP使用可靠的TCP连接,默认端口是80。

(2)、HTTP请求

HTTP请求由3个部分构成,分别是:

l  请求方法URI协议/版本

l  请求头(Request Header)

l  请求正文

下面是一个HTTP请求的例子:

GET/sample.jspHTTP/1.1

 

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=ssss&password=1234

 

1>、请求方法URI协议/版本

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1”代表协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

2>、请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

3>、请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=rrrro&password=1234

在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

HTTP响应

与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

l  协议状态版本代码描述

l  响应头(Response Header)

l  响应正文

下面是一个HTTP响应的例子:

HTTP/1.1 200 OK

 

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

 

<html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

1>、协议 状态代码描述

HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):

HTTP/1.1 200 OK

2>、响应头(Response Header)

响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

  Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

3>、响应正文

响应正文就是服务器返回的HTML页面:

  <html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

响应头和正文之间也必须用空行分隔。  

(3)HTTPServlet的功能

在了解具体的HTTP协议规范后,可以更好地理解HttpServlet的作用,它能够根据客户发出HTTP请求,生成相应的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对象中,这大大简化了HttpServlet解析请求数据的工作量。如果没有HttpRequest,HttpServlet只能直接处理Web客户发出的原始的字符数据,有了HttpRequest后,只要调用HttpServletRequest的相关方法,就可以方便地读取HTTP请求中任何一部分信息,HttpServletRequest中读取HTTP请求信息的常用方法参见下表

HttpServletRequest对象的常用方法


方法


描述


getCookie()


返回HTTP请求的Cookies


getHeader(String name)


返回参数指定的HTTP请求的Header数据


getRequestURI()


返回HTTP请求的URI


getQueryString()


返回HTTP请求数据中的查询字符串


getMethod()


返回HTTP请求方法

Servlet容器还向HttpServlet提供了HttpServletResponse对象,HttpServlet可以通过它来生成HTTP响应的每一部分内容,HttpServletResponse提供了生成响应数据Header的方法

HttpServletResponse对象的常用方法


方法


描述


addCookie(Cookie cookie)


向HTTP响应中加入Cookie


setHeader(String name,String value)


设置HTTP响应的Header,如果参数name对应的Header已经存在,则覆盖原来的Header数据


addHeader(String name,String value)


向HTTP响应中加入Header

(4)Servlet容器响应Web客户请求流程的UML时序图

在时序图中,从对象A到对象B的箭头,表示A向B发送一条消息,B接收到消息后,将执行相关的操作,因此也可理解为A调用B的方法。例如在UML时序图步骤5,表示Servlet容器调用HttpServlet的service()方法,对于步骤2,箭头的起点和终点都指向Servlet容器,表示Servlet容器调用自身的方法来解析HTTP请求信息。

1.      Web客户向Servlet容器发出HTTP请求;

2.      Servlet容器解析Web的HTTP请求;

3.      Servlet容器创建一个HttpRequest对象,在这个对象中封装了HTTP请求信息;

4.      Servlet容器创建一个HttpResponse对象;

5.      Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象为Service方法的参数传给HttpServlet对象;

6.      HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

7.      HttpServlet调用HttpResponse的有关方法,生成响应数据;

8.       Servlet容器把HttpServlet的响应结果传给Web客户

--------------------

++转载

时间: 2024-07-29 05:58:14

HTTP与HttpServlet的相关文章

Description Resource Path Location Type The superclass &quot;javax.servlet.http.HttpServlet&quot; was not foun

一段时间没亲自建新项目玩乐,今天建立了一Maven project的时候发现了以下异常,Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path index.jsp /easyBuy/src/main/webapp line 1 JSP Problem 经过查找原因,原来是因为忘记设置server

JavaWeb: 报错信息The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path

JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 好久不写Jsp,今天建立了一个Javaweb工程,并在eclipse中配置了Web容器Tomcat.原本开心的新建jsp页面,添加一个简单的Java类.可是,JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServl

The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 用eclipse做jsp文件,自动创立的文件表头出现这个报错,应该怎么处理?tomcat的插件已经安装上了. 有一处刚发现了,是中英文标点问题,这两处,一个是The word 'username' is not correctly spelled,还一个是The document body. Contains all

servlet、genericservlet、httpservlet之间的区别(转)

当编写一个servlet时,必须直接或间接实现servlet接口,最可能实现的方法就是扩展javax.servlet.genericservlet或javax.servlet.http.httpservlet当实现javax.servlet.servlet接口时必须实现5个方法 init(servletconfig   config)    service(servletrequest   req,servletresponse   resp)    destroy()    getservle

[Servlet]深入研究HttpServlet

HttpServlet概述 在大多数的Web应用程序中,客户端都是通过Http协议去访问服务器端的资源,而我们编写的Servlet主要是用于Http协议的请求和响应处理.为了快速开发应用于Http协议的Servlet类,Sun公司在javax.servlet.http包中提供了一个抽象类HttpServlet,它继承于GenericServlet,用于创建适合基于Http协议的Web Servlet. public abstract class HttpServlet extends Gener

eclipse:报错信息The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path

JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 今天建立了一个Javaweb工程,并在eclipse中配置了Web容器Tomcat.JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu

Servlet(三)HttpServlet

以HttpServlet创建Servlet 1.在FirstServlet同目录下建立HServlet.java package com.hunhun; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class HServlet extends HttpServlet{ <span style="white-space:pre"&g

Maven项目红色叹号+JavaWeb: 报错信息The superclass &amp;quot;javax.servlet.http.HttpServlet&amp;quot; was not found on the Java B

昨天写的关于解决JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java的方案非常好的攻克了这个错误,可是它没有全然的解决我的问题,Maven项目依旧有一个红色叹号存在.红色叹号存在的原因是:.classpath配置文件引用了某jar包,可是lib里却不存在此jar.我所遇到的问题又是一种新的情况,jar存在lib里存在,但还是报题目中的两个错误.细致研究发现我的java

javaweb笔记4之httpservlet

1 httpservlet简介 service方法是Servlet的入口方法,调用servlet会首先调用service方法.在service方法中,会根据请求方式分别调用不同的doXXX方法.例如,GET方式提交就会调用doGet方法.因为Get 和 Post方式是最常用的两种请求方式,所以在编写Servlet的时候,只需要覆盖doGet  和 doPost方法即可!然后, 在其中一个方法里面写逻辑代码,在另一个方法调用回第一个方法即可! 建议:工具看源码 2 HttpServletReque

Servlet,GenericServlet和HttpServlet的继承关系

HttpServlet是GenericServlet的子类. GenericServlet是个抽象类,必须给出子类才能实例化.它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字.配置.初始化参数的方法,其设计的是和应用层协议无关的,也就是说 你有可能用非http协议实现它. HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete,doPut, doTrace等方法对应处理http协议