教案黄潇课程名称《Web系统开发》授课教师教学题目第4章Servlet技术基础教学时数2学时1.Servlet简介:是什么、功能、工作原理(容器、生命周期)2.创建Servlet的三种方式教学内容3.Servlet的编译和部署4.Java ServletAPI5.Servlet编程1.知识目标:了解Servlet的功能和用途;理解Servlet的生命周期和工作原理;掌握Servlet常用类和接口的使用:掌握Servlet技术在实际程序中的应用。2.能力目标:了解Servlet技术的基本概念及其在Web系统开发中的作用,并理解技术背后的社会责教学目标任和道德考量。引导学生理解Servlet技术如何与现实生活相结合,体现其实际应用价值,并思考技术如何更好地服务于社会、造福于人民。培养学生运用Servlet技术进行Web系统开发的实践能力,强调团队合作和创新精神,同时注重保护用户隐私和数据安全。3.思政目标:渗透社会主义核心价值观,培养学生的社会责任感,理解技术与社会的紧密联系,以及技术创新在推动社会进步中的重要作用。教学重点Servlet的创建和部署。教学难点Servlet技术在Web系统开发中的应用。教学课型日理论课口实验课授课手段多媒体教学理论讲授与案例分析相结合,介绍Servlet技术的基本概念、生命周期和应用实例,同时分授课方法析思政元素在其中的体现。实践操作与项目导向,指导学生编写简单的Servlet程序,注重在实际操作中融入思政元素。专业术语Servlet,HttpServlet,HttpServletRequest,HttpServletResponse1.梁永先、陈滢生、尹校军,JavaWeb程序设计(慕课版)第2版,人民邮电出版社,2021.3参考资料2.汪诚波,JavaWeb开发技术与实践,清华大学出版社,2018.93.千锋教育高教产品研发部,JavaWeb开发实战,清华大学出版社,2018.11课后作业使用Servlet实现注册功能,注册成功后跳转至登录页面,否则返回注册页面
教 案 课程名称 《Web 系统开发》 授课教师 黄 潇 教学题目 第 4 章 Servlet 技术基础 教学时数 2 学时 教学内容 1. Servlet 简介:是什么、功能、工作原理(容器、生命周期) 2. 创建 Servlet 的三种方式 3. Servlet 的编译和部署 4. Java Servlet API 5. Servlet 编程 教学目标 1. 知识目标: 了解 Servlet 的功能和用途; 理解 Servlet 的生命周期和工作原理; 掌握 Servlet 常用类和接口的使用; 掌握 Servlet 技术在实际程序中的应用。 2. 能力目标: 了解 Servlet 技术的基本概念及其在 Web 系统开发中的作用,并理解技术背后的社会责 任和道德考量。 引导学生理解 Servlet 技术如何与现实生活相结合,体现其实际应用价值,并思考技术 如何更好地服务于社会、造福于人民。 培养学生运用 Servlet 技术进行 Web 系统开发的实践能力,强调团队合作和创新精神, 同时注重保护用户隐私和数据安全。 3. 思政目标: 渗透社会主义核心价值观,培养学生的社会责任感,理解技术与社会的紧密联系,以 及技术创新在推动社会进步中的重要作用。 教学重点 Servlet 的创建和部署。 教学难点 Servlet 技术在 Web 系统开发中的应用。 教学课型 理论课 实验课 授课手段 多媒体教学 授课方法 理论讲授与案例分析相结合,介绍 Servlet 技术的基本概念、生命周期和应用实例,同时分 析思政元素在其中的体现。 实践操作与项目导向,指导学生编写简单的 Servlet 程序,注重在实际操作中融入思政元素。 专业术语 Servlet,HttpServlet,HttpServletRequest,HttpServletResponse 参考资料 1.梁永先、陈滢生、尹校军,Java Web 程序设计(慕课版)第 2 版,人民邮电出版社,2021.3 2.汪诚波,Java Web 开发技术与实践, 清华大学出版社,2018.9 3.千锋教育高教产品研发部,Java Web 开发实战,清华大学出版社,2018.11 课后作业 使用 Servlet 实现注册功能,注册成功后跳转至登录页面,否则返回注册页面
教学后记教学设计:现在的Web网页基本均为动态网页,通过讲解其与静态网页的区别,介绍Servlet技术的产生,进一步明确本讲的主要学习内容和学习目标。一、新课导入,并明确学习目标早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。为了通过一些交互操作,来获取动态结果,需要一些扩展机制能够让HTTP服务器调用服务端程序,因此Sun公司推出了Servlet技术。Servlet=Service+Applet,表示小服务程序。Servlet是运行在Web服务器或应用服务器上的程序。但是Servlet并不是服务于Web的唯一方式。满足该目的的最早的技术之一是公共网关接口(CGI)。CGI为每个请求派生不同的进程,因而影响效率。我们在此对比一下Servlet和CGI,在传统的CGI中,如果有N个并发对同一个CGI程序进行请求,则该CGI程序的代码在内存中重复状态N次:而对于Servlet而言,处理请求的方式是创建N个线程,只需要一份Servlet类代码,在性能优化方面,Servlet也比CGI有着更多的选择。【提问】动态网页是指能实现客户端与服务器进行交互的网页,但是如何进行交互呢?教学组织这个关键的交互问题,正是Servlet要解决的问题,下面我们来看一下全过程(简单了解即可)。过程 1(1)浏览器从地址栏中获取主机名,并获取主机名对应的IP地址。(10分钟)(2)浏览器与Web服务器建立一个TCP连接。(3)浏览器向服务器(Tomcat)发送HTTP请求。(4)服务器读取请求报文中的内容,确定客户机要访问的主机名、具体WEB应用、具体访问的WEB资源。(5)服务器发现客户机访问的是一个Servlet程序。(Context获得请求,在它的映射表(mappingtable)中寻找对应的Servlet。如果找到,则执行,获得请求的回应,并返回。如果没找到,则创建该Servlet对象。创建过程:Servlet引擎读取web.xml对象,获取到该Servlet的信息,封装init-param信息到ServletConfig对象中。利用反射技术创建Servlet对象,并调用init方法。)(6)Servlet引擎将客户端请求的数据进行封装(到到request对象中,并创建一个响应头和响应体为空的响应对象。)。(7)调用业务逻辑(调用逻辑方法service方法对请求进行处理,将response响应返回到服务器程序中。)(8)生成HTTP响应(服务器检查response对象中是否有数据,如果有,就生成HTTP响应。),并发送给客户端(9)客户端浏览器显示服务器程序发送的HTTP响应信息
教学后记 通过本次课的学习,学生不仅能够掌握 Servlet 技术的基本知识,还能够深刻理解技术背后 的社会责任和道德考量。培养学生的技术创新能力和社会责任感,使其在未来的 Web 系统 开发中能够更好地服务于社会、造福于人民,并注重保护用户隐私和数据安全。同时,通 过讨论和思考,培养学生的思辨能力和团队协作精神,为其全面发展打下坚实基础。此外, 通过加强 Servlet 安全的教育,学生将能够更好地理解网络安全的重要性,并学会在实际开 发中采取相应的安全措施,为构建更加安全、可靠的 Web 应用做出贡献。 教学组织 过程 1 (10 分钟) 教学设计: 现在的 Web 网页基本均为动态网页,通过讲解其与静态网页的区别,介绍 Servlet 技 术的产生,进一步明确本讲的主要学习内容和学习目标。 一、新课导入,并明确学习目标 早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如 Apache、Nginx) 向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。为了通过一些交 互操作,来获取动态结果,需要一些扩展机制能够让 HTTP 服务器调用服务端程序,因此 Sun 公司推出了 Servlet 技术。 Servlet = Service + Applet,表示小服务程序。Servlet 是运行在 Web 服务器或应用服务 器上的程序。但是 Servlet 并不是服务于 Web 的唯一方式。满足该目的的最早的技术之一是 公共网关接口(CGI)。CGI 为每个请求派生不同的进程,因而影响效率。我们在此对比 一下 Servlet 和 CGI,在传统的 CGI 中,如果有 N 个并发对同一个 CGI 程序进行请求,则 该 CGI 程序的代码在内存中重复状态 N 次;而对于 Servlet 而言,处理请求的方式是创建 N 个线程,只需要一份 Servlet 类代码,在性能优化方面,Servlet 也比 CGI 有着更多的选择。 【提问】动态网页是指能实现客户端与服务器进行交互的网页,但是如何进行交互呢? 这个关键的交互问题,正是 Servlet 要解决的问题,下面我们来看一下全过程(简单了解即可)。 (1)浏览器从地址栏中获取主机名,并获取主机名对应的 IP 地址。 (2)浏览器与 Web 服务器建立一个 TCP 连接。 (3)浏览器向服务器(Tomcat)发送 HTTP 请求。 (4)服务器读取请求报文中的内容,确定客户机要访问的主机名、具体 WEB 应用、 具体访问的 WEB 资源。 (5)服务器发现客户机访问的是一个 Servlet 程序。(Context 获得请求,在它的映 射表(mapping table)中寻找对应的 Servlet。如果找到,则执行,获得请求的回应,并返 回。如果没找到,则创建该 Servlet 对象。创建过程:Servlet 引擎读取 web.xml 对象,获 取到该 Servlet 的信息,封装 init-param 信息到 ServletConfig 对象中。利用反射技术创建 Servlet 对象,并调用 init 方法。) (6)Servlet 引擎将客户端请求的数据进行封装(到到 request 对象中,并创建一个 响应头和响应体为空的响应对象。)。 (7)调用业务逻辑(调用逻辑方法 service 方法对请求进行处理,将 response 响应 返回到服务器程序中。) (8)生成 HTTP 响应(服务器检查 response 对象中是否有数据,如果有,就生成 HTTP 响应。),并发送给客户端 (9)客户端浏览器显示服务器程序发送的 HTTP 响应信息
教学设计:通过引导提问与学生互动,让学生明白什么是Servlet,它是做什么的,即其工作原理,以及Servlet容器的重要性,从而为创建Servlet打好基础。二、本讲主要内容4.1Servlet技术概述1.定义:Servlet是一种运行在Web服务器上的Java小程序,用于扩展Web服务器的功能。2.特点:基于Java语言,跨平台,可动态生成Web页面内容。3.作用:处理客户端请求,与数据库交互,生成动态Web页面。4.工作原理:当Web服务器接收到一个HTTP请求时,它会先判断请求内容-一如果是静态网页数据,Web服务器将会自行处理,然后产生响应信息;如果牵涉到动态数据,Web服务器会将请求转交给Servlet容器,此时Servlet容器会找到对应的处理该请求的Servlet实例来处理,结果会送回Web服务器,然后由Web服务器响应用户。HTTP清求HTTPServlet客户端Servlet服务器容器-HTTP响应教学组织【提问】Web服务器为什么要将请求转交给Servlet容器?过程2HTTP服务器怎么知道要调用哪个Java类的哪个方法呢。最直接的做法是在HTTP服务器代码里写一(10 分钟)大堆ifelse逻辑判断:如果是A请求就调X类的M1方法,如果是B请求就调Y类的M2方法。但这样做明显有问题,因为HTTP服务器的代码跟业务逻辑耦合在一起了,如果新加一个业务方法还要改HTTP服务器的代码。那该怎么解决这个问题呢?我们知道,面向接口编程是解决耦合问题的法宝,于是有一伙人就定义了一个接口,各种业务类都必须实现这个接口,这个接口就叫Servlet接口,有时我们也把实现了Servlet接口的业务类叫作Servlet。但是这里还有一个问题,对于特定的请求,HTTP服务器如何知道由哪个Servlet来处理呢?Servlet又是由谁来实例化呢?显然HTTP服务器不适合做这个工作,否则又和业务类耦合了。于是,还是那伙人又发明了Servlet容器,Servlet容器用来加载和管理业务类。HTTP服务器不直接跟业务类打交道,而是把请求交给Servlet容器去处理,Servlet容器会将请求转发到具体的Servlet,如果这个Servlet还没创建,就加载并实例化这个Servlet,然后调用这个Servlet的接口方法。因此Servlet接口其实是Servlet容器跟县体业务类之间的接口。Servlet容器是管理Servlet对象的。常用的有Tomcat、Jetty、JBoss、WebLogic等。Web容器,即也具有HTTP功能的。Tomcat就是一个“HTTP服务器+Servlet容器”,我Web容器初始化 Serivet加载ServleinitO方法+客户端请求处理完成处理请求destroy0方法service0方法们也叫它们Web容器
教学组织 过程 2 (10 分钟) 教学设计: 通过引导提问与学生互动,让学生明白什么是 Servlet,它是做什么的,即其工作原理, 以及 Servlet 容器的重要性,从而为创建 Servlet 打好基础。 二、本讲主要内容 4.1 Servlet 技术概述 1. 定义:Servlet 是一种运行在 Web 服务器上的 Java 小程序,用于扩展 Web 服务器的功 能。 2. 特点:基于 Java 语言,跨平台,可动态生成 Web 页面内容。 3. 作用:处理客户端请求,与数据库交互,生成动态 Web 页面。 4. 工作原理: 当 Web 服务器接收到一个 HTTP 请求时,它会先判断请求内容——如果是静态网页数 据,Web 服务器将会自行处理,然后产生响应信息;如果牵涉到动态数据,Web 服务器会 将请求转交给 Servlet 容器,此时 Servlet 容器会找到对应的处理该请求的 Servlet 实例来处 理,结果会送回 Web 服务器,然后由 Web 服务器响应用户。 【提问】Web 服务器为什么要将请求转交给 Servlet 容器? HTTP 服务器怎么知道要调用哪个 Java 类的哪个方法呢。最直接的做法是在 HTTP 服务器代码里写一 大堆 ifelse 逻辑判断:如果是 A 请求就调 X 类的 M1 方法,如果是 B 请求就调 Y 类的 M2 方法。 但这样做明显有问题,因为 HTTP 服务器的代码跟业务逻辑耦合在一起了,如果新加一个业务方法 还要改 HTTP 服务器的代码。那该怎么解决这个问题呢?我们知道,面向接口编程是解决耦合问题的法宝, 于是有一伙人就定义了一个接口,各种业务类都必须实现这个接口,这个接口就叫 Servlet 接口,有时我 们也把实现了 Servlet 接口的业务类叫作 Servlet。 但是这里还有一个问题,对于特定的请求,HTTP 服务器如何知道由哪个 Servlet 来处理呢?Servlet 又是由谁来实例化呢?显然 HTTP 服务器不适合做这个工作,否则又和业务类耦合了。于是,还是那伙人 又发明了 Servlet 容器,Servlet 容器用来加载和管理业务类。HTTP 服务器不直接跟业务类打交道,而是把 请求交给 Servlet 容器去处理,Servlet 容器会将请求转发到具体的 Servlet,如果这个 Servlet 还没创建,就 加载并实例化这个 Servlet,然后调用这个 Servlet 的接口方法。因此 Servlet 接口其实是 Servlet 容器跟 具体业务类之间的接口。 Servlet 容器是管理 Servlet 对象的。常用的有 Tomcat、Jetty、JBoss、WebLogic 等。 Web 容器,即也具有 HTTP 功能的。Tomcat 就是一个“HTTP 服务器+Servlet 容器”,我 们也叫它们 Web 容器
Servlet生命周期5.Servlet的生命周期是指Servlet从加载、初始化、服务到销毁的一个过程。Servlet的生命周期由Web容器控制,当Servlet被请求时Web容器的操作:(1)加载:Servlet容器加载Servlet类(利用反射)。(2)初始化:Servlet容器调用init()方法进行初始化。(3)处理请求:Servlet容器调用serviceO方法处理客户端请求。(4)销毁:Servlet容器调用destroyO方法销毁Servlet实例。一般Servlet创建后,只有在服务器关闭时,Servlet容器才会销毁Servlet。客户端Servlet容器Servlet①发送请求②解析请求③创建servlet实例对象①调用init()方法调用service()方法@输出响应消息返回响应调用destory()方法教学设计:分别通过示例讲解三种创建Servlet的方式,在讲解经常被人使用的第三种创建方式时、要提示学生在实际创建时容易出现的问题并剖析原因及解决办法。Servlet相当于是后台处理数据的一个东西。比如说表单要提交了,action提交到哪里去呢?所以,创建Servlet,就是定义一个比如XXXjava(servlet),用于处理提交过来的信息。4.2创建Servlet的三种方式教学组织1.实现iavax.servlet.Servlet接口过程3示例:创建一个TestServletlnterface类实现Servlet接口,且实现该接口中所有抽象方(10分钟)法(init、service、destroy)。2.继承GenericServlet类3.继承HttpServlet类这种方法经常使用。【注意】:采用继承HttpServlet的方式写Servlet,doGet和doPost这两个方法通常都要覆盖,否则如果doGet方法没覆盖,有get请求时就会出现405错误,不覆盖doPost方法同理。产生这个的原因是:
5. Servlet 生命周期 Servlet 的生命周期是指 Servlet 从加载、初始化、服务到销毁的一个过程。Servlet 的生 命周期由 Web 容器控制,当 Servlet 被请求时 Web 容器的操作: (1)加载:Servlet 容器加载 Servlet 类(利用反射)。 (2)初始化:Servlet 容器调用 init()方法进行初始化。 (3)处理请求:Servlet 容器调用 service()方法处理客户端请求。 (4)销毁:Servlet 容器调用 destroy()方法销毁 Servlet 实例。一般 Servlet 创建后,只有在 服务器关闭时,Servlet 容器才会销毁 Servlet。 教学组织 过程 3 (10 分钟) 教学设计: 分别通过示例讲解三种创建 Servlet 的方式,在讲解经常被人使用的第三种创建方式 时,要提示学生在实际创建时容易出现的问题并剖析原因及解决办法。 Servlet 相当于是后台处理数据的一个东西。比如说表单要提交了,action 提交到哪里 去呢?所以,创建 Servlet,就是定义一个比如 XXX.java (servlet),用于处理提交过来的 信息。 4.2 创建 Servlet 的三种方式 1. 实现 javax.servlet.Servlet 接口 示例:创建一个 TestServletInterface 类实现 Servlet 接口,且实现该接口中所有抽象方 法(init、service、destroy)。 2. 继承 GenericServlet 类 3. 继承 HttpServlet 类 这种方法经常使用。 【注意】:采用继承 HttpServlet 的方式写 Servlet,doGet 和 doPost 这两个方法通常都 要覆盖,否则如果 doGet 方法没覆盖,有 get 请求时就会出现 405 错误,不覆盖 doPost 方 法同理。 产生这个的原因是:
我们来看底层代码:这是一个常量:publicStaticfinalintSCMETHODNOTALLOWED=4O5:因为HttpServlet继承GenericServlet,GenericServletimplementsServlet。所以,当客户端访问的时候,最先找的是:父类的servlet。也就是:service(ServletRequestreq,ServletResponseres)这个方法继续调用:service(request,response),再通过这个方法调用doGetO或doPostO)或其他方法。如果我们没覆盖doGet()或我们用的是httpl.1协议,会调用doPostO)resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,msg),于是出现了405错误!教学设计:首先介绍Servlet规范中Web应用程序的目录层次,然后是Eclipse创建的DynamicWebproject目录结构,让学生明白不同开发工具下,项目的目录结构会有些许的不同,但这并不影响Servlet在整个项目中的作用。在讲解Servlet的部署时,通过具体示例,边演示边讲解每项配置,则更便于学生理解和学习。4.3Servlet的编译和部署4.3.1JavaWeb应用程序Servlet规范中定义了Web应用程序的目录层次如下:Web应用程序的银目录,属于此Web应test存放Web应用程序的部23-1用程序的承有文件都存放在这个目录下暑端述特文件web.xomlCdlasses30存做Servket和其他有用自eiteast的类文件HellServlet.dassFersen.clessdbutils-1.1.jardon4j-1.6.1.jarjsf-api.jurjsf-inpl jar存然Web应用程序需要用到的JAR文jnu-12.juweb.xml文件包含Webojdbel4.jur件,这费JAR文件中可以包含Serviet应用程序的配置和部署 veb.m]教学组织Bean和其他有用的类文件信息reindex.jsp过程4chapo4.servlet在Servlet容器运行时,Web应用程序的类加载器将首先加载xepl(10分钟)Java Resourceclasses目录下的,其次才是lib目录下的类。如果这两个目录下存servet在同名的类,起作用的将是classes目录下的类。WEB-INF是一个特殊的目录(所有字母都要大写)。这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对于Servlet代ehantihrai码是可见的。Eclipse创建的DynamicWebproject目录结构见右图。其中,WebContent:存放html、css、js、jsp等文件,是项目访问的默认WEB-INF路径,也是工程的发布文件夹,发布时会把该文件夹发布到tomcat的webapps里。web.xml:整个Web工程的核心配置文件,可以25在其中配置很多Web工程:Servlet程序、Filter过滤器、Listener21-id51监听器、全局的错误跳转、Session超时等。4.3.2Servlet编译Servlet类的java源文件被编译后生成.class的二进制字节码文件。字节码文件一般位于项目根目录下的WEB-INFlclasses目录下。如果是使用Eclipse创建的Web项目,则字节码文件位于项目根目录下的buildclasses目录下
我 们 来 看 底 层 代 码 : 这 是 一 个 常 量 : public static final int SC_METHOD_NOT_ALLOWED = 405; 因为 HttpServlet 继承 GenericServlet,GenericServlet implements Servlet。所以,当客户端访问的时候,最先找的是:父类的 servlet。也就是: service(ServletRequest req, ServletResponse res) 这 个 方 法 继 续 调 用 : service(request, response); 再通过这个方法调用 doGet()或 doPost()或其他方法。如果我们没覆盖 doGet()或 doPost() 。 我 们 用 的 是 http1.1 协 议 , 会 调 用 resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); 于是出现了 405 错误! 教学组织 过程 4 (10 分钟) 教学设计: 首先介绍 Servlet 规范中 Web 应用程序的目录层次,然后是 Eclipse 创建的 Dynamic Web project 目录结构,让学生明白不同开发工具下,项目的目录结构会有些许的不同,但 这并不影响 Servlet 在整个项目中的作用。在讲解 Servlet 的部署时,通过具体示例,边演 示边讲解每项配置,则更便于学生理解和学习。 4.3 Servlet 的编译和部署 4.3.1 Java Web 应用程序 Servlet 规范中定义了 Web 应用程序的目录层次如下: 在 Servlet 容器运行时,Web 应用程序的类加载器将首先加载 classes 目录下的,其次才是 lib 目录下的类。如果这两个目录下存 在同名的类,起作用的将是 classes 目录下的类。 WEB-INF 是一个特殊的目录(所有字母都要大写)。这个目录 并不属于 Web 应用程序可以访问的上下文路径的一部分,对客户 端来说,这个目录是不可见的。但该目录下的内容对于 Servlet 代 码是可见的。 Eclipse 创建的 Dynamic Web project 目录结构见右图。其中, WebContent:存放 html、css、js、jsp 等文件,是项目访问的默认 路径,也是工程的发布文件夹,发布时会把该文件夹发布到 tomcat 的 webapps 里。web.xml:整个 Web 工程的核心配置文件,可以 在其中配置很多 Web 工程:Servlet 程序 、Filter 过滤器、Listener 监听器、全局的错误跳转、Session 超时等。 4.3.2 Servlet 编译 Servlet 类的.java 源文件被编译后生成.class 的二进制字节码文 件。字节码文件一般位于项目根目录下的 WEB-INF\classes 目录下。如果是使用 Eclipse 创 建的 Web 项目,则字节码文件位于项目根目录下的 build\classes 目录下