面向基础对象设计 13_第1页
面向基础对象设计 13_第2页
面向基础对象设计 13_第3页
面向基础对象设计 13_第4页
面向基础对象设计 13_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第12章Servlet技术第2页掌握Tomcat的安装与配置熟练掌握Servlet的编写掌握Servlet的生命周期掌握Servlet的响应方式

本章学习要点第3页12.1Servlet与Tomcat通过浏览器访问一个网页的过程,实际上是浏览器(例如IE)通过HTTP协议和Web服务器进行交互的过程。用户要访问网络资源,首先需要在网络上架设Web服务器来为用户提供内容服务,所有的内容都存在于服务器端。客户端发出请求,服务器端对请求做出响应,将用户请求的资源发送到客户端。即完成了一次用户与服务器交互的过程。第4页12.1.1Servlet与Servlet容器

Servlet是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用来完成B/S架构下,客户端请求的响应处理。Servlet容器负责管理Servlet运行过程中所需要的各种资源,并负责与Web服务器进行沟通,管理Servlet中所有对象的产生与销毁。Servlet容器的实现必须符合Servlet的规范。Tomcat即是符合Servlet规范的一种常用的Servlet容器。第5页12.1.2Tomcat的安装与配置安装Tomcat之前必须先安装JDK并配置好环境变量。因为Servlet程序事实上是一种特殊的Java程序,需要JDK的支持。对于Windows操作系统,Tomcat6.0.16提供了两种安装文件,一种是jakarta-tomcat-6.0.16.exe,一种是jakarta-tomcat-6.0.16.zip。jakarta-tomcat-6.0.16.zip是一个压缩包,只需要将它解压到硬盘上即可使用。jakarta-tomcat-6.0.16.exe是可执行的安装程序,只需要双击这个文件,就可以开始安装Tomcat。第6页12.1.2Tomcat的安装与配置Tomcat安装后的主要目录:/bin:存放启动和关闭Tomcat的脚本文件。startup.bat是windows下启动tomcat的文件,shutdown.bat是关闭tomcat的文件。/lib:存放Tomcat服务器及所有Web应用程序都可以访问的JAR文件。/conf:Tomcat的各种配置文件,最重要的是server.xml。/logs:存放Tomcat的日志文件。/temp:存放Tomcat运行时产生的临时文件。/webapps:web应用的发布目录,把java开发的web站点或war文件放入这个目录下就可以通过tomcat服务器访问了。/work:Tomcat将JSP生成的Servlet源文件和字节码文件放到这个目录下第7页12.1.3运行Tomcat

双击bin目录下的startup.bat,如果正常启动将会看到类似如下的界面:第8页12.1.3运行Tomcat启动成功后可以打开浏览器,在地址栏中输入http://localhost:8080(其中,localhost表示本地机器,8080是Tomcat的监听端口号)。输入后再回车会看到如图所示Tomcat欢迎页面。第9页12.2ServletAPI1.JavaApplet与Servlet在Java中,JavaApplet是运行在客户端的浏览器中的Java小应用程序。Servlet可以理解为运行在Server上的Applet程序。和JavaApplet一样,Servlet不是独立的应用程序,没有main()方法,不能由用户或程序员直接调用,而是生存在容器中,由容器管理。Applet运行在浏览器中,Servlet运行在Servlet容器中。第10页12.2ServletAPI2.ServletAPIjavax.servlet和javax.servlet.http包提供了编写Servlet的类和接口。javax.servlet包含有支持与普通协议无关的Servlet类。这意味着Servlet可用于许多协议,如HTTP和FTP协议。javax.servlet.http包扩充了基本包javax.servlet的功能,包含了对HTTP协议的特殊支持。Servlet接口是ServletAPI的重要功能的抽象。这个接口定义了Servlet必须实现的方法,包括处理请求的service()方法。GenericServlet类实现了这个接口,并且定义了类属的与协议无关的Servlet。第11页12.3Servlet实例在这一节,将展示3个Servlet实例。第1个实例是最简单的作为“helloworld”程序的Servlet。第2个例子是用Servlet通过JDBC访问SQLServer数据库自带的数据库Northwind。第3个例子在第2个例子的基础上实现一个最常用的登录用例。第12页12.3.1最简单的HTTPServlet本例使用的“HelloWorld”程序只是简单地将一个字符串“HelloWorld”显示到浏览器。即使开发这样一个最简单的Servlet程序,我们也需要以下几步:编写文件SimpleServlet.java。编译SimpleServlet.java。部署Servlet。访问SimpleServlet。第13页12.3.1最简单的HTTPServlet第一步:编写SimpleServlet的代码,存储到SimpleServlet.java文件中。SimpleServlet.javaSimpleServlet类继承了HttpServlet类,覆盖了HttpServlet中的doGet()方法,用于对GET请求方法做出响应。HttpServletResponse提供特殊的setContentType方法,指明返回的HTML的方式是使用text/html类型。在doGet()方法中通过调用out对象的println()方法向客户端发送HTML文本,发送的内容合起来就是一个HTML页面的HTML源码,显示效果是在页面上显示”HelloWorld!”第14页12.3.1最简单的HTTPServlet第二步:编译SimpleServlet.java执行命令javacSimpleServlet.java即可编译该Servlet在运行javac命令进行编译之前,CLASSPATH环境变量中应该包含“;C:\Tomcat6\lib\servlet-api.jar”(C:\Tomcat6\是Tomcat安装的根目录)。否则无法编译,因为编译的过程依赖于该jar包。正常情况下,编译成功会生成SimpleServlet.class文件。第15页12.3.1最简单的HTTPServlet第三步:部署Servlet生成的Servlet类并不能像普通的应用程序可以直接运行,需要部署到web服务器上,然后使用浏览器来进行访问。对于Tomcat服务器,我们通常将web应用程序的目录放到webapps目录下。对于这个web应用程序,至少需要建立以下目录及文件:

\ch12Web应用程序的根目录,属于此web应用程序的所有文件都放到这个目录下。第16页12.3.1最简单的HTTPServlet

\ch12\WEB-INF

存放web应用程序部署描述文件web.xml。

\ch12\WEB-INF\classes

存放web应用程序用到的类文件,包括Servlet类文件。

\ch12\WEB-INF\lib

存放web应用程序用到的jar文件。

\ch12\WEB-INF\web.xml

该文件是web应用程序的部署描述文件,用来存放整个应用程序的配置和部署信息。第17页12.3.1最简单的HTTPServlet对于第一个web应用程序例子,我们在webapps目录下依次创建上述4个目录和一个文件web.xml,然后把编译好的SimpleServlet.class文件放到\ch12\WEB-INF\classes目录下。接下来需要编写web.xml文件,其中关于该Servlet的配置片断如下: 程序的代码<servlet><servlet-name>MySimpleServlet</servlet-name><servlet-class>servlet.SimpleServlet</servlet-class></servlet><servlet-mapping><servlet-name>MySimpleServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>第18页12.3.1最简单的HTTPServletweb.xml文件<servlet>元素<servlet>元素用于声明一个Servlet。其中的<servlet-name>子元素用于指定Servlet的名字。在同一个web应用程序中,每一个Servlet的名字必须是唯一的,而且该名字不能为空。这个例子中的Servlet被取名为MySimpleServlet。<servlet-class>子元素用于指定Servlet类时要给出完整的限定名,如果有包名,同时要给出包名,因此第一个Servlet的完整限定名是servlet.SimpleServlet。第19页12.3.1最简单的HTTPServlet<servlet-mapping>元素<servlet-mapping>元素用于在Servlet和URL样式之间定义一个映射。它的子元素<servlet-name>指定的Servlet名字必须和<servlet>元素的<servlet-name>子元素给出的名字相同,因此,这里也应该填写MySimpleServlet。<url-pattern>子元素用于指定对应Servlet的URL路径,该路径是相对于Web应用程序的路径。这里我们把第一个Servlet的相对url路径配置成了/hello,就可以在浏览器中通过http://localhost:8080/ch12/hello

来访问SimpleServlet这个Servlet了。第20页12.3.1最简单的HTTPServlet第四步:访问SimpleServlet

要访问部署好的Servlet,需要启动tomcat服务器,运行tomcat的bin目录下的startup.bat可以启动tomcat服务器,然后在浏览器中访问http://localhost:8080/ch12/hello。如果Servlet部署成功,浏览器页面上会显示“HelloWorld”。第21页12.3.2JDBCServletServlet也是Java类,因此也可以执行数据库相关的操作。本例给出的一个Servlet的例子将演示怎样使用JDBC与一个外部数据源——SQLServer数据库相连接,并且在应答中输出结果。首先安装一个SQLServer2000数据库系统在安装的过程中,其SQLServer属性配置中,其安全性要设置为SQLServer和Windows混合身份验证模式,其SQLServer身份验证的登录名为:sa,密码为:whu,之后装载数据库驱动程序SQLServerDriver,然后就可以在Servlet中连接数据库。第22页12.3.2JDBCServlet第一步:编写JDBCServlet.java,存储到JDBCServlet.java文件中。 JDBCServlet.java程序开头必须装载java.sql包(import语句)JDBCServlet同样也继承了HttpServlet类,并覆盖了doGet()方法。这个Servlet类同时还覆盖了HttpServlet的父类GenericServlet的init()方法,并自定义了一个方法executeSQL()。如同Applet一样,Servlet中的init()方法会先于其他方法执行,它的作用一般是对变量进行初始化。第23页12.3.2JDBCServlet第二步:编译JDBCServlet.java。打开命令行,转到文件JDBCServlet.java所在目录,执行命令

javacJDBCServlet.java第三步:部署Servlet。将编译好的JDBCServlet.class文件拷贝到目录\ch12\WEB-INF\classes下,然后需要修改web.xml文件。与MySimpleServlet相比,这个Servlet的部署描述信息中多了4个init-param元素及其子元素param-name和param-value。 web.xml第24页12.3.2JDBCServlet第四步:访问JDBCServlet在web.xml中,我们将JDBCServlet的url-pattern配置成了/jdbcservlet,因此,可以通过url地址http://localhost:8080/ch12/jdbcservlet来访问这个JDBCServlet程序。这个Servlet程序在浏览器中的显示效果如图所示。第25页12.3.2JDBCServlet第26页12.3.3LoginServlet在这个Servlet的例子中,将展示Servlet的一个最常用的功能:用户登录这个程序使用了JDBC来访问SQLServer中loginapp数据库,合法的用户信息都已保存到这个数据库中的users表中,该表的结构和数据如图所示。第27页12.3.3LoginServlet第一步:编写LoginServlet.java及相关页面编写登录页面login.html login.html用户登录成功后将转向success.html页面。success.html如果用户登录失败,则转向fail.html页面。fail.html编写处理登录请求的Servlet。命名为LoginServlet,存放在LoginServlet.java文件中。 LoginServlet.java与前面两个Servlet不同的是,这里我们用了doPost()方法,而不是doGet()方法,因为login.html中定义的表单提交方式是Post。第28页12.3.3LoginServlet第二步:编译LoginServlet.java。打开命令行,转到文件LoginServlet.java所在目录,执行命令:

javacLoginServlet.java第三步:部署Servlet。首先将编写的三个静态页面login.html、success.html及fail.html拷贝到目录\ch12目录下,然后将编译好的LoginServlet.class文件拷贝到目录\ch12\WEB-INF\classes下,接着在web.xml中添加配置信息。 web.xml第29页12.3.3LoginServlet第四步:访问LoginServlet。启动Tomcat服务器后,在地址栏中输入http://localhost:8080/ch12/login.html,将出现如图的登录页面。第30页12.3.3LoginServlet在用户名文本域中输入whu,密码文本域中也输入whu,单击“登录”按钮,将看到如下图所示的页面。此时地址栏中的URL地址显示的页面是success.html。第31页12.3.3LoginServlet单击“后退”按钮可回到login.html页面,重新输入其他错误的用户名和密码,单击“登录”按钮,将看到如图所示的页面。此时地址栏中的URL地址显示的是loginservlet,而不是fail.html,这是重定向和请求转发的区别之一。第32页12.4Servlet的生命周期一般来说,服务器环境里每一时刻都有一个特定的Servlet对象的实例,这是Servlet的持续性的基本原则。当Servlet首次被装载到服务器环境的时候,服务器负责对这个Servlet进行初始化。在这个环境中,Servlet在生命周期内保持活跃或持续的状态。每个客户程序对Servlet的请求都是由相对于原对象实例的新线程来处理的。服务器负责创建新的线程来处理请求。服务器还负责卸载和重新装入Servlet,这种情况可能出现在Web服务器关闭或Servlet的基础类文件发生变化的时候,具体取决于的服务器的底层实现方式。第33页12.4Servlet的生命周期下图展示了客户程序与Servlet的基本交互过程:第34页12.4Servlet的生命周期Servlet1是由Web服务器初始时装入的,实例变量初始化后,在Servlet的生命周期内仍然是活跃的和持续的。3个客户程序请求Servlet1的服务,服务器为每个请求产生一个线程来进行处理。每个线程访问已装入的实例变量,这些变量在Servlet装入时已初始化。每个线程处理自己对应的请求,并且将回答发送给发出请求的客户程序。第35页12.4Servlet的生命周期Servlet的生命周期主要表现为ServletAPI中Servlet接口的init、service和destroy方法。当Servlet的服务首次被请求时,可以被动态地装载和实例化;当Web服务器启动时,Web服务器要进行部署,也可以使得特定的Servlet被装载和实例化。对这两种情况,Servlet的init方法都要完成任何必要的初始化工作。一旦Servlet进行了适当的初始化后,它就能够处理请求。每个请求由一个ServletRequest对象表示,对应的回答由ServletAPI中的ServletResponse对象表示。当Web服务器卸载Servlet时,将调用destroy方法。第36页12.5Servlet创建响应J2EE平台为特定URL的Web组件提供三种相互关联、但有区别的方式,以便使用其他URL的数据来创建响应。使Web应用程序如此强大的原因之一是它们彼此链接和聚合信息资源。本节将讨论如何使用JavaServletAPI来实现请求转发、URL重定向和包含。第37页12.5.1请求转发请求转发允许组件发送请求到某个应用程序中的URL,并通过同一应用程序中的不同URL中的组件来处理该请求。Servlet可以使用javax.servlet.RequestDispatcher.forward方法来转发它所收到的HTTP请求。接收转发请求的组件能够处理该请求并生成一个响应,或者它还可以将请求转发到另一个组件。最初请求的ServletRequest和ServletResponse对象被传递给转发目标组件。这就允许目标组件访问整个请求上下文,而请求只可以转发给同一应用程序上下文中的组件,而不在应用程序之间转发。第38页12.5.1请求转发例:完成请求转发的Servlet。编写ForwardServlet ForwardServlet.java编写ToServlet ToServlet.java修改web.xml并完成部署 web.xml在浏览器地址栏中输入http://localhost:8080/ch12/forwardservlet来访问forwardservlet,将会看到如图所示页面。第39页12.5.1请求转发可见,请求转发的目标组件toservlet能够访问到请求组件forwardservlet中的请求参数。这里浏览器地址栏中的URL显示的还是forwardservlet,而不是目标组件toservlet。若在在浏览器地址栏中输入http://localhost:8080/ch12/toservlet来访问toservlet,将会看到如图所示页面。第40页12.5.2URL重定向Web组件可以将请求重定向到任一URL,而不仅仅是同一应用上下文中的URL。但最初请求的内容(比如POST参数)丢失了。URL通过使用HTTPMETA头部的Refresh功能来完成重定向工作。其本质就是,服务器返回一个META标记,告诉浏览器直接去其他地方。这时,最初URL所附带POST数据就会丢失。URL重定向可以通过操作HTTP头部来完成,但首选的方式还是使用javax.servlet.ServletResponse.sendRedirect()。这个方法的唯一参数就是重定向的目标URL。第41页12.5.2URL重定向例:URL重定向的例子。编写RedirectServlet,使用URL重定向将请求重定向到toservlet。 RedirectServlet.java修改web.xml文件并部署Servlet web.xml启动Tomcat通过http://localhost:8080/ch12/redirectservlet来访问redirectservlet,将看到如图所示页面第42页12.5.2URL重定向此时地址栏中的URL显示的是目标组件redirectservlet,点击“转到”后,将看到下图所示页面。第43页12.5.2URL重定向HttpServletResponse.sendRedirect()方法将响应定向到参数location指定的新URL。location可以是一个绝对的URL,如response.sendRedirect(“”)也可以使用相对的URL,如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转,从浏览器中的地址栏中可以看到新的URL地址。可以看到,通过重定向将请求重定向到toservlet中后,从中无法访问到请求的参数msg,同时注意到与请求转发不同,这里浏览器地址栏中的URL显示的是目标组件toservlet。第44页12.5.3包含包含允许一个Web组件聚集来自几个其他Web组件的数据,并使用被聚集的数据来创建响应。这种技术通常用于模板处理器。下面将创建一个结构化的模板用于控制响应的布局。模板中每个页面区域的内容来自不同的URL,从而组成单个页面。这种技术能够为该程序提供一致的外观和感觉。多个Web组件的内容可以被包含在单个响应中。这个响应要包含响应中另一个URL的数据,先获得该URL的RequestDispatcher,然后调用RequestDispatcher的包含方法。第45页12.5.3包含例:使用包含技术的Servlet。本例在一个Servlet中包含3个HTML页面red.html,black.html和yellow.html的数据。

red.html

black.html

yellow.html

编写IncludeServlet。 IncludeServlet.java

IncludeServlet的doGet()方法使用RequestDispatcher对象的include()方法包含了3个HTML页面的数据,是用到了include()方法把RequestDispatcher资源(Servlet、JSP、HTML)的输出包含到当前输出中修改web.xml文件并部署第46页12.5.3包含在浏览器地址栏中输入http://l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论