1、 Servlet程序与客户交互时,要经过程序与客户交互时,要经过Web容器,容器,Web容器有两大功能:一个提供编写容器有两大功能:一个提供编写Servlet程序程序所需要的所需要的API;另外就是提供驻留并执行;另外就是提供驻留并执行Servlet程程序的环境。容器负责处理客户请求、把请求传送序的环境。容器负责处理客户请求、把请求传送给给Servlet并把结果返回给客户。不同程序的容器并把结果返回给客户。不同程序的容器实际的实现可能有所变化,但容器与实际的实现可能有所变化,但容器与Servlet之间之间的接口是由的接口是由Servlet API定义好的。这个接口定义定义好的。这个接口定义了了
2、Servlet容器在容器在Servlet上要调用的方法及传递给上要调用的方法及传递给Servlet的对象类。的对象类。nServlet工作工作流程流程nServlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。n(1)Servlet加载(加载(Load)和实例化()和实例化(Instantiated)n(2)Servlet初始化(初始化(Initialized)n(3)Servlet 处理请求处理请求 n(4)Servlet释放释放请求对象请求对象响应对象响应对象会话跟踪会话跟踪上下文内容对象上下文内容对象JSPrequest,容器产,容器产生
3、,直接使用。生,直接使用。response,容器,容器产生,直接使产生,直接使用。用。session,容器产生,直,容器产生,直接使用。接使用。application,容器产生,直容器产生,直接使用。接使用。servlet同上同上同上同上HttpSeesion session=request.getSeesion()()用用getServletContext()方法方法获取。获取。nRequestDispatcher接口代表接口代表servlet协作,它可以把一个协作,它可以把一个请求转发到另一个请求转发到另一个servlet或或JSP。该接口主要有二个方。该接口主要有二个方法:法:nforw
4、ard(ServletRequest,ServletResponse response)把请求转发到服务器上的另一个资源。把请求转发到服务器上的另一个资源。ninclude(ServletRequest,ServletResponse response)把把服务器上的另一个资源包含到响应中。服务器上的另一个资源包含到响应中。nRequestDispatcher接口的接口的forward处理请求转发,处理请求转发,在在servlet中是一个很有用的功能,由于该种请求转发属中是一个很有用的功能,由于该种请求转发属于于request范围,所以,应用程序往往用这种方法实现范围,所以,应用程序往往用这种
5、方法实现由由servlet向向JSP页面或另一页面或另一servlet传输程序数据。传输程序数据。n其核心代码如下其核心代码如下:nnrequest.setAttribute(key,任意对象数据任意对象数据);nRequestDispatcher dispatcher=null;ndispatcher=getServletContext().getRequestDispatcher(目的地目的地JSP页面或另一页面或另一servlet);ndispatcher.forward(request,response);nn以上代码中,以上代码中,RequestDispatcher的实例化由的实例化
6、由上下文的上下文的.getRequestDispatcher方法实现,在目方法实现,在目的地的地JSP页面或另一页面或另一servlet中中.n过滤包括过滤包括Filter、FilterChain、FilterConfig等接等接口,这些在口,这些在Web应用中是很有用的技术。如通过应用中是很有用的技术。如通过过滤,可以完成统一编码(中文处理技术)、认过滤,可以完成统一编码(中文处理技术)、认证等工作。证等工作。n创建并运行一个创建并运行一个 HTTP Servlet,通常涉及以下几个步,通常涉及以下几个步骤:骤:n(1)导入编写)导入编写Servlet需要基本包,扩展需要基本包,扩展 Htt
7、pServlet 抽象类。抽象类。n(2)重载适当的方法。根据实际情况重写继承自)重载适当的方法。根据实际情况重写继承自HTTPservlet的的doGet()或或doPost()等方法。等方法。n(3)如果有)如果有 HTTP 请求的话,获取该请求。用请求的话,获取该请求。用 HttpServletRequest 对象来检索对象来检索 HTML 表单所提交的表单所提交的数据或数据或 URL 上的查询字符串。上的查询字符串。HttpServletRequest对对象含有特定的方法以得到客户端提供的信息如,象含有特定的方法以得到客户端提供的信息如,getParameterNames()、getP
8、arameter()、getParameterValues()。n(4)生成)生成 HTTP 响应。用响应。用println()方法将方法将HTML脚本打印输出,即动态生成页面脚本打印输出,即动态生成页面 HttpServletResponse 对象生成响应,并将它返回对象生成响应,并将它返回到发出请求的客户机上。它的方法允许设置到发出请求的客户机上。它的方法允许设置“请请求求”标题和标题和“响应响应”主体。主体。“响应响应”对象还含有对象还含有 getWriter()方法以返回一个方法以返回一个 PrintWriter 对象。使对象。使用用 PrintWriter 的的 print()和和
9、println()方法以编写方法以编写 Servlet 响应来返回给客户机。或者,直接使用响应来返回给客户机。或者,直接使用out对象输出有关对象输出有关HTML文档内容。文档内容。n(5)使用部署文件)使用部署文件web.xml配置配置Servlet,作为客,作为客户请求的一部分,用户请求户请求的一部分,用户请求URL必须映射到一个必须映射到一个特定的特定的servlet。在每一个。在每一个Web应用程序路径的应用程序路径的WEB-INF下存在一个下存在一个Web.xml配置文件,用来设配置文件,用来设定定Web应用程序的配置。开发者将一个应用程序的配置。开发者将一个servlet类类通过通
10、过web.xml进行配置后即可映射到一个进行配置后即可映射到一个URL,此后可通过使用这个此后可通过使用这个URL来访问该来访问该servlet。n一个简单的一个简单的Servlet程序的编写、部署和调用程序的编写、部署和调用n在现实编程过程中,很多读者会混淆在现实编程过程中,很多读者会混淆Servlet程序程序与与Applet程序,实际上,程序,实际上,Servlet程序与程序与Applet程序程序相似,只不过相似,只不过Applet程序在客户端的浏览器中运程序在客户端的浏览器中运行,必须继承行,必须继承Applet类;而类;而Servlet程序在服务器程序在服务器端运行,它必须实现端运行,
11、它必须实现javax.servlet.Servlet接口接口。n大多数大多数Servlet程序都是处理程序都是处理HTTP响应的,为了响应的,为了简化简化Servlet程序的编写,程序的编写,Servlet API提供了支持提供了支持HTTP协议的协议的javax.servlet.http.HttpServlet类,也类,也就是说,就是说,HttpServlet对象适合运行在与客户端采对象适合运行在与客户端采用用HTTP协议通信的协议通信的Servlet容器或者容器或者Web服务器服务器中。在开发中。在开发Web应用程序时,用户编写的应用程序时,用户编写的Servlet程序继承程序继承Http
12、Servlet类即可。类即可。nServlet会话会话n会话状态的维持是开发会话状态的维持是开发Web应用所必须面对的问题,应用所必须面对的问题,有多种方法可以来解决这个问题,如使用有多种方法可以来解决这个问题,如使用Cookies,hidden类型的表单域,或直接把状态信息加到类型的表单域,或直接把状态信息加到URL中中等。等。Servlet本身也提供了一个本身也提供了一个HttpSession接口来支持接口来支持会话状态的维持,在这里主要介绍基于这个接口的会会话状态的维持,在这里主要介绍基于这个接口的会话状态的管理话状态的管理。nServlet中使用中使用Session对象的步骤为:得到对
13、象的步骤为:得到Session对象对象(调用(调用HttpServletRequest.getSession()方法得到该对方法得到该对象),操作并查看象),操作并查看Session对象,在会话中保存数据,对象,在会话中保存数据,最后关闭该最后关闭该Session对象。对象。n在在Servlet中使用中使用Session的过程如下:的过程如下:n(1)使用)使用HttpServletRequest的的getSession方法得到方法得到当前存在的当前存在的session,如果当前没有定义,如果当前没有定义session,则,则创建一个新的创建一个新的session,也可以使用方法,也可以使用方
14、法getSession(true)。n(2)写)写session变量。可以使用方法变量。可以使用方法HttpSession.setAttribute(name,value)来向来向Session中中存储一个信息。也可以使用存储一个信息。也可以使用HttpSession.putValue(name,value),但这个方法已,但这个方法已经过时了。经过时了。n(3)读)读Session变量。可以使用方法变量。可以使用方法HttpSession.getAttribute(name)来读取来读取Session中的中的一个变量值,如果一个变量值,如果name是一个没有定义的变量,是一个没有定义的变量,
15、那么返回的是那么返回的是null。需要注意的是,从。需要注意的是,从getAttribute读出的变量类型是读出的变量类型是Object,必须使用强制类型转换,必须使用强制类型转换。例如例如:String uid=(String)session.getAttribute(uid);n(4)关闭)关闭session,当使用完,当使用完session后,可以使用后,可以使用session.invalidate()方法关闭方法关闭session。但是这并不是。但是这并不是严格要求的。因为严格要求的。因为Servlet引擎在一段时间之后会自引擎在一段时间之后会自动关闭动关闭seesion。nJSP页面
16、页面useSession.jsp通过表单向名字为通过表单向名字为useSession的的servlet对象(由对象(由UseSessionServlet类类负责创建)提交用户名负责创建)提交用户名,useSession将用户名存入将用户名存入用户的用户的session对象中,然后用户请求另一个对象中,然后用户请求另一个servlet对象对象showName(由(由Show NameServlet类类负责创建),负责创建),showName从用户的从用户的session对象中对象中取出存储的用户名,并显示在浏览器中。取出存储的用户名,并显示在浏览器中。n使用使用html与与Servlet相结合完
17、成用户注册、用户登录、相结合完成用户注册、用户登录、用户密码重置等功能用户密码重置等功能nservlet过滤器过滤器nservlet API中最重要的一个功能就是能够为中最重要的一个功能就是能够为servlet和和JSP页面定义过滤器。过滤器提供了某些早期服页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准务器所支持的非标准“servlet链接链接”的一种功能的一种功能强大且标准的替代品。过滤器是一个程序,它先强大且标准的替代品。过滤器是一个程序,它先于与之相关的于与之相关的servlet或或JSP页面运行在服务器上。页面运行在服务器上。过滤器可附加到一个或多个过滤器可附加到一个或多个s
18、ervlet或或JSP页面上,页面上,并且可以检查进入这些资源的请求信息。并且可以检查进入这些资源的请求信息。n过滤器可以有如下作用:过滤器可以有如下作用:n(1)以常规的方式调用资源(即调用)以常规的方式调用资源(即调用servlet或或JSP页面)。页面)。n(2)利用修改过的请求信息调用资源。)利用修改过的请求信息调用资源。n(3)调用资源,但在发送响应到客户机前对其进)调用资源,但在发送响应到客户机前对其进行修改行修改n(4)阻止该资源调用,代之以转到其他的资源,)阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出返回一个特定的状态代码或生成替换输出。n优点优点
19、:n(1)过滤器可以以一种模块化的或可重用的方式)过滤器可以以一种模块化的或可重用的方式封装公共的行为。封装公共的行为。n(2)可以利用过滤器将高级访问决策与表现代码)可以利用过滤器将高级访问决策与表现代码相分离。相分离。n(3)通过使用过滤器能够对许多不同的资源进)通过使用过滤器能够对许多不同的资源进行批量性的更改。行批量性的更改。n建立一个过滤器涉及下列五个步骤:建立一个过滤器涉及下列五个步骤:n(1)建立一个实现)建立一个实现Filter接口的类。这个类需要接口的类。这个类需要三个方法,分别是:三个方法,分别是:doFilter、init和和destroy。doFilter方法包含主要的
20、过滤代码,方法包含主要的过滤代码,init方法建立方法建立设置操作,而设置操作,而destroy方法进行清除。方法进行清除。n(2)在)在doFilter方法中放入过滤行为。方法中放入过滤行为。doFilter方方法的第一个参数为法的第一个参数为ServletRequest对象。此对象给对象。此对象给过滤器提供了对进入的信息(包括表单数据、过滤器提供了对进入的信息(包括表单数据、cookie和和HTTP请求头)的完全访问。第二个参请求头)的完全访问。第二个参数为数为ServletResponse,通常在简单的过滤器中忽,通常在简单的过滤器中忽略此参数。最后一个参数为略此参数。最后一个参数为Fi
21、lterChain,如下一,如下一步所述,此参数用来调用步所述,此参数用来调用servlet或或JSP页。页。n(3)调用)调用FilterChain对象的对象的doFilter方法。方法。Filter接口的接口的doFilter方法取一个方法取一个FilterChain对象作为它对象作为它的一个参数。在调用此对象的的一个参数。在调用此对象的doFilter方法时,激方法时,激活下一个相关的过滤器。如果没有另一个过滤器活下一个相关的过滤器。如果没有另一个过滤器与与servlet或或JSP页面关联,则页面关联,则servlet或或JSP页面被激页面被激活。活。n(4)对相应的)对相应的servlet和和JSP页面注册过滤器。在部页面注册过滤器。在部署描述符文件(署描述符文件(web.xml)中使用)中使用filter和和filter-mapping元素。元素。n(5)禁用激活器)禁用激活器servlet。防止用户利用缺省。防止用户利用缺省servlet URL绕过过滤器设置。绕过过滤器设置。n案例案例实践实践n采用采用JSP+Servlet+JavaBean实现一个简单的购物实现一个简单的购物车模型,首先预置几种商品,点击车模型,首先预置几种商品,点击“购买购买”来选来选购相应的货物。购相应的货物。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。