版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章Servlet编程Servlet是Java
Web程序的核心。JSP和几乎所有的Java
Web框架(如Struts、Webwork)在底层的实现都会看到Servlet的影子。因此,充分了解Servlet的原理和使用方法,对于以后学习Struts等Web框架将起到非常大的帮助。本章我们将为大家介绍Servlet的基础知识,并通过具体的示例介绍Servlet的强大功能。第5章Servlet编程Servlet是JavaWeb15.1Servlet基础Servlet在本质上就是Java类。编写Servlet需要遵循Java的基本语法,但是与一般Java类所不同的是。Servlet是只能运行在服务器端的Java类,而且必需遵循特殊的规范,在运行的过程中有自己的生命周期。5.1Servlet基础Servlet在本质上就是Jav25.1.1什么是ServletServlet是运行于服务器端的、按照其自身规范编写的Java应用程序。我们可以用图5.1来解释这个概念。Servlet的主要功能是用来接受、处理客户端请求,并把处理结果返回到客户端显示。其作用过程如图5.2所示。5.1.1什么是ServletServlet是运行于服务35.1.2Servlet的生命周期Servlet需要在特定的容器中才能运行,在这里所说的容器即Servlet运行的时候所需的运行环境。一般情况下,市面上常见的JavaWebServer都可以支持Servlet,例如Tomcat、Resin、Weblogic、WebSphere等,在本书中采用Tomcat作为Servlet的容器,由Tomcat为Servlet提供基本的运行环境。Servlet的生命周期指的是Servlet从被Web服务器加载到它被销毁的整个生命过程。这个过程如图5.3所示。5.1.2Servlet的生命周期Servlet需要在特45.1.2Servlet的生命周期从图5.3中我们呢可以看出,Servlet生命周期的执行大致分为4个步骤,如图5.4所示。在以上几个阶段中,Servlet对外提供服务阶段是最重要的。service()方法是编程人员真正要关心的方法。因为它才是Servlet真正开始响应客户端请求,并且处理业务逻辑的方法。service()接收到客户端请求后,再调用该Servlet的相应的方法去处理请求。所以程序员在编写自己的Servlet时,一般只需要重写方法。在该方法中去处理客户端请求,并把处理结果返回。5.1.2Servlet的生命周期从图5.3中我们呢可以55.2简单Servlet开发配置示例在这一节中我们主要应用Servlet编写一个HelloWorld程序,实现向客户端浏览器中输出“HelloWorld”信息。在系统中创建的第一个Servlet程序系统会为我们自动生成web.xml配置文件,但是以后的Servlet程序就需要我们自己来配置了。即一般情况下都需要在当前应用项目的web.xml配置文件中对各个Servlet进行配置,其中web.xml文件的位置在当前项目应用的WEB-INF文件夹下。我们就结合图5.8的示例来讲解如何对Servlet进行配置,如图5.9所示。5.2简单Servlet开发配置示例在这一节中我们主要应65.2简单Servlet开发配置示例总之,编写一个Servlet要经过以下三个步骤:(1)编写Servlet的功能代码,即实现功能的代码类。(2)把编译成功的Servlet功能代码类文件拷贝到当前应用项目的WEB-INF/classes目录下。(3)在当前应用项目的web.xml文件中对Servlet进行配置,即在web.xml中添加配置信息。经过这样三个步骤我们就可以通过浏览器访问这个Servlet了。5.2简单Servlet开发配置示例总之,编写一个Ser75.3使用HttpServlet处理客户端请求HttpServlet是使用HTTP协议的Web服务器的Servlet类,这个类已经被系统定义好。该类的一些方法,如doGet()方法、doPost()方法等,提供了处理客户端请求的接口。在实际编程中,程序员需要继承这个类,并重写上述方法,去编写自己的Servlet。使用重写后的方法,就可以完成对客户端请求进行处理。5.3使用HttpServlet处理客户端请求HttpS85.3.1处理Get请求doGetdoGet()方法是HttpServlet类中用来处理Get请求的方法。用户通过继承HttpServlet,重写doGet()方法,实现对客户端的Get请求进行处理。要调用doGet()方法,必须在客户端的表单里指定请求的类型为Get。doGet()方法的语法格式如图5.10所示。5.3.1处理Get请求doGetdoGet()方法是H95.3.2处理Post请求doPostdoPost()是HttpServlet中用于处理Post请求的方法。如果要调用doPost()方法,必须在表单中指定Post请求。doPost()方法与doGet()方法的用法一般来说没什么区别,doGet()方法用于处理httpget请求,doPost()方法用于外理httppost请求。至于它们的不同,简单的说,get是通过httpheader来传输数据,有字数限制,而post则是通过httpbody来传输数据,没有字数的限制。doPost()方法的语法格式如图5.14所示。5.3.2处理Post请求doPostdoPost()是105.3.2处理Post请求doPost下面我们来为大家介绍一下javax.servlet.http提供的HTTPServlet应用编程接口。创建Servlet,需要扩展HttpServlet类,HttpServlet类包含init()、destroy()、service()等方法,其中init()和destroy()方法是继承的。具体的方法及方法描述如表5.1所示。当服务器调用sevlet的Service()、doGet()和doPost()这三个方法时,均需要“请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个路径。方法名方法描述init()方法服务器装入Servlet时执行。可以配置服务器,在启动服务器或客户机首次访问Servlet时装入Servletservice()方法Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数destroy()方法在服务器停止且卸装Servlet时执行该方法。可以将Servlet作为服务器进程的一部分来关闭GetServletConfig()方法GetServletConfig()方法返回一个ServletConfig对象,该对象用来返回初始化参数和ServletContext。ServletContext接口提供有关servlet的环境信息GetServletInfo()方法GetServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权等5.3.2处理Post请求doPost下面我们来为大家介115.4
JSP页面调用Servlet在上面HelloWorld的示例程序中,我们直接在浏览器中输入具体的地址进行访问。在实际的应用中,不可能让用户在浏览器中直接输入Servlet的地址进行访问。一般情况下,可以通过调用Servlet进行访问,在这里介绍通过提交表单和超链接两种方式调用Servlet。5.4JSP页面调用Servlet在上面HelloWor125.4.1通过表单提交调用Servlet在通过提交表单调用Servlet的时候,只需要把表单的action指向对应的Servlet即可。5.4.1通过表单提交调用Servlet在通过提交表单调135.4.2通过超链接调用Servlet当用户有输入的内容需要提交给服务器时,我们可以用表单来调用Servlet。如果在没有输入的数据内容需要提交的情况下,我们可以直接通过超链接的方式来调用Servlet,并对其传递参数。5.4.2通过超链接调用Servlet当用户有输入的内容145.5
Servlet文件操作在JSP的开发过程中,我们常常把相关内容存储为文件。在Servlet中我们可以使用输入输出流实现对文件的读写。同时,使用Servlet还可以很方便的实现文件的下载操作。这一节我们就来学习如何实现Servlet的文件操作。5.5Servlet文件操作在JSP的开发过程中,我们常155.5.1Servlet读取文件我们举一个实例FileRead.java来读取一个文本文件content.txt的内容,并且在页面上打印文件的内容。5.5.1Servlet读取文件我们举一个实例FileR165.5.2Servlet写文件Servlet写文件的处理方法和读取文件的处理方法非常类似,即把文件输入流换成文件输出流。我们也可以来看一个写文件示例。5.5.2Servlet写文件Servlet写文件的处理175.5.3Servlet下载文件利用Servlet可以很方便地实现文件的下载,我们只需要对服务器的响应对象response进行简单的设置即可。5.5.3Servlet下载文件利用Servlet可以很185.6Servlet的应用Servlet是与HTTP协议紧密结合的,使用Servlet几乎可以处理HTTP协议各个方面的内容,在本节的几个示例程序中,将集中展示Servlet在HTTP方面的具体应用。5.6Servlet的应用Servlet是与HTTP协议195.6.1获取请求信息头部内容当用户访问一个页面的时候,会提交一个HTTP请求给服务器的Servlet引擎,在这个请求中包含了HTTP文件的详细属性信息。我们可以应用request.getHeaderNames()方法来获取请求信息头部内容。5.6.1获取请求信息头部内容当用户访问一个页面的时候,205.6.2获取请求信息在上面的Servlet示例中,我们取出了HTTP文件头信息,在Servlet中还可以很方便取出用户发出请求对象自身的信息。这些信息是和用户的请求密切相关的,例如用户提交请求所使用的协议,客户提交表单的方法是POST还是GET等。5.6.2获取请求信息在上面的Servlet示例中,我们215.6.3获取参数信息有关用户请求的参数信息,也可以通过Servlet来获取。这种参数既包括以POST方法或者是GET方法提交的表单,也包括直接使用超链接传递的参数。Servlet都可以使用request.getParameter()方法取得这些参数信息并且加以处理。5.6.3获取参数信息有关用户请求的参数信息,也可以通过225.6.4
Cookie操作Cookie是一种在客户端保存信息的技术。读者在浏览网页时可能会注意到这样的现象,如在打开某个登录网页时,在第一次打开时,用户名文本框是空的,当输入一个用户名,并成功登录后。在第二次打开这个登录网页时,在第一次输入的用户名会被自动填入这个用户名文本框,就算重启计算机后,仍然如此。其实这就是Cookie所起的作用。5.6.4Cookie操作Cookie是一种在客户端保存235.6.4
Cookie操作在Servlet中,使用java.servlet.http.Cookie类来封装一个Cookie消息,在HttpServletResponse接口中定义了一个addCookie方法来向浏览器发送Cookie消息(也就是Cookie对象),在HttpServletRequest接口中定义了一个getCookies方法来读取浏览器发送的Web服务器的所有Cookie消息。Cookie类中定义了生成和提取Cookie消息的各个属性的方法。Cookie类只有一个构造方法,它的语法结构如图5.47所示。5.6.4Cookie操作在Servlet中,使用jav245.6.4
Cookie操作Cookie类中的其他常用方法如表5.3所示。方法名方法描述getName方法用于获得Cookie的名称setValue和getValue方法分别用于设置和获得Cookie的值setMaxAge和getMaxAge方法分别用于设置和获得Cookie在客户机的有效时间,也就是在在客户机上的有效秒数setPath和getPath方法分别用于设置和获得当前Cookie的有效Web路径setDomain和getDomain方法分别用于设置和获得当前Cookie的有效域setComment和getComment方法分别用于设置和返回当前Cookie的注释部分setVersion与getVersion方法分别用于设置和获得当前Cookie的协议版本setSecure和getSecure方法分别用于设置和获得当前Cookie是否只能使用安全的协议传输Cookie5.6.4Cookie操作Cookie类中的其他常用方法255.7Session技术session对象用来保存每个用户的用户信息和会话状态。session对象由服务器端自动创建,可以跟踪每个用户的操作状态。用户首次登录系统时服务器会自动给用户分配唯一标识的sessionid,可以用来区分开其他用户。相对于Cookie,session是存储在服务器端的会话,相对安全,而且其存储长度限制也大大的扩大了。5.7Session技术session对象用来保存每个用265.7.1HttpSession接口方法在Servlet中使用HttpSession对象来描述Session。一个HttpSession对象就是一个Session。使用HttpServletRequest接口的getSession方法来获得一个HttpSession对象。HttpSession接口中的主要方法如表5.4所示。方法名方法描述getId方法用于返回当前HttpSession对象的SessionIDgetCreationTime方法用于返回当前的HttpSession对象的创建时间getLastAccessedTime方法用于返回当前HttpSession对象的上一次被访问的时间setMaxInactiveInterval和getMaxInactiveInterval方法分别用来设置和返回当前HttpSession对象的可空闲的最长时间(单位:秒),这个时间也就是当前会话的有效间隔isNew方法用来判断当前的HttpSession对象是否是新创建的,如果是则返回true,否则返回falseisvalidate方法用于强制当前的HttpSession对象失效,这样Web服务器可以立即释放该HttpSession对象getServletContext方法用于返回当前HttpSession对象所属的Web应用程序的ServletContext对象setAttribute方法用于将一个String类型的ID和一个对象相关联,并将其保存在当前的HttpSession对象中getAttribute方法用于返回一个和String类型的ID相关联的对象remoteAttribute方法用于删除与一个String类型的ID相关联的对象5.7.1HttpSession接口方法在Servlet275.7.1HttpSession接口方法getSession是HttpServletRequest接口的方法,这个方法用于返回与当前请求相关的HttpSession对象,该方法有两种重载形式,它们的定义语法如图5.52所示。5.7.1HttpSession接口方法getSessi285.7.2通过Cookie跟踪Session客户端必须通过一个SessionID才能找到以前在服务端创建的某一个HttpSession对象。通过SessionID找HttpSession对象的过程也叫做Session跟踪。一般客户端的SessionID通过HTTP请求消息头的Cookie字段发送给服务端,然后服务端通过getSession方法读取Cookie字段的值,以确定是否需要新建一个HttpSession对象,还是获得一个已经存在的HttpSession对象,或是什么都不做,直接返回null。当HttpSession对象是第一次创建时,向这个对象中写一个字符串值。如果HttpSession对象不是第一次创建,那么就将保存在HttpSession对象中的字符串值输出到客户端。5.7.2通过Cookie跟踪Session客户端必须通295.7.3通过重写URL跟踪Session如果客户端浏览器不支持Cookie或是将Cookie功能关闭,那么就无法使用Cookie来传递SessionID。为了在这种情况下仍然可以使用Session,Servlet规范提供了一种补充会话管理机制。这种管理机制允许在Cookie无法工作的情况下使用URL参数来传递SessionID。要想通过URL来发送SessionID,必须要重写URL。HttpServletResponse提供了两个方法用于重写URL,如图5.56所示。5.7.3通过重写URL跟踪Session如果客户端浏览305.8Servlet过滤器过滤器是小型的Web组件,它负责拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。Servlet过滤器应用非常广泛,有拦截的地方一般都可以用到过滤器。当前Web应用中过滤器已经是不可或缺的部分之一。5.8Servlet过滤器过滤器是小型的Web组件,它负315.8.1过滤器的方法和配置与过滤器相关的Servlet共包含3个简单的接口,分别是Filter、FilterChain及FilterConfig。要实现过滤器功能,必须先实现Filter接口。Filter接口定义了3个方法,如图5.61所示。Servlets过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件(即web.xml)中进行配置部署。5.8.1过滤器的方法和配置与过滤器相关的Servlet325.8.1过滤器的方法和配置对于过滤器的映射配置,可以将过滤器映射到一个或多个Servlet和JSP文件中。以Servlet为例,我们来看其映射配置,如图5.63所示。注意:在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素。5.8.1过滤器的方法和配置对于过滤器的映射配置,可以将335.8.2过滤器应用实例——禁止未授权的IP访问站点在实际的应用中,可能会遇到这样的情况,需要对某些IP进行访问限制,不让非法的IP访问应用系统,这个时候就需要用到过滤器进行限制,当一个用户发出访问请求的时候,首先通过过滤器进行判断,如果用户的IP地址被限制,就禁止访问,只有合法的IP才可以继续访问。5.8.2过滤器应用实例——禁止未授权的IP访问站点在实345.8.3过滤器应用实例——版权过滤器现在的网页都会在尾部加上版权标志,对于这一操作,我们可以运用过滤器很方便地实现它。5.8.3过滤器应用实例——版权过滤器现在的网页都会在尾355.9Servlet监听器Servlet监听器是当今Web应用开发的一个重要组成部分。Servlet监听器主要用来对Web应用进行监听和控制,极大地增强了Web应用的事件处理能力。一般来说,Servlet监听就是指一些特殊的Servlet类,这些类可以监听Web应用的上下文信息、Servlet会话信息、Servlet请求信息。在实际操作中,程序员需要继承或实现一些已定义好的类或接口,从而编写出自己用于监听的类。这些类对特定的信息进行监听。一旦被监听的事件发生,这些类会自动调用相应的方法去执行指定的操作。5.9Servlet监听器Servlet监听器是当今We365.9.1监听Servlet上下文信息Servlet上下文信息主要是指关于ServletContext接口的一些信息,比如ServletContext的创建和删除,Servlet属性的增加、删除和修改等。这样就可以实现对Servlet上下文信息的跟踪和记录。为了实现这样的功能,程序员需要实现ServletContextListener和ServletContextAttributeListener接口,从而编写出自己的Servlet类。ServletContext接口的主要方法如表5.4所示。方法名称方法描述getAttribute(Stringname)返回Servlet环境对象中指定的属性对象。如果该属性对象不存在,返回空值getAttributeNames()返回一个Servlet环境对象中可用的属性名的列表getContext(Stringuripath)返回一个Servlet环境对象,这个对象包括了特定URI路径的Servlets和资源,如果该路径不存在,则返回一个空值getRealPath(Stringpath)返回与一个符合该格式的虚拟路径相对应的真实路径的StringgetResource(Stringuripath)返回一个URL对象,该对象反映位于给定的URL地址的Servlet环境对象已知的资源getServerInfo()返回一个String对象,该对象至少包括Servlet引擎的名字和版本号voidlog(Stringmsg,Throwablet)写指定的信息到一个Servlet环境对象的log文件中setAttribute(Stringname,Objecto)给予Servlet环境对象中你所指定的对象一个名称removeAttribute(Stringname)从指定的Servlet环境对象中删除一个属性5.9.1监听Servlet上下文信息Servlet上下375.9.1监听Servlet上下文信息在使用这个监听器之前还需要对Web模块中的web.xml配置文件进行配置,配置代码如图5.75所示。然后我们就可以编写一个JSP程序testListener.jsp来操作ServletContext的属性,看监听器程序做出什么反应。5.9.1监听Servlet上下文信息在使用这个监听器之385.9.2监听HTTP会话信息HTTP会话信息指的是Session对象的创建和销毁、会话中属性的设置请求、会话的状态和会话的绑定信息等。通过对HTTP会话信息的监听,可以进行一些很有用的操作,比如,统计当前会话的数目、设置某个对话的属性、了解某个对话的状态等。与ServletContext监听的实现方法类似,对HTTP会话的监听也是通过实现特定的接口来完成的。监听HTTP会话信息需要使用到三个接口类:HttpSessionListener、HttpSessionActivationListener和HttpSessionAttributeListener接口。5.9.2监听HTTP会话信息HTTP会话信息指的是Se395.9.2监听HTTP会话信息这些接口的主要方法如表5.5所示。方法名方法描述sessionCreated(HttpSessionEventarg0)方法进行Http会话创建的监听,如果Http会话被创建将调用该方法sessionDestroyed(HttpSessionEventarg0)方法对Http会话销毁进行监听,如果某个Http会话被释放将调用该方法sessionDidActivate(HttpSessionEventarg0)方法对Http会话处于active情况进行监听sessionWillPassivate(HttpSessionEventarg0)方法对Http会话处于passivate情况进行监听attributeAdded(HttpSessionBindingEventarg0)方法对Http会话中属性添加进行监听attributeReplaced(HttpSessionBindingEventarg0)方法对Http会话中属性修改进行监听attributeRemoved(HttpSessionBindingEventarg0)方法对Http会话中属性删除进行监听5.9.2监听HTTP会话信息这些接口的主要方法如表5.405.9.3对客户端请求进行监听客户端请求信息是指请求对象的创建、销毁以及其属性的添加、更改和删除。一旦可以对客户端发向服务器的请求进行监听,就可以对它们进行识别,然后统一处理。对客户端请求信息的监听的实现方法与上面两种类似,通过实现ServletRequestListener和ServletRequestAttributeListener接口来完成。这些接口的主要方法如表5.6所示。方法名方法描述ServletRequestListener()方法监听客户端请求的创建和销毁attributeAdded(HttpSessionBindingEventarg0)方法对Http会话中属性添加进行监听attributeReplaced(HttpSessionBindingEventarg0)方法对Http会话中属性修改进行监听attributeRemoved(HttpSessionBindingEventarg0)方法对Http会话中属性删除进行监听5.9.3对客户端请求进行监听客户端请求信息是指请求对象415.10小结本章首先介绍了Servlet编程方面的基础知识,然后在此基础上介绍了Servlet的配置和处理方法,接着我们为大家讲解了如何利用JSP页面调用Servlet和有关Servlet的文件操作,最后我们通过实例讲解了Servlet的具体应用和过滤器、监听器的知识。本章的重点是Servlet的文件操作以及Servlet应用方面的知识,难点是难点是Session技术以及Servlet过滤器、监听器知识的理解和应用。熟练掌握Servlet是学好JavaWeb技术的基本要求,所以读者要多加练习,以打好基础。5.10小结本章首先介绍了Servlet编程方面的基础知42第5章Servlet编程Servlet是Java
Web程序的核心。JSP和几乎所有的Java
Web框架(如Struts、Webwork)在底层的实现都会看到Servlet的影子。因此,充分了解Servlet的原理和使用方法,对于以后学习Struts等Web框架将起到非常大的帮助。本章我们将为大家介绍Servlet的基础知识,并通过具体的示例介绍Servlet的强大功能。第5章Servlet编程Servlet是JavaWeb435.1Servlet基础Servlet在本质上就是Java类。编写Servlet需要遵循Java的基本语法,但是与一般Java类所不同的是。Servlet是只能运行在服务器端的Java类,而且必需遵循特殊的规范,在运行的过程中有自己的生命周期。5.1Servlet基础Servlet在本质上就是Jav445.1.1什么是ServletServlet是运行于服务器端的、按照其自身规范编写的Java应用程序。我们可以用图5.1来解释这个概念。Servlet的主要功能是用来接受、处理客户端请求,并把处理结果返回到客户端显示。其作用过程如图5.2所示。5.1.1什么是ServletServlet是运行于服务455.1.2Servlet的生命周期Servlet需要在特定的容器中才能运行,在这里所说的容器即Servlet运行的时候所需的运行环境。一般情况下,市面上常见的JavaWebServer都可以支持Servlet,例如Tomcat、Resin、Weblogic、WebSphere等,在本书中采用Tomcat作为Servlet的容器,由Tomcat为Servlet提供基本的运行环境。Servlet的生命周期指的是Servlet从被Web服务器加载到它被销毁的整个生命过程。这个过程如图5.3所示。5.1.2Servlet的生命周期Servlet需要在特465.1.2Servlet的生命周期从图5.3中我们呢可以看出,Servlet生命周期的执行大致分为4个步骤,如图5.4所示。在以上几个阶段中,Servlet对外提供服务阶段是最重要的。service()方法是编程人员真正要关心的方法。因为它才是Servlet真正开始响应客户端请求,并且处理业务逻辑的方法。service()接收到客户端请求后,再调用该Servlet的相应的方法去处理请求。所以程序员在编写自己的Servlet时,一般只需要重写方法。在该方法中去处理客户端请求,并把处理结果返回。5.1.2Servlet的生命周期从图5.3中我们呢可以475.2简单Servlet开发配置示例在这一节中我们主要应用Servlet编写一个HelloWorld程序,实现向客户端浏览器中输出“HelloWorld”信息。在系统中创建的第一个Servlet程序系统会为我们自动生成web.xml配置文件,但是以后的Servlet程序就需要我们自己来配置了。即一般情况下都需要在当前应用项目的web.xml配置文件中对各个Servlet进行配置,其中web.xml文件的位置在当前项目应用的WEB-INF文件夹下。我们就结合图5.8的示例来讲解如何对Servlet进行配置,如图5.9所示。5.2简单Servlet开发配置示例在这一节中我们主要应485.2简单Servlet开发配置示例总之,编写一个Servlet要经过以下三个步骤:(1)编写Servlet的功能代码,即实现功能的代码类。(2)把编译成功的Servlet功能代码类文件拷贝到当前应用项目的WEB-INF/classes目录下。(3)在当前应用项目的web.xml文件中对Servlet进行配置,即在web.xml中添加配置信息。经过这样三个步骤我们就可以通过浏览器访问这个Servlet了。5.2简单Servlet开发配置示例总之,编写一个Ser495.3使用HttpServlet处理客户端请求HttpServlet是使用HTTP协议的Web服务器的Servlet类,这个类已经被系统定义好。该类的一些方法,如doGet()方法、doPost()方法等,提供了处理客户端请求的接口。在实际编程中,程序员需要继承这个类,并重写上述方法,去编写自己的Servlet。使用重写后的方法,就可以完成对客户端请求进行处理。5.3使用HttpServlet处理客户端请求HttpS505.3.1处理Get请求doGetdoGet()方法是HttpServlet类中用来处理Get请求的方法。用户通过继承HttpServlet,重写doGet()方法,实现对客户端的Get请求进行处理。要调用doGet()方法,必须在客户端的表单里指定请求的类型为Get。doGet()方法的语法格式如图5.10所示。5.3.1处理Get请求doGetdoGet()方法是H515.3.2处理Post请求doPostdoPost()是HttpServlet中用于处理Post请求的方法。如果要调用doPost()方法,必须在表单中指定Post请求。doPost()方法与doGet()方法的用法一般来说没什么区别,doGet()方法用于处理httpget请求,doPost()方法用于外理httppost请求。至于它们的不同,简单的说,get是通过httpheader来传输数据,有字数限制,而post则是通过httpbody来传输数据,没有字数的限制。doPost()方法的语法格式如图5.14所示。5.3.2处理Post请求doPostdoPost()是525.3.2处理Post请求doPost下面我们来为大家介绍一下javax.servlet.http提供的HTTPServlet应用编程接口。创建Servlet,需要扩展HttpServlet类,HttpServlet类包含init()、destroy()、service()等方法,其中init()和destroy()方法是继承的。具体的方法及方法描述如表5.1所示。当服务器调用sevlet的Service()、doGet()和doPost()这三个方法时,均需要“请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个路径。方法名方法描述init()方法服务器装入Servlet时执行。可以配置服务器,在启动服务器或客户机首次访问Servlet时装入Servletservice()方法Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数destroy()方法在服务器停止且卸装Servlet时执行该方法。可以将Servlet作为服务器进程的一部分来关闭GetServletConfig()方法GetServletConfig()方法返回一个ServletConfig对象,该对象用来返回初始化参数和ServletContext。ServletContext接口提供有关servlet的环境信息GetServletInfo()方法GetServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权等5.3.2处理Post请求doPost下面我们来为大家介535.4
JSP页面调用Servlet在上面HelloWorld的示例程序中,我们直接在浏览器中输入具体的地址进行访问。在实际的应用中,不可能让用户在浏览器中直接输入Servlet的地址进行访问。一般情况下,可以通过调用Servlet进行访问,在这里介绍通过提交表单和超链接两种方式调用Servlet。5.4JSP页面调用Servlet在上面HelloWor545.4.1通过表单提交调用Servlet在通过提交表单调用Servlet的时候,只需要把表单的action指向对应的Servlet即可。5.4.1通过表单提交调用Servlet在通过提交表单调555.4.2通过超链接调用Servlet当用户有输入的内容需要提交给服务器时,我们可以用表单来调用Servlet。如果在没有输入的数据内容需要提交的情况下,我们可以直接通过超链接的方式来调用Servlet,并对其传递参数。5.4.2通过超链接调用Servlet当用户有输入的内容565.5
Servlet文件操作在JSP的开发过程中,我们常常把相关内容存储为文件。在Servlet中我们可以使用输入输出流实现对文件的读写。同时,使用Servlet还可以很方便的实现文件的下载操作。这一节我们就来学习如何实现Servlet的文件操作。5.5Servlet文件操作在JSP的开发过程中,我们常575.5.1Servlet读取文件我们举一个实例FileRead.java来读取一个文本文件content.txt的内容,并且在页面上打印文件的内容。5.5.1Servlet读取文件我们举一个实例FileR585.5.2Servlet写文件Servlet写文件的处理方法和读取文件的处理方法非常类似,即把文件输入流换成文件输出流。我们也可以来看一个写文件示例。5.5.2Servlet写文件Servlet写文件的处理595.5.3Servlet下载文件利用Servlet可以很方便地实现文件的下载,我们只需要对服务器的响应对象response进行简单的设置即可。5.5.3Servlet下载文件利用Servlet可以很605.6Servlet的应用Servlet是与HTTP协议紧密结合的,使用Servlet几乎可以处理HTTP协议各个方面的内容,在本节的几个示例程序中,将集中展示Servlet在HTTP方面的具体应用。5.6Servlet的应用Servlet是与HTTP协议615.6.1获取请求信息头部内容当用户访问一个页面的时候,会提交一个HTTP请求给服务器的Servlet引擎,在这个请求中包含了HTTP文件的详细属性信息。我们可以应用request.getHeaderNames()方法来获取请求信息头部内容。5.6.1获取请求信息头部内容当用户访问一个页面的时候,625.6.2获取请求信息在上面的Servlet示例中,我们取出了HTTP文件头信息,在Servlet中还可以很方便取出用户发出请求对象自身的信息。这些信息是和用户的请求密切相关的,例如用户提交请求所使用的协议,客户提交表单的方法是POST还是GET等。5.6.2获取请求信息在上面的Servlet示例中,我们635.6.3获取参数信息有关用户请求的参数信息,也可以通过Servlet来获取。这种参数既包括以POST方法或者是GET方法提交的表单,也包括直接使用超链接传递的参数。Servlet都可以使用request.getParameter()方法取得这些参数信息并且加以处理。5.6.3获取参数信息有关用户请求的参数信息,也可以通过645.6.4
Cookie操作Cookie是一种在客户端保存信息的技术。读者在浏览网页时可能会注意到这样的现象,如在打开某个登录网页时,在第一次打开时,用户名文本框是空的,当输入一个用户名,并成功登录后。在第二次打开这个登录网页时,在第一次输入的用户名会被自动填入这个用户名文本框,就算重启计算机后,仍然如此。其实这就是Cookie所起的作用。5.6.4Cookie操作Cookie是一种在客户端保存655.6.4
Cookie操作在Servlet中,使用java.servlet.http.Cookie类来封装一个Cookie消息,在HttpServletResponse接口中定义了一个addCookie方法来向浏览器发送Cookie消息(也就是Cookie对象),在HttpServletRequest接口中定义了一个getCookies方法来读取浏览器发送的Web服务器的所有Cookie消息。Cookie类中定义了生成和提取Cookie消息的各个属性的方法。Cookie类只有一个构造方法,它的语法结构如图5.47所示。5.6.4Cookie操作在Servlet中,使用jav665.6.4
Cookie操作Cookie类中的其他常用方法如表5.3所示。方法名方法描述getName方法用于获得Cookie的名称setValue和getValue方法分别用于设置和获得Cookie的值setMaxAge和getMaxAge方法分别用于设置和获得Cookie在客户机的有效时间,也就是在在客户机上的有效秒数setPath和getPath方法分别用于设置和获得当前Cookie的有效Web路径setDomain和getDomain方法分别用于设置和获得当前Cookie的有效域setComment和getComment方法分别用于设置和返回当前Cookie的注释部分setVersion与getVersion方法分别用于设置和获得当前Cookie的协议版本setSecure和getSecure方法分别用于设置和获得当前Cookie是否只能使用安全的协议传输Cookie5.6.4Cookie操作Cookie类中的其他常用方法675.7Session技术session对象用来保存每个用户的用户信息和会话状态。session对象由服务器端自动创建,可以跟踪每个用户的操作状态。用户首次登录系统时服务器会自动给用户分配唯一标识的sessionid,可以用来区分开其他用户。相对于Cookie,session是存储在服务器端的会话,相对安全,而且其存储长度限制也大大的扩大了。5.7Session技术session对象用来保存每个用685.7.1HttpSession接口方法在Servlet中使用HttpSession对象来描述Session。一个HttpSession对象就是一个Session。使用HttpServletRequest接口的getSession方法来获得一个HttpSession对象。HttpSession接口中的主要方法如表5.4所示。方法名方法描述getId方法用于返回当前HttpSession对象的SessionIDgetCreationTime方法用于返回当前的HttpSession对象的创建时间getLastAccessedTime方法用于返回当前HttpSession对象的上一次被访问的时间setMaxInactiveInterval和getMaxInactiveInterval方法分别用来设置和返回当前HttpSession对象的可空闲的最长时间(单位:秒),这个时间也就是当前会话的有效间隔isNew方法用来判断当前的HttpSession对象是否是新创建的,如果是则返回true,否则返回falseisvalidate方法用于强制当前的HttpSession对象失效,这样Web服务器可以立即释放该HttpSession对象getServletContext方法用于返回当前HttpSession对象所属的Web应用程序的ServletContext对象setAttribute方法用于将一个String类型的ID和一个对象相关联,并将其保存在当前的HttpSession对象中getAttribute方法用于返回一个和String类型的ID相关联的对象remoteAttribute方法用于删除与一个String类型的ID相关联的对象5.7.1HttpSession接口方法在Servlet695.7.1HttpSession接口方法getSession是HttpServletRequest接口的方法,这个方法用于返回与当前请求相关的HttpSession对象,该方法有两种重载形式,它们的定义语法如图5.52所示。5.7.1HttpSession接口方法getSessi705.7.2通过Cookie跟踪Session客户端必须通过一个SessionID才能找到以前在服务端创建的某一个HttpSession对象。通过SessionID找HttpSession对象的过程也叫做Session跟踪。一般客户端的SessionID通过HTTP请求消息头的Cookie字段发送给服务端,然后服务端通过getSession方法读取Cookie字段的值,以确定是否需要新建一个HttpSession对象,还是获得一个已经存在的HttpSession对象,或是什么都不做,直接返回null。当HttpSession对象是第一次创建时,向这个对象中写一个字符串值。如果HttpSession对象不是第一次创建,那么就将保存在HttpSession对象中的字符串值输出到客户端。5.7.2通过Cookie跟踪Session客户端必须通715.7.3通过重写URL跟踪Session如果客户端浏览器不支持Cookie或是将Cookie功能关闭,那么就无法使用Cookie来传递SessionID。为了在这种情况下仍然可以使用Session,Servlet规范提供了一种补充会话管理机制。这种管理机制允许在Cookie无法工作的情况下使用URL参数来传递SessionID。要想通过URL来发送SessionID,必须要重写URL。HttpServletResponse提供了两个方法用于重写URL,如图5.56所示。5.7.3通过重写URL跟踪Session如果客户端浏览725.8Servlet过滤器过滤器是小型的Web组件,它负责拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。Servlet过滤器应用非常广泛,有拦截的地方一般都可以用到过滤器。当前Web应用中过滤器已经是不可或缺的部分之一。5.8Servlet过滤器过滤器是小型的Web组件,它负735.8.1过滤器的方法和配置与过滤器相关的Servlet共包含3个简单的接口,分别是Filter、FilterChain及FilterConfig。要实现过滤器功能,必须先实现Filter接口。Filter接口定义了3个方法,如图5.61所示。Servlets过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件(即web.xml)中进行配置部署。5.8.1过滤器的方法和配置与过滤器相关的Servlet745.8.1过滤器的方法和配置对于过滤器的映射配置,可以将过滤器映射到一个或多个Servlet和JSP文件中。以Servlet为例,我们来看其映射配置,如图5.63所示。注意:在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素。5.8.1过滤器的方法和配置对于过滤器的映射配置,可以将755.8.2过滤器应用实例——禁止未授权的IP访问站点在实际的应用中,可能会遇到这样的情况,需要对某些IP进行访问限制,不让非法的IP访问应用系统,这个时候就需要用到过滤器进行限制,当一个用户发出访问请求的时候,首先通过过滤器进行判断,如果用户的IP地址被限制,就禁止访问,只有合法的IP才可以继续访问。5.8.2过滤器应用实例——禁止未授权的IP访问站点在实765.8.3过滤器应用实例——版权过滤器现在的网页都会在尾部加上版权标志,对于这一操作,我们可以运用过滤器很方便地实现它。5.8.3过滤器应用实例——版权过滤器现在的网页都会在尾775.9Servlet监听器Servlet监听器是当今Web应用开发的一个重要组成部分。Servlet监听器主要用来对Web应用进行监听和控制,极大地增强了Web应用的事件处理能力。一般来说,Servlet监听就是指一些特殊的Servlet类,这些类可以监听Web应用的上下文信息、Servlet会话信息、Servlet请求信息。在实际操作中,程序员需要继承或实现一些已定义好的类或接口,从而编写出自己用于监听的类。这些类对特定的信息进行监听。一旦被监听的事件发生,这些类会自动调用相应的方法去执行指定的操作。5.9Servlet监听器Servlet监听器是当今We785.9.1监听Servlet上下文信息Servlet上下文信息主要是指关于ServletContext接口的一些信息,比如ServletContext的创建和删除,Servlet属性的增加、删除和修改等。这样就可以实现对Servlet上下文信息的跟踪和记录。为了实现这样的功能,程序员需要实现ServletContextListener和ServletContextAttributeListener接口,从而编写出自己的Servlet类。ServletContext接口的主要方法如表5.4所示。方法名称方法描述getAttribute(Stringname)返回Servlet环境对象中指定的属性对象。如果该属性对象不存在,返回空值getAttributeNames()返回一个Servlet环境对象中可用的属
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国医疗废物处理行业市场发展现状及投资前景规划分析报告
- 高炉本体系统危险有害因素分析(喷煤系统)培训课件
- 煤矿提升用钢丝绳存在的问题及改进建议培训课件
- 2026欧洲医药中间体行业市场供需分析及投资评估规划发展现状研究报告
- 2026中国半导体材料国产化进程与供应链安全评估专项研究报告
- 2026生物制药行业研发体系分析及产业竞争格局规划研究报告
- 2026届广东省揭阳市高考生物三模试卷含解析
- 风电场工程建设安全管理培训
- 2026中国无人机物流配送网络建设可行性分析报告
- 燃气施工现场临时用电安全管理培训
- 职业学校班主任培训材料
- 《西安市建筑工程安全生产标准化图册(2023版)》
- 2024绿色工业园区评价通则
- 《摩托车和轻便摩托车用电线束总成》
- 美容化妆培训课件生活妆
- DB43-T 2428-2022水利工程管理与保护范围划定技术规范
- 传染病学 06 艾滋病
- 普通螺栓理论重量表
- 医学生物学试题二(含答案)
- JJF 1119-2004电子水平尺校准规范
- GB/T 12476.3-2017可燃性粉尘环境用电气设备第3部分:存在或可能存在可燃性粉尘的场所分类
评论
0/150
提交评论