1.HTTP协议:
客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。
HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
2.HTTP协议简介:
HTTP使用请求-响应的方式进行传输,一个请求对应一个响应,并且请求只能是由客户端发起的。
HTTP协议的版本:HTTP/1.0、HTTP/1.1
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
3.HTTP请求:
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括:一个请求行、若干请求头、以及实体内容,如下所示 :
4.请求行:
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有: GET、 POST
用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
5.HTTP响应:
一个HTTP响应代表服务器向客户端回送的数据,它包括:一个状态行、若干响应头(消息头)、以及实体内容 。
6.状态行:
格式:HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
状态码 含义
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示成功接收请求并已完成整个处理过程,常用200
300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304
400~499 客户端的请求有错误,常用404
500~599 服务器端出现错误,常用 500
7.CGI 通用网关接口,实现页面的动态生成。Servlet是改进的CGI。
8.简介:Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
编写一个Java类,实现servlet接口。
把开发好的Java类部署到web服务器中。
9.Servlet容器:
Servlet容器为Java Web应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
也称为Servlet引擎
是一个编译好的可执行程序,它是web服务器与servlet间的媒介。负责将用户请求翻译成Servlet能够理解的形式传递给servlet,同时传给servlet一个对象使之可以送回响应
负责管理 servlet 的生命周期
Servlet不能独立运行,必须部署到Servlet容器中,由容器来实例化和调用Servlet方法
Servlet容器也称为Java Web应用容器或Servlet/JSP容器
目前流行的Servlet容器为:Tomcat Resin J2EE服务器:如weblogic、websphere等
10.web.xml文件:
通过web.xml文件,可以将web应用中的:
某个web资源配置为web应用首页
将servlet程序映射到某个url地址上
为web应用配置监听器
为web应用配置过滤器
但凡涉及到对web资源进行配置,都需要通过web.xml文件
举例:通过web.xml文件配置web应用首页再配置成网站主页。
注意:Web.xml文件必须放在web应用\WEB-INF目录下。
11.web.xml配置文件:
将 Servlet 组件 注册到容器中
Servlet容器根据 web.xml 文件的配置信息来找到要运行的Servlet类,并加载、执行
标签<servlet>用于注册servlet程序,包括两个子标签:
<servlet-mane>: 设置注册名称,不可冲突
<servlet-class>:指定当前注册的servlet的完整类名,包括类的包名
servlet中wet.xml中映射其访问路径,包括两个子标签:
<servlet-mane>: 用于指定已经注册过的servlet名称
<url-pattern>:用于设置servlet的对外访问路径
12.servlet执行过程:
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
1.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
2.装载并创建该Servlet的一个实例对象。
3.调用Servlet实例对象的init()方法。
4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
13.Tomcat容器处理请求过程:
1.用户链接指向一个Servlet
2.Tomcat创建两个对象:HttpServletRequest和HttpServletResponse
3.Tomcat找到Servlet,产生一个Servlet线程,并把创建的两个对象传递给这个Servlet线程
4.Tomcat调用Servlet的service()方法,service()方法会调用doGet()或doPost
5.doGet()生成动态页面,传递给Response对象
6.Tomcat把Response对象转换成一个HTTP响应,发给请求的用户。
14.servlet API:
包含 javax.servlet.* 和 javax.servlet.http.* 两个软件包
javax.servlet 包含所有 Servlet 实现和扩展到通用接口和类(与HTTP协议无关的Servlet类)
javax.servlet.http 包含与HTTP协议相关的功能
所有servlet须实现 javax.servlet.Servlet 接口。可以通过直接或继承方式实现
GenericServlet 和 HttpServlet 两个类实现了Servlet 的所有接口。
15.Servlet的实现:
通过继承 HttpServlet 实现 自定义 Servlet
Server 端响应方法:doGet(), doPost()
复写 doGet 或者 doPost 方法
通过HttpServletRequest,可以得到所有的输入数据,比如表单数据、HTTP请求报头等客户信息
通过HttpServletResponse可以指定输出信息
接口 : HttpServletRequest
接口 : HttpServletResponse
16.<load-on-startup>元素:
如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。
举例:
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
用途:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据。
里面的值越小越早被调用,一般是2或3
17.缺省servlet
如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。
凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。
18.Servlet接口实现类:
Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。
HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。
19.Servlet接口:
概述:定义了所有Servlet需要实现的方法
Servlet接口的常用方法:
方法名称 功能描述
public void init(ServletConfig config) 由 servlet 容器调用,用于完成Servlet对象在处理客户请求前的初始化工作
public void service(ServletRequest req, ServletResponse res) 由 servlet 容器调用,用来处理客户端的请求
public void destroy() 由 servlet 容器调用,释放Servlet对象所使用的资源
public ServletConfig getServletConfig() 返回ServletConfig 对象,该对象包含此 servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init() 方法的对象
public String getServletInfo() 返回有关 servlet 的信息,比如作者、版本和版权。返回的字符串是纯文本,而不是任何种类的标记(比如 HTML、XML,等等)
20.init()方法:
Servlet实例化之后,Servlet容器会调用init()方法让Servlet对象在处理客户请求前可以完成一些初始化的工作,例如,建立数据库的连接,获取配置信息等
对于每一个Servlet实例,init()方法只能被调用一次
init()方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数。
可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。
21.ServeltConfig对象:
在Servlet初始化过程中获取配置信息
一个Servlet只有一个ServletConfig对象
ServletConfig的常用方法
方法名称 功能描述
public String getInitParameter(String name) 获取web.xml中设置的以name命名的初始化参数值
public ServletContext getServletContext( ) 返回Servlet的上下文对象引用
22.ServletContext对象:
Servlet引擎为每个web应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在Servletconfig对象中,调用Servlet.getServletContext方法可以返回ServletContext对象的应用
由于一个web应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为application对象(web应用程序对象)
功能:
获取web应用程序的初始化参数
记录日志
Application域范围的属性
访问资源文件
获取虚拟路径所映射的本地路径
Web应用程序之间的访问
ServletContext的其他方法
23.service()方法:
service()方法来处理客户端的请求
应用的逻辑实现和流程控制由重写service()方法来实现
容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)
一个用于对客户端进行响应的响应对象(类型为ServletResponse)
在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
24.ServletRequest对象:
HttpServletReques概述:
除了继承ServletRequest接口中的方法,还增加了一些用于读取请求信息的方法
HttpServletRequest的常用方法
方法名称 功能描述
public String getContextPath() 返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分
public Cookie[ ] getCookies() 返回客户端在此次请求中发送的所有cookie对象
public HttpSession getSession() 返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的session
public String getMethod() 返回此次请求所使用的HTTP方法的名字,如GET、POST
25.ServletResponse对象:
HttpServletResponse概述
除了继承ServletResponse接口中的方法,还增加了新的方法
HttpServletResponse的常用方法
方法名称 功能描述
public void addCookie(Cookie cookie) 增加一个cookie到响应中,这个方法可多次调用,设置多个cookie
public void addHeader(String name,String value) 将一个名称为name,值为value的响应报头添加到响应中
public void sendRedirect(String location) 发送一个临时的重定向响应到客户端,以便客户端访问新的URL
public void encodeURL(String url) 使用session ID对用于重定向的URL进行编码
26.destroy()方法
让Servlet对象可以释放它所使用的资源
当需要释放内存或者容器关闭时,容器就会调用Servlet对象的destroy()方法
在一个Servlet实例中, destroy()方法只能被调用一次
27.getServletConfig()方法
该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数
28.getServletInfo()方法
返回一个String类型的字符串,其中包括了关于Servlet的信息,例如,作者、版本和版权。该方法返回的应该是纯文本字符串,而不是任何类型的标记(HTML、XML等)。