Servlet基础知识

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Servlet基础知识引言:Applet技术是SUN公司推出的基于Java技术的客户端技术,而与Applet相对应的Servlet技术,是一种基于Java技术的服务器端Web开发技术。Servlet程序在服务器端运行,它可以根据用户的请求动态地生成具有个性化的Web页面。本讲内容:HTTP的请求与响应机制Servlet的请求与响应机制Web容器的概念Servlet的基本结构部署ServletServlet的生命周期一、HTTP的请求与响应机制在Internet中,网页(即HTML文件)是通过HTTP协议传输的。HTTP协议是TCP/IP协议栈中应用层的一个比较简单的协议,该协议定义了Web客户机与Web服务器之间的通信方式.1.客户机向服务器发出请求使用HTTP协议将客户端的请求传送到服务器端有两种方式:在浏览器的地址栏直接输入对Web服务器的请求,如:使用表单的ACTION属性指定处理表单请求的服务器程序,如:FORMMETHOD=GETACTION=…/FORM在客户机发出请求后,根据请求中URL的地址与端口号,客户机与服务器先建立连接,在连接建立成功后客户机将请求的具体信息发送到服务器。2.服务器响应客户请求当服务器接收到客户机的请求信息后,服务器对客户发出的请求进行认证,如果合法并且可以获得请求的资源,则服务器根据请求信息的不同,有如下两种处理方式:将请求的页面直接发送到客户机(静态页面方式)。如在对于上面介绍的第一种请求方式中,则服务器将welcome.html页面发送给客户机。如果客户的请求是发送到服务器处理程序的,只有被请求的服务器处理程序执行以后,才可以将有关信息发送到客户机(动态页面方式)。在这种方式下,服务器端就要部署Web处理程序,而Servlet编写的程序就可以用来处理客户发出的GET或POST请求。二、Servlet的请求与响应机制Servlet是一种可以处理客户请求的服务器端程序。那么Servlet是如何接受请求与响应请求的呢?在使用Servlet技术为服务器端开发服务程序时,编写好的Servlet服务程序被部署在Web服务器中(如何部署下面将介绍)。Web客户机(通常是浏览器)将HTTP请求发送给Web服务器,Web服务器将该请求转发给Web容器。Web容器将该处理请求工作委派给相应的Servlet程序,Servlet程序处理该请求并将处理结果转发给Web容器,Web容器通过Web服务器将该响应转发给客户机。客户机与服务器Servlet的交互过程:Servlet…客户机客户机请求服务器响应服务器数据库Web容器三、Web容器的概念Servlet程序与客户交互时,要经过Web容器。Java应用程序在运行时,系统应该提供一个运行时环境,这个运行时环境是指Java解释器程序和系统中的一些类库(API)。类似地,Servlet程序在运行时,也要为其提供一个执行程序所需的环境。在Servlet技术中,Web容器给Servlet程序提供了运行时的环境。三、Web容器的概念Web容器有两大功能:一个提供编写Servlet程序所需要的API;另外就是提供驻留并执行Servlet程序的环境。这个Servlet运行环境可以完成Servlet程序的实例化、初始化、调用服务方法和去除Servlet的功能,也就是说Web容器可以管理Servlet的生命周期。Servlet驻留在Web容器中,并由Web容器进行管理,因此我们也常说Servlet驻留在Web容器上。Web容器通过转发Web服务器和Servlet之间的请求与响应来充当两者之间的桥梁。四、Servlet的基本结构与Applet程序一样,Servlet程序也有其生命同期和定义好的程序框架。设计Applet程序是以java.applet.Applet类为框架结构的,同理设计Servlet程序要使用ServletAPI的javax.servlet包,javax.servlet包中定义了实现Servlet所要使用的一些接口和类。Servlet结构的核心内容由javax.servlet包中的javax.servlet.Servlet接口定义,该接口为Servlet提供了框架结构,并定义了一些方法,其中三个最重要的方法是init()、service()和destroy(),这三个方法定义了一个Servlet的基本生命周期。四、Servlet的基本结构init():对Servlet进行初始化。service():接收和响应客户请求。destroy():在Servlet结束时执行一些清除等收尾工作。要注意的是用户在新建一个Servlet类时,必须要实现该接口(就象Java小应用程序要继承Applet类一样)。具体实现方式有两种:一是直接实现该接口;二是间接地实现该接口(如Servlet也可以继承一个实现了javax.servlet.Servlet接口的类)。在一般情况下,开发Servlet时并不是直接实现javax.servlet.Servlet接口,而是继承javax.servlet包中的GenericServlet类,或继承javax.servlet.http包中的HttpServlet类。1、使用GernericServlet类实现Servletjavax.servlet包中的GenericServlet类实现了javax.servlet.Servlet接口。在GernericServlet类中定义的service()方法是一个抽象方法,其定义如下:publicabstractvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.io.IOException1、使用GernericServlet类实现Servlet继承GernericServlet类时,通常在service()方法中定义Servlet所要完成的功能,该方法有两个非常重要的参数request和response。这两个参数含义是:request是一个ServletRequest接口类型的实例,它包含发送给Servlet的信息,即用来保存客户机向服务器发出的请求信息,如客户端正在使用的协议、客户机IP地址、主机名、文本类型等。response是一个ServletResponse接口类型的实例,它可以设置发送到客户端的文档类型等信息。注意:service()方法抛出两个异常,因此在实现该方法时,这两个异常必须包含在声明中。1、使用GernericServlet类实现Servlet01:packagech8;02:importjava.io.*;03:importjavax.servlet.*;04:importjavax.servlet.http.*;05:publicclassHelloWorld1extendsGenericServlet{06:publicvoidservice(ServletRequestrequest,ServletResponseresponse)07:throwsServletException,IOException08:{09:response.setContentType(text/html);10:PrintWriterout=response.getWriter();11:out.println(html);12:out.println(head);13:out.println(titleHelloWorld!/title);14:out.println(/head);15:out.println(body);16:out.println(h1HelloWorld!/h1);17:out.println(/body);18:out.println(/html);19:}20:}1、使用GernericServlet类实现Servlet该程序的05行定义的类HelloWorld继承了GenericServlet类,06行实现了GenericServlet类的方法service(),第09行的setContentType()是一个HttpServletResponse类的方法,用于设置发送到客户端的文本类型,如果文本中包含中文信息则应该设置为:response.setContentType(text/html;charset=GB2312);如果不进行设置,则中文信息可能会出现乱码问题。第10行PrintWriterout=response.getWriter(),调用response的方法getWriter(),该方法可以返回一个输出流对象,该输出流对象可以将文本字符发送到客户端。11行到18行使用输出流对象out的println()方法向浏览器发送信息,通过其发送的信息可以看出,这些内容组成了一个完整的HTML文档。该文档将在浏览器上显示出“HelloWorld!”信息。1、使用GernericServlet类实现Servlet综上所述,使用GenericServlet类生成一个新的Servlet时,其程序有比较固定的格式,具体总结如下:package包名;//定义一个包importjava.io.*;importjavax.servlet.*;//以下是Servlet类的定义publicclassHelloWorldextendsGenericServlet{publicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html);//设置文档类型PrintWriterout=response.getWriter();//获得向浏览器发送数据的输出流对象//使用out.println()把响应信息发送到浏览器;…}}2、使用HttpServlet类实现Servletjavax.servlet.http包中的HttpServlet类继承了javax.servlet包中的GenericServlet类,而HttpServlet类中已经实现了service()方法。service()方法被调用时,它读取请求中存储的方法类型(即发出请求的表单中METHOD属性是GET还是POST),如果请求的方法类型是GET,则service()方法调用doGet()方法;如果请求的方法类型是POST,则service()方法调用doPost()方法。2、使用HttpServlet类实现ServletdoGet()方法的首部如下:protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOExceptiondoPost()方法的首部如下:protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,java.io.IOExceptiondoGet()方法和doPost()方法的两参数是相同的,它们也抛出相同的异常。2、使用HttpServlet类实现ServletHttpServletRequest和HttpServletResponse的含义是:HttpServletRequest是一个接口,request是一个实现了该接口类的对象,它由Web容器根据收到的客户请求信息负责构建,并将封装了浏览器请求信息的request传送到被请求的Ser

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功