
教案黄潇课程名称《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 目录下

4.3.3Servlet部署Servlet的部署方式有两种:一种是编写web.xml部署文件,另一种是使用注解的方式部署。1.编写web.xml文件部署创建Servlet类后,还需要在web.xml配置文件中配置Servlet的映射路径才能生效。【示例】:TestServlet01example.TestServletolusername张三password123encodingUTF-80TestServlet01/TestServleto1/test01【示例】:编程获取web.xml中配置的init-param值。ServletConfig config=getServletConfig(O);String username=config.getlnitParameter("username");Stringpassword=config.getlnitParameter("password");String encoding =config.getlnitParameter("encoding");response.setContentType("text/html");response.setCharacterEncoding(encoding),PrintWriter out=response.getWriterO;out.println(username + ": "+ password):2.注解的方式部署在servlet3.0中提供了使用@WebServlet注解的方式开发。只需要在servlet类名上配置WebServlet注解即可。该注解将会在项目部署时被容器处理,容器将根据具体的属性配置将相应的类部署为Servlet。注解对象的使用格式:①注解名称(属性名=属性值,属性名=属性值,属性名=属性值...)属性是一个数组,如果数组中只有一个元素,使用该注解的时候,属性值的大括号可以省略。了方便后期维护,一般开发时都是把@WebServlet注解的urlPatterms属性的值设置为该servlet类的类名
4.3.3 Servlet 部署 Servlet 的部署方式有两种:一种是编写 web.xml 部署文件,另一种是使用注解的方式 部署。 1. 编写 web.xml 文件部署 创建 Servlet 类后,还需要在 web.xml 配置文件中配置 Servlet 的映射路径才能生效。 【示例】: TestServlet01 example.TestServlet01 username 张三 password 123 encoding UTF-8 0 TestServlet01 /TestServlet01 /test01 【示例】:编程获取 web.xml 中配置的 init-param 值。 ServletConfig config = getServletConfig(); String username = config.getInitParameter("username"); String password = config.getInitParameter("password"); String encoding = config.getInitParameter("encoding"); response.setContentType("text/html"); response.setCharacterEncoding(encoding); PrintWriter out = response.getWriter(); out.println(username + ": " + password); 2. 注解的方式部署 在 servlet3.0 中提供了使用@WebServlet 注解的方式开发。只需要在 servlet 类名上配 置@WebServlet 注解即可。该注解将会在项目部署时被容器处理,容器将根据具体的属性 配置将相应的类部署为 Servlet。 注解对象的使用格式:@注解名称(属性名=属性值, 属性名=属性值, 属性名=属性 值.) 属性是一个数组,如果数组中只有一个元素,使用该注解的时候,属性值的大括号可 以省略。了方便后期维护,一般开发时都是把@WebServlet 注解的 urlPatterns 属性的值设 置为该 servlet 类的类名

属性声明功能描述指定Servlet的name属性,等价于。如果没有显式指定,则该String nameServlet的取值即为类的全限定名Stringvalue该属性等价于urlPatterns属性。urlPatterns和value属性不能同时使用。StringurlPatterns指定一组Servlet的URL匹配模式。等价于标签。intloadOnStartup指定Servlet的加载顺序,等价于标签。WebInitParam指定一组Servlet初始化参数,等价于标签。boolean声明Servlet是否支持异步操作模式,等价于标签asyncSupportedString descriptionServlet的描述信息,等价于标签。StringServlet的显示名,通常配合工具使用,等价于标签。displayName【示例】importjava.io.IOExceptionimportjavax.servlet.*;@WebServlet(name-"testo1"loadOnStartup=0,urlPatterns="/testo1","/TestServleto1",initParams={@WebInitParam(name="username",value="张三"),@WeblnitParam(name-"password",value-"123")@WeblnitParam(name-"encoding",value="utf-8")publicclass TestServleto1extendsHttpServlet!protected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException,IOException@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException,IOExceptiondoGet(req,resp);7访间servlet的方式如:http:/localhost:8080/chap04servlet/test01教学设计:借助API文档简单介绍Servlet编程常用到的类和接口,这些类和接口也将在接下来的Servlet编程过程中借助示例进行详细讲解其具体使用。4.4.JavaServletAPiServletAPI分别在两个包中,分别是javax.servlet和javax.servet.http。javax.servlet包提供了控制Servlet生命周期所必需的Servlet接口。javax.servlet.http包提供了从Servlet接口派生出的专用于处理HTTP请求的抽象类和教学组织般工具类过程54.4.1javax.servlet包中常用类和接口(5分钟)1.Servlet接口定义所有的servlet必须实现的方法。2.ServletRequest接口封装了客户请求信息,如客户请求方式、参数名和参数值、客户端使用的协议、以及发出客户请求的远程主机信息等。3.ServletResponse接口为Servlet提供了返回响应结果的方法,它允许Servlet设置返回数据的长度和MIME类型,并且提供输出流ServletOutputStream。4.ServletConfig接口用于Servlet容器在Servlet初始化时向其传递配置信息。5.ServletContext接口定义了Servlet用于和它的Servlet容器进行通信的一套方法
【示例】 importjava.io.IOException; importjavax.servlet.*; @WebServlet(name="test01", loadOnStartup = 0, urlPatterns = {"/test01", "/TestServlet01"}, initParams={@WebInitParam(name="username", value="张三"), @WebInitParam(name="password",value="123"), @WebInitParam(name="encoding", value="utf-8")}) public class TestServlet01 extendsHttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { . } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } 访问 servlet 的方式如:http://localhost:8080/chap04_servlet/test01 教学组织 过程 5 (5 分钟) 教学设计: 借助 API 文档简单介绍 Servlet 编程常用到的类和接口,这些类和接口也将在接下来的 Servlet 编程过程中借助示例进行详细讲解其具体使用。 4.4 Java Servlet API Servlet API 分别在两个包中,分别是 javax.servlet 和 javax.servet.http。 javax.servlet 包提供了控制 Servlet 生命周期所必需的 Servlet 接口。 javax.servlet.http 包提供了从 Servlet 接口派生出的专用于处理 HTTP 请求的抽象类和一 般工具类 4.4.1 javax.servlet 包中常用类和接口 1. Servlet 接口 定义所有的 servlet 必须实现的方法。 2. ServletRequest 接口 封装了客户请求信息,如客户请求方式、参数名和参数值、客户端 使用的协议、以及发出客户请求的远程主机信息等。 3. ServletResponse 接口 为 Servlet 提供了返回响应结果的方法,它允许 Servlet 设置返回数 据的长度和 MIME 类型,并且提供输出流 ServletOutputStream。 4. ServletConfig 接口 用于 Servlet 容器在 Servlet 初始化时向其传递配置信息。 5. ServletContext 接口 定义了 Servlet 用于和它的 Servlet 容器进行通信的一套方法

方法名描述根据参数给定的属性名返回属性值getAttributegetContentType返回客户端请求数据的MIME类型getinputStream返回以二进制数方式直接读取客户请求数据的输入流getParameter根据给定的参数名返回参数值getRemoteAddr返回远程客户端主机的IP地址getRemoteHost返回远程客户端主机名getRemotePort返回远程客户端主机的端口setAttribute在ServletRequest中设置属性方法名描述返回可以向客户端发送二进制数据的输入流对象getOutputStreamServletOutputStreamgetWriter返回可以向客户端发送字符数据的PrintWriter对象getCharacterEncoding返回Servlet发送的响应数据的字符编码getContentType返回Servlet发送的响应数据的MIME类型setCharacterEncoding设置Servlet发送的响应数据的字符编码setContentType设置Servlet发送的响应数据的MIME类型4.4.2javax.servlet.http包中常用类和接口1.HttpServlet接口能够根据客户端发出的HTTP请求,生成相应的HTTP响应结果。2.HttpServletRequest接方法名描速方法名描述getCokieso返回HTTP请求的CookiesaddCookie(Cookie eookie)返回HTTP请求的Cookies。getHeader(String name)返回参数指定的HTTP请求的Header数据setHeader(String name,设胃HTTP响应的Header。如果参数name对返回HITP请求的URIgetRequestURIO应的Header已经存在,则覆盖愿来的数据,String value)getQueryStringO返回HTTP请求数据中的查询字符串addHeader(String name)向HITP响应中加入HeaderString value)getMethodO返回HTTP请求方法3.HttpServletResponse接教学设计:在讲解Servlet编程时,以项目导向和实践操作,指导学生编写简单的Servlet程序。思政元素:通过实例展示Servlet如何接收和处理表单数据,强调在数据处理过程中的隐私保护和合规性。4.5Servlet编程Servlet实现中,正确处理请求并返回响应的过程:教学组织(1)从HttpServletRequest对象中接收用户请求信息。注意乱码问题。过程6(2)根据应用需求处理请求信息。(45分钟)(3)根据处理结果做出不同的响应。注意,响应前一般需根据响应信息设置响应内容类型和编码格式等。响应方式可以是:一直接使用响应流向客户端写响应信息:二重定向,三请求转发。实例描述:在一个电商网站上,用户登录网站后可以浏览商品、添加到购物车,并最终完成支付。Servlet技术在此过程中发挥着关键作用。提示:商品信息可保存在一个LinkedList集合中。1.创建登录页面login.html
4.4.2 javax.servlet.http 包中常用类和接口 1. HttpServlet 接口 能够根据客户端发出的 HTTP 请求,生成相应的 HTTP 响应结果。 2. HttpServletRequest 接口 3. HttpServletResponse 接口 教学组织 过程 6 (45 分钟) 教学设计: 在讲解 Servlet 编程时,以项目导向和实践操作,指导学生编写简单的 Servlet 程序。 思政元素:通过实例展示 Servlet 如何接收和处理表单数据,强调在数据处理过程中的 隐私保护和合规性。 4.5 Servlet 编程 Servlet 实现中,正确处理请求并返回响应的过程: (1)从 HttpServletRequest 对象中接收用户请求信息。注意乱码问题。 (2)根据应用需求处理请求信息。 (3)根据处理结果做出不同的响应。注意,响应前一般需根据响应信息设置响应内容 类型和编码格式等。响应方式可以是:一直接使用响应流向客户端写响应信息;二重定向, 三请求转发。 实例描述:在一个电商网站上,用户登录网站后可以浏览商品、添加到购物车,并最 终完成支付。Servlet 技术在此过程中发挥着关键作用。 提示:商品信息可保存在一个 LinkedList 集合中。 1. 创建登录页面 login.html

2.创建LoginServlet.java3.创建BrowsingProducts.java创建商品信息类Goodslnfo.java,描述商品基本信息。一、解决中文输出乱码问题中文乱码问题:由于计算机中的数据都是以二进制形式存储的,所以,当传输文本时,就会发生字符和字节之间的转换。字符与字节之间的转换是通过查码表完成的,将字符转换成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码表不一致,就会导致乱码问题。服务器响应到客户端的内容包含中文信息时乱码,原因是response对象的字符输出流在编码时,采用的是ISO-8859-1的字符码表,该码表并不兼容中文。解决中文输出乱码的办法:使用HttpServletResponse接口提供的方法。即在向客户端响应的代码前加上如下代码:设置HttpServletResponse使用utf-8编码response.setCharacterEncoding("utf-8")/设置正被发往客户端的响应的内容类型response.setContentType("text/html"):response.setContentType("text/html;charset-utf-8")二、解决请求参数的中文乱码问题1.GET请求tomcat8之前,GET请求的默认编码格式是欧洲标准:ISO-8895-1。tomcat8及之后,GET请求的默认编码已经改为UTF-8了。tomcat8之前修改GET的请求的编码主要有以下几种方式。1)在tomcat目录下的conf目录中的server.xml文件中,修改Connector标签的值为:URIEncoding-"UTF-8"useBodyEncodingForURI-"true"/>2)在服务中(service/doGet方法中)使用一下语句自己转换编码:推荐Stringusername=newString(request.getParameter("username").getBytes("iso8859-1"),"utf-8"),2.POST请求不管是Tomcat8之前还是Tomcat8之后,Servlet在获取到post请求的值的时候,默认编码格式都是ISO-8895-1。所以要解决中文乱码问题,只能在调用getParameter等方法前先改变HttpServletRequest对请求体的编码格式要求,可以先使用下面的语句request.setCharacterEncoding("utf-8");三、请求转发1.RequestDispatcher接RequestDispatcher对象由Servlet容器创建,用于封装一个由路径所标识的服务器资源。利用RequestDispatcher对象,可以把请求转发给其它的Servlet或JSP页面,这个接口中定义了两个方法(两种调派方式):
2. 创建 LoginServlet.java 3. 创建 BrowsingProducts.java 创建商品信息类 GoodsInfo.java,描述商品基本信息。 一、解决中文输出乱码问题 中文乱码问题:由于计算机中的数据都是以二进制形式存储的,所以,当传输文本时, 就会发生字符和字节之间的转换。字符与字节之间的转换是通过查码表完成的,将字符转 换成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码 表不一致,就会导致乱码问题。 服务器响应到客户端的内容包含中文信息时乱码,原因是 response 对象的字符输出流 在编码时,采用的是 ISO-8859-1 的字符码表,该码表并不兼容中文。 解决中文输出乱码的办法:使用 HttpServletResponse 接口提供的方法。即在向客户端 响应的代码前加上如下代码: // 设置 HttpServletResponse 使用 utf-8 编码 response.setCharacterEncoding("utf-8"); // 设置正被发往客户端的响应的内容类型 response.setContentType("text/html"); 或: response.setContentType("text/html;charset=utf-8"); 二、解决请求参数的中文乱码问题 1. GET 请求 tomcat8 之前,GET 请求的默认编码格式是欧洲标准:ISO-8895-1。 tomcat8 及之后,GET 请求的默认编码已经改为 UTF-8 了。 tomcat8 之前修改 GET 的请求的编码主要有以下几种方式。 1)在 tomcat 目录下的 conf 目录中的 server.xml 文件中,修改 Connector 标签的值为: URIEncoding="UTF-8" useBodyEncodingForURI="true"/> 2)在服务中(service/doGet 方法中)使用一下语句自己转换编码 : 推荐 String username = new String(request.getParameter("username").getBytes("iso8859-1"),"utf-8"); 2. POST 请求 不管是 Tomcat8 之前还是 Tomcat8 之后,Servlet 在获取到 post 请求的值的时候,默认 编码格式都是 ISO-8895-1。所以要解决中文乱码问题,只能在调用 getParameter 等方法前 先改变 HttpServletRequest 对请求体的编码格式要求,可以先使用下面的语句: request.setCharacterEncoding("utf-8"); 三、请求转发 1. RequestDispatcher 接口 RequestDispatcher 对象由 Servlet 容器创建,用于封装一个由路径所标识的服务器资源。 利用 RequestDispatcher 对象,可以把请求转发给其它的 Servlet 或 JSP 页面,这个接口中定 义了两个方法(两种调派方式):

:forward(ServletRequest request, ServletResponse response)//转发出去1/包含进来include(ServletRequest request, ServletResponse response)【示例】:编写一个Servlet,首先判断用户是否已经登录。如果没有登录,调用RequestDispatcher接口的includeO方法,将请求转发给login.jsp:如果已经登录,则调用RequestDispatcher接口的forwardO方法,将请求转发给indexjsp,向用户显示欢迎信息。@WebServlet("/MainServlet")publicclassMainServletextendsHttpServlet1/..protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionresponse.setContentType("text/html;charset=UTF-8")PrintWriter out = response.getWriterO,request.setCharacterEncoding("UTF-8"),String user=request.getParameter("user"):Stringpassword=request.getParameter("password);if (user!=null &&password!=null)RequestDispatcher dispatcher=request.getRequestDispatcher("main.jsp");dispatcher.forward(request, response);elseRequestDispatcher dispatcher=request.getRequestDispatcher("login.jsp");dispatcher.include(request, response);7out.closeO);1四、请求重定向使用HttpServletResponse接口的sendRedirectO方法实现重定向,是在用户的浏览器端工作,sendRedirectO可以带参数传递,比如servlet?name=frank传至下个页面。重定向与请求转发的区别:(1)实现方法不同。(2)地址栏信息不同:请求转发后地址栏地址不变。但重定向发生变化。(3)重定向可以跳转到网站外其他地方。但请求转发仅能转发到网站内部另一个Web组件,比如另一个Servlet或JSP页面。【示例】if (user = null && password != null) response.sendRedirect("BrowsingProducts");Lelseout.print("window.alertc用户名或密码错误!)window.location.href-"login.html';");R【讨论】Servlet技术的社会价值与道德责任1.分析Servlet技术在现代Web应用开发中的重要作用,以及它如何促进信息传播、提升服务质量和效率。组织学生讨论Servlet技术在现实中的应用场景,思考如何更好地将技术与社会需求相结合,解决社会问题。2.讨论在Servlet技术开发过程中如何遵守法律法规,保护用户隐私,维护数据安全,强调技术服务于社会、服务于人民的宗旨
forward(ServletRequest request, ServletResponse response) //转发出去 include(ServletRequest request, ServletResponse response) //包含进来 【示例】:编写一个 Servlet,首先判断用户是否已经登录。如果没有登录,调用 RequestDispatcher 接口的 include()方法,将请求转发给 login.jsp;如果已经登录,则调用 RequestDispatcher 接口的 forward()方法,将请求转发给 index.jsp,向用户显示欢迎信息。 @WebServlet("/MainServlet") public class MainServlet extends HttpServlet { //. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("UTF-8"); String user = request.getParameter("user"); String password = request.getParameter("password"); if (user != null && password != null) { RequestDispatcher dispatcher = request.getRequestDispatcher("main.jsp"); dispatcher.forward(request, response); } else { RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp"); dispatcher.include(request, response); } out.close(); } } 四、请求重定向 使用 HttpServletResponse 接口的 sendRedirect()方法实现重定向,是在用户的浏览器端 工作,sendRedirect()可以带参数传递,比如 servlet?name=frank 传至下个页面。 重定向与请求转发的区别: (1)实现方法不同。 (2)地址栏信息不同:请求转发后地址栏地址不变。但重定向发生变化。 (3)重定向可以跳转到网站外其他地方。但请求转发仅能转发到网站内部另一个 Web 组 件,比如另一个 Servlet 或 JSP 页面。 【示例】 if (user != null && password != null) { response.sendRedirect("BrowsingProducts"); } else { out.print("window.alert('用户名或密码错误!'); window.location.href='login.html';"); } 【讨论】Servlet 技术的社会价值与道德责任 1. 分析 Servlet 技术在现代 Web 应用开发中的重要作用,以及它如何促进信息传播、提升 服务质量和效率。组织学生讨论 Servlet 技术在现实中的应用场景,思考如何更好地将技术 与社会需求相结合,解决社会问题。 2. 讨论在 Servlet 技术开发过程中如何遵守法律法规,保护用户隐私,维护数据安全,强 调技术服务于社会、服务于人民的宗旨