您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Servlet技术基础知识
第五章Servlet技术基础知识•Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分,Servlet技术的推出,扩展了Java语言在服务器端开发的功能,巩固了Java语言在服务器端开发中的地位,而且现在使用非常广泛的JSP技术也是基于Servlet的原理,JSP+JavaBeans+Servlet成为实现MVC模式的一种有效的选择。在本章中将介绍Servlet的基础知识,并通过具体的示例介绍Servlet的强大功能。5.1Servlet简介•Servlet在本质上就是Java类,编写Servlet需要遵循Java的基本语法,但是与一般Java类所不同的是,Servlet是只能运行在服务器端的Java类,而且必需遵循特殊的规范,在运行的过程中有自己的生命周期,这些特性都是Servlet所独有的。另外Servlet是和HTTP协议是紧密联系的,所以使用Servlet几乎可以处理HTTP协议各个方面的内容,这也正是Servlet收到开发人员青睐的最大原因。5.1.1Servlet的工作原理•Servlet容器环境在HTTP通信和web服务器平台之间实现了一个抽象层。Servlet容器负责把请求传递给Servlet,并把结果返回给客户。在使用Servlet的过程中,并发访问的问题由Servlet容器处理,当多个用户请求同一个Servlet的时候,Servlet容器负责为每个用户启动一个线程,这些线程的运行和销毁由Servlet容器负责,而在传统的CGI程序中,是为每一个用户启动一个进程,因此Servlet的运行效率就要比CGI的高出很多。5.1.2Servlet的生命周期•Servlet是运行在服务器端的程序,所以Servlet的运行状态完全由Servlet容器维护,一个Servlet的生命周期一般有三个过程。1.初始化当一个Servlet被第一次请求时,Servlet引擎就初始化这个Servlet,初始化时调用init()方法完成初始化工作。2.提供服务当Servlet对象被创建后,就可以调用service()方法为用户提供服务。3.销毁Servlet通过调用Servlet的destroy()方法把内存中的Servlet对象销毁。5.1.3简单Servlet开发配置示例•JavaServletAPI包括两个基本的包,javax.servlet和javax.servlet.http,其中javax.servlet提供了用来控制Servlet生命周期所需的类和接口,是编写Servlet必需要实现的。javax.servlet.http提供了处理与HTTP相关操作的类和接口,每个Servlet必需实现Servlet接口,但是在实际的开发中,一般情况都是通过继承javax.servlet.http.HttpServlet或者javax.servlet.GenericServlet来间接实现Servlet接口。•HelloWorld.java•packageservlets;•importjava.io.*;•importjavax.servlet.*;•importjavax.servlet.http.*;•publicclassHelloWorldextendsHttpServlet{•publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)•throwsIOException,ServletException•{•response.setContentType(text/html);•PrintWriterout=response.getWriter();•out.println(html);•out.println(head);•out.println(titleHelloWorld!/title);•out.println(/head);•out.println(body);•out.println(h1HelloWorld!/h1);•out.println(/body);•out.println(/html);•}•}•publicabstractclassHttpServletextendsGenericServlet•implementsjava.io.Serializable•HttpServlet类通过调用指定到HTTP请求方法的方法实现service(),分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对象置入其HTTP指定子类。•publicinterfaceServletResponse•publicinterfaceHttpServletResponseextendsServletResponse•ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由servlet引擎创建.•StringgetCharacterEncoding()返回响应使用字符解码的名字。除非显式设置,否则为ISO-8859-1WritergetWriter()throwsIOException返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。voidsetContentLength(intlength)设置内容体的长度。voidsetContentType(Stringtype)设置内容类型。在HTTPservlet中即设置Content-Type头标。•编写一个Servlet要经过以下几个步骤:•(1)编写Servlet功能代码。•(2)把编译成功的Servlet功能代码类文件复制到当前应用项目的WEB-INF/classes目录下。•(3)在当前应用项目的web.xml文件中对Servlet进行配置,在web.xml中添加配置信息。5.1.4使用Servlet实现MVC开发模式•Java语言之所以受到开发人员支持,是因为Java语言实现科学方便的开发模式,在这些开发模式中,最出色而且应用最广的就是MVC模式,对于MVC模式的研究由来已久,但是一直没有得到很好的推广和应用,随着J2EE技术的成熟,MVC逐渐成为了一种常用而且重要的设计模式。MVC(Model-View-Controller)把应用程序的开发分为三个层面:视图层、控制层、模型层。视图层负责从用户获取数据和向用户展示数据,模型层负责处理业务逻辑和数据库底层操作,控制层负责处理视图和模型层的交互,控制层从视图层接受请求,然后从模型层取出对请求的处理结果,并把结果返回给视图层。在以上结构中,Servlet处于控制层,负责数据流量的控制功能。浏览器控制层Servlet浏览器视图层JSP模型层JavaBeanDB请求响应SelectViewInstantiate应用服务器数据库服务器MVC三层结构的内部关系5.2JSP页面调用Servlet的方法•在上面HelloWorld的示例程序中,我们直接在浏览器中输入具体的地址进行访问,在实际的应用中,不可能让用户在浏览器中直接输入Servlet的地址进行访问,一般情况下,可以通过调用Servlet进行访问,在这里介绍通过提交表单和超链接两种方式调用Servlet。5.2.1通过表单提交调用Servlet•在通过提交表单调用Servlet的时候,只需要把表单的action指向对应的Servlet即可,下面是一个简单的表单,通过这个表单可以调用指定的Servlet。•%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%•html•head•titleServlet接收表单示例/title•/head•body•fontsize=2•formaction=AcceptFormmethod=post•姓名:inputtype=textname=name/br•省份:inputtype=textname=provincebr•inputtype=submitvalue=提交•/form•/font•/body•/html•AcceptForm.java•packageservlets;•importjava.io.*;•importjavax.servlet.*;•importjavax.servlet.http.*;•publicclassAcceptFormextendsHttpServlet{•publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)•throwsIOException,ServletException{•response.setContentType(text/html);•response.setCharacterEncoding(gb2312);•PrintWriterout=response.getWriter();•Stringname=request.getParameter(name);•Stringprovince=request.getParameter(province);•out.println(fontsize='2');•out.print(提交的表单内容为:br);•out.print(姓名:+name+br);•out.print(省份:+province+br);•out.print(/font);•}•publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)•throwsIOException,ServletException{•doGet(request,response);•}•}Web.xml的Servlet配置信息•!--AcceptForm配置开始--•servlet•servlet-nameAcceptForm/servlet-name•servlet-classservlets.AcceptForm/servlet-class•/servlet•servlet-mapping•servlet-nameAcceptForm/servlet-name•url-pattern/AcceptForm/url-pattern•/servlet-mapping5.2.2通过超链接调用Servlet•在上面这个例子中,用户有输入的内容需要提交给服务器,所以需要用表单来调用Servlet,但是在没有输入的数据内容需要提交的情况下,使用表单就不是很合理了,在这里介绍Servlet的第二种调用方法,直接通过超链接的方式来调用Servlet,在这种情况下还可以给Servlet传递参数。•%@pagelanguage=javaimport=java.util.*contentType=text/html;charset=gb2312%•html•head•titleServlet接收链接传递参数示例/title•/head•body•fontsize=2•点击下面的链接:br•ahref=AcceptLink?name=Bill调用Servlet,并传递参数/a•/font•/body•/html•packageservlets;•importjava.io.IOException;•importjava.i
本文标题:Servlet技术基础知识
链接地址:https://www.777doc.com/doc-2849380 .html