JavaWeb编程技术4版- 教案全套 沈泽刚 第1-18章 Java Web起步入门- SSM框架整合与实例_第1页
JavaWeb编程技术4版- 教案全套 沈泽刚 第1-18章 Java Web起步入门- SSM框架整合与实例_第2页
JavaWeb编程技术4版- 教案全套 沈泽刚 第1-18章 Java Web起步入门- SSM框架整合与实例_第3页
JavaWeb编程技术4版- 教案全套 沈泽刚 第1-18章 Java Web起步入门- SSM框架整合与实例_第4页
JavaWeb编程技术4版- 教案全套 沈泽刚 第1-18章 Java Web起步入门- SSM框架整合与实例_第5页
已阅读5页,还剩270页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE280《JavaWeb编程技术》电子教案沈泽刚编制

《JavaWeb编程技术》教案第01讲环境构建与简单程序开发2学时110分钟章节内容第1章JavaWeb起步入门1.1万维网与Internet 1.2Web前端技术 1.3Web后端技术 1.4Tomcat服务器1.5IntelliJIDEA开发工具1.6Maven入门1.7Servlet和JSP简介教学目标了解Internet与Web的基本概念、了解HTTP及相关技术了解Web前端技术和Web后端技术了解Servlet和JSP掌握Maven重点掌握Tomcat服务器和IntelliJIDEA开发工具的安装重点难点重点:重点掌握Tomcat服务器和IntelliJIDEA开发工具的安装。难点:Tomcat服务器的配置和IntelliJIDEA开发工具的使用。教学环节教学方法及其它说明事项1.采用讲授法、演示法、讨论法。2.案例+项目式教学。3.采用线上线下混合教学模式。配套线上课程地址:/detail/2182465434.软件环境:Windows10,JDK17以上,IntelliJIDEA2023以上。导言或复习浏览器是Web应用的客户端程序,可向Web服务器发送各种请求,并对从服务器发回的文档和各种多媒体数据格式进行解析、显示和播放。浏览器的主要功能是解析网页文件内容并正确显示,网页一般是\o"HTML"HTML格式。浏览器除了请求服务器的静态资源,还可以请求动态资源。例如,服务器可能会提供一个文档,要求用户通过浏览器输入信息。在用户完成输入后,浏览器将输入的信息传递给服务器,服务器利用输入信息进行计算,然后向浏览器返回一个新的文档,将结果通知给浏览器。有时候浏览器可能还会直接请求执行服务器中存储的某个程序。程序的执行结果发回给浏览器。常见的浏览器有MicrosoftEdge、\o"MozillaFirefox"Firefox、GoogleC\o"chrome"hrome、\o"InternetExplorer"InternetExplorer、和\o"Opera"Opera,浏览器是最常使用的\o"客户端程序"客户端程序。Tomcat也是一种常用的Web服务器,它具有Web服务器的功能,同时也是Web容器,可以运行Servlet和JSP。讲授内容1.1万维网与Internet1.1.1万维网WWWWeb是基于浏览器/服务器(B/S)的一种体系结构,客户使用浏览器向Web服务器发出请求,服务器响应客户请求,向客户送回所请求的网页,在浏览器窗口上显示网页的内容。1.1.2服务器和浏览器1、Web浏览器2、Web服务器1.1.3主机和IP地址连接到Internet上的所有计算机,从大型机到微型机都以独立的身份出现,我们称它为主机(host)。为实现各主机间的通信,每台主机都必须有一个唯一的网络地址,叫IP(InternetProtocol)地址。IP地址分为IPv4与IPv6两个版本。IPv6采用128位地址长度,这种IP地址有效地解决了地址短缺问题。1.1.4HTTP协议1.1.5URL与URIWeb上的资源是通过URL标识的。URL(UniformResourceLocator)称为统一资源定位器,指Internet上位于某个主机上的资源。资源包括HTML文件、图像文件和程序等。URL通常由四部分组成:协议名称、所在主机的DNS名或IP地址、可选的端口号和资源的名称。端口号和资源名称可以省略。1.2Web前端技术1.2.1HTMLHTML(HyperTextMarkupLanguage)称为超文本标记语言,是一种用来创建超文本文档的标记语言。所谓超文本是指用HTML编写的文档中可以包含指向其他文档或资源的链接,该链接也称为超链接(hyperlink)。通过超链接,用户可以很容易访问所链接的资源。HTML文档一般包含两类信息:一类是标记信息,包含在标签中,由一对尖括号(<和>)作为定界符,其中是元素名和属性。另一类信息是文档的字符数据,它们位于标签的外部,一般是需要浏览器显示的信息。下面是一个简单超链接标签。1.2.2CSS浏览器对HTML页面的各种元素都有一种默认的呈现样式(如,颜色和字体等),也可以使用CSS重新设置元素的样式。CSS(CascadingStyleSheets)是层叠样式表的意思,它是一种用来表现HTML或XML等文件样式的语言。CSS是能够真正做到网页表现与内容分离的一种样式设计语言。相对于传统HTML的表现而言,CSS能够对网页中的对象的位置进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑能力,并能够进行初步交互设计。样式表有三个层次,按照从底层到高层的顺序,分别为内联样式表、文档样式表以及外部样式表。1.3Web后端技术Web后端也称Web服务器端,Web应用程序运行在Web服务器上,是可通过浏览器访问的各种Web组件的集合。在实际应用中,Web应用程序是由多个Servlet程序、JSP页面、HTML文件以及图像文件等资源组成。所有这些组件相互协调为用户提供一组完整的服务。1.3.1服务器端编程技术1、传统技术标准—CGI技术公共网关接口(CommonGatewayInterface,CGI)技术是在服务器端生成动态Web文档的传统方法。CGI是一种标准化的接口,允许Web服务器与后台程序和脚本通信,这些后台程序和脚本能够接受输入信息(例如,来自表单),访问数据库,最后生成HTML页面作为响应。2、Java解决方案—Servlet技术在Java平台上,服务器扩展是使用ServletAPI编写的,服务器扩展模块叫做Servlet容器(container),或称Web容器。Tomcat就是一个Web容器,它在整个Web应用系统中处于中间层的地位,如图所示。3、动态Web页面技术在服务器端动态生成Web文档有多种方法。一种常见的实现动态文档技术是在Web页面中嵌入某种语言的脚本,然后让服务器来执行这些脚本以便生成最终发送给客户的页面。目前比较流行的技术有PHP技术、ASP.NET技术和JSP技术。1.3.2静态与动态Web资源可以把Web资源分为静态的和动态的。如果资源本身没有任何处理功能它就是静态的,如果资源有自己的处理能力,它就是动态的。Web应用程序通常是静态资源和动态资源的混合。例如,当浏览器向/myfile.html发送一个请求,Web服务器就在上查找myfile.html文件,找到后把该文件内容发送给浏览器,它是静态资源。当浏览器向/product-report发送一个请求,Web服务器就将请求转发给product-report程序,该程序将执行生成HTML文档并把它发送给浏览器,该程序就是一个动态资源。1.3.3后端数据库技术目前有多种数据库可以使用,包括关系数据库、文本数据库以及图数据库等,最常用的是关系数据库。典型的关系数据库包括Oracle数据库、SQLServer数据库、MySQL数据库以及PostgreSQL数据库等。1.3.4全栈与全栈开发员一名开发人员,如果能同时胜任前端和后端的开发,一般称为全栈开发员(fullstackdeveloper)。一些中小企业更喜欢聘用全栈开发员,因为他们可以处理前端和后端开发任务,从而减少开发时间和成本。多年来,一些技术栈在所有应用程序项目中获得了前所未有的普及和吸引力,每一种技术都有自己的优势。演示或观看教学视频1.4Tomcat服务器1.4.1Tomcat下载与安装可以到/网站下载Tomcat服务器。Tomcat服务器的最新版本Tomcat10.1.01,实现了Servlet5.0和JSP3.0的规范。可以下载Tomcat的安装版和解压版。解压版是一个ZIP文件,下载后解压到某个目录即完成安装。安装板是一个可执行文件,本书下载的是Windows平台上64位的安装版,文件名为apache-tomcat-10.1.01.exe,下面介绍Tomcat服务器安装、配置的方法。1.4.2Tomcat的目录结构目录说明/bin存放启动和关闭Tomcat的脚本文件/conf存放Tomcat服务器的各种配置文件,其中包括servler.xml、tomcat-users.xml和web.xml等文件/lib存放Tomcat服务器及所有Web应用程序都可以访问的库文件/logs存放Tomcat的日志文件/temp存放Tomcat运行时产生的临时文件/webapps存放所有Web应用程序的根目录/work存放JSP页面生成的Servlet源文件和字节码文件1.4.3Tomcat的启动和停止1.4.4Web应用程序结构1.4.5Tomcat的配置文件讲授内容1.5IntelliJIDEA开发工具1.5.1安装IntelliJIDEA1.5.2在IDEA中创建Web项目1.5.3配置Tomcat服务器1.5.4在Tomcat中部署项目1.6Maven入门1.6.1Maven的项目结构1.6.2在IntelliJIDEA中使用Maven使用Maven管理项目可以在命令提示符通过命令完成,在IDE中也可以通过命令完成。在IntelliJIDEA中提供一个Maven操作窗口,如图1-24所示。图1-24IDEA中Maven操作界面在该窗口中可以方便的执行Maven命令,例如,单击按钮打开一个命令列表,从中选择要执行的Maven命令(见图1-25)。演示1.5.5启动Tomcat并访问应用在IntelliJ界面的右上角有一个服务器工具栏,使用这里的工具可以启动和停止Tomcat服务器、部署应用程序等。在该工具栏中,单击按钮用于启动Tomcat服务器,该按钮变成时可重新部署项目。单击按钮可以停止Tomcat服务器。在服务器启动或重新部署项目,或执行Maven命令都将在输出窗口输出有关信息。如果发生启动或部署错误,也将在输出窗口输出。程序员可根据输出窗口信息判断操作结果是否正常。服务器启动或重新部署后,打开浏览器,在地址栏中输入要访问的资源URL地址即可访问Web应用程序。在使用IDEA新建JavaEnterprise项目时,它自动创建一个HelloServlet和一个index.jsp页面,使用下面URL访问index.jsp页面。http://localhost:8080/helloweb/index.jsp结果如图所示。单击页面中“HelloServlet”链接可访问HelloServlet,运行结果如图所示。1.7Servlet和JSP简介JavaServlet是使用ServletAPI以及相关的类编写的Java程序,JSP(JavaServerPages)是嵌入了Java代码的动态页面,文件的扩展名是.jsp。它们都是运行在服务器上的组件技术。本节简单介绍这两种技术,使读者熟悉一下有关的概念,在后面章节还会详细讨论。1.7.1JavaServletJavaServlet也叫服务器端小程序,,这种程序运行在Web容器中,它可以处理用户的请求,主要用来实现动态Web项目。在IntelliIDEA中新建一个JavaEnterprise项目时,IDEA就在项目中默认创建一个名为HelloServlet的Servlet程序和一个index.jsp的页面。清单1.6HelloServlet.javapackagecom.boda.helloweb;importjava.io.*;importjakarta.servlet.http.*;importjakarta.servlet.annotation.*;@WebServlet(name="helloServlet",value="/hello-servlet")❶❷publicclassHelloServletextendsHttpServlet{❶❷❸privateStringmessage;❸publicvoidinit(){message="HelloWorld!";❹}❹publicvoiddoGet(HttpServletRequestrequest,❺HttpServletResponseresponse)throwsIOException{❺response.setContentType("text/html");❻//Hello❻PrintWriterout=response.getWriter();out.println("<html><body>");❼out.println("<h1>"+message+"</h1>");❼out.println("</body></html>");}publicvoiddestroy(){❽}❽}1.7.2JSP页面使用Servlet可以实现Web应用程序的所有功能,但它的一大缺点是业务逻辑和表示逻辑不分,这对涉及大量HTML内容的应用编写Servlet非常复杂,程序的修改困难,代码的可重用性也较差。因此,要实现表示逻辑,应该使用JSP页面技术。可以把JSP看成是含有Java代码的HTML页面。JSP页面本质上也是Servlet,它可以完成Servlet能够完成的所有任务。JSP(JavaServerPages)页面是在HTML页面中嵌入JSP元素的页面,这些元素称为JSP标签。在IDEA中新建的JavaEnterprise项目中,默认创建了一个index.jsp页面,它是应用的首页,代码如清单1.6所示。清单1.6index.jsp❶<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>❶<!DOCTYPEhtml><html><head><title>JSP-HelloWorld</title></head><body>❷<h1><%="HelloWorld!"%>❷</h1><br/><ahref="hello-servlet">HelloServlet</a></body></html>页面的第1行是JSP的page指令❶,之后是标准的HTML页面标记,包括<html>、<head>、<body>以及超链接<a>等标记,此外页面中还包含一个JSP表达式❷(以<%=开头,以%>结束),该JSP表达式输出一个字符串。要运行JSP页面,在JSP页面编辑窗口中单击浏览器图标,则直接打开浏览器运行页面。也可以打开浏览器,在地址栏中输入下面URL:http://localhost:8080/chapter01/index.jsp创建项目后,程序员可以根据需要创建自己的Servlet和JSP页面。这里要注意,Servlet程序要保存在src/main/java目录中,并且要存放到某个包中。而JSP页面通常要存放在src/main/webapp目录或其子目录中。课堂讨论与互动一、关于Servlet程序,回答下面问题。1、说明doGet()方法的含义。2、Servlet类是哪个类的子类?3、JSP的page指令,标准的HTML页面标记,包括<html>、<head>、<body>以及超链接<a>等标记都是什么含义?二、哪些资源应该存放在Web应用程序的WEB-INF目录中?总结课后作业课程交流QQ群:830954046或691865367一、知识点总结1、在服务器端要实现Web应用的动态功能,需要服务器端编程技术。目前,在服务器端技术有多种,包括CGI技术、Servlet技术以及动态页面技术。2、JavaWeb应用程序都涉及数据管理与存储,数据存储最好的技术是使用数据库。目前有多种数据库可以使用,包括关系数据库、文本数据库以及图数据库等,最常用的是关系数据库。3、Tomcat是服务器,为了加快JavaWeb应用开发,通常使用集成开发环境IntelliJIDEA。二、课后作业1.登录本书在线作业网站,完成本章作业题目。地址:/2.编写一个名为myfirst.jsp的页面,当请求该JSP页面时,浏览器输出一句话和当前的日期,如图所示。教学反思《JavaWeb编程技术》教案第02讲Servlet生命周期2学时110分钟章节内容第2章JavaServlet技术2.1Servlet概述2.1.1ServletAPI2.1.2Servlet接口2.1.3HttpServlet类2.1.4HttpServletRequest接口和HttpServletResponse接口 2.2Servlet生命周期2.2.1加载和实例化Servlet2.2.2初始化Servlet2.2.3为客户提供服务2.2.4销毁和卸载Servlet教学目标了解ServletAPI掌握Servlet生命周期重点难点重点:掌握Servlet生命周期。难点:Servlet生命周期。教学环节教学方法及其它说明事项1.采用讲授法、演示法、讨论法。2.案例+项目式教学。3.采用线上线下混合教学模式。配套线上课程地址:/detail/2182465434.软件环境:Windows10,JDK16以上,Eclipse2020以上。导言或复习JavaServlet(Java服务器端程序)是JavaWeb技术的核心基础,它实际是CGI技术的一种替代,这种程序运行在Web容器中,主要用来实现动态Web项目,它是Java企业应用开发的关键组件。讲授内容2.1Servlet概述2.1.1ServletAPIServlet是使用ServletAPI以及相关的类编写的Java程序,ServletAPI是JavaWeb应用开发的基础,ServletAPI定义了若干接口和类。目前ServletAPI的最新版本是Servlet5.0,它由下面4个包组成。jakarta.servlet包,定义了开发与协议无关的Servlet的接口和类。jakarta.servlet.http包,定义了开发采用HTTP协议通信的Servlet的接口和类。jakarta.servlet.annotation包,定义9个注解类型和2个枚举类型。jakarta.servlet.descriptor包,定义了以编程方式访问Web应用程序配置信息的类型。这4个包中的接口和类是开发Servlet需要了解的全部内容。下面重点介绍jakarta.servlet包jakarta.servlet.http包中一些常用的接口和类。下面是几个比较重要的接口。Servlet接口,是所有Servlet的根接口。ServletConfig接口,是Servlet配置对象。GenericServlet抽象类,它实现了Servlet接口。HttpServlet抽象类,它用于创建支持HTTP协议的Servlet。HttpServletRequest接口,是基于HTTP协议的请求对象,它继承了ServletRequest接口。HttpServletResponse接口,是基于HTTP协议的响应对象,它继承了ServletResponse接口。2.1.2Servlet接口jakarta.servlet.Servlet接口是ServletAPI中的基本接口,每个Servlet必须直接或间接实现该接口。该接口定义了如下5个方法。publicvoidinit(ServletConfigconfig):该方法由容器调用,完成Servlet初始化并准备提供服务。容器传递给该方法一个ServletConfig类型的参数。publicvoidservice(ServletRequestrequest,ServletResponseresponse):对每个客户请求容器调用一次该方法,它允许Servlet为请求提供响应。publicvoiddestroy():该方法由容器调用,指示Servlet清除本身、释放请求的资源并准备结束服务。publicServletConfiggetServletConfig():返回关于Servlet的配置信息,如传递给init()的参数。publicStringgetServletInfo():返回关于Servlet的信息,如作者、版本及版权信息。在默认情况下,这个方法返回空串。开发人员可以覆盖这个方法来返回有意义的信息。观看教学视频2.1.3HttpServlet类jakarta.servlet.http包中定义了使用HTTP协议创建的Servlet所需要的接口和类,其中HttpServlet抽象类用来实现针对HTTP协议的Servlet,在HttpServlet中针对不同的HTTP请求方法定义了不同的处理方法,如处理GET请求的doGet()方法格式如下。protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException通常,我们编写的Servlet需要继承HttpServlet类并覆盖doGet()或doPost()方法。这些方法都带两个参数,HttpServletRequest类型的参数request表示请求对象,HttpServletResponse类型的参数response表示响应对象,它们用来处理请求和响应。2.1.4HttpServletRequest接口和HttpServletResponse接口在HttpServlet类的doGet()方法和其他请求处理方法中都带两个参数,一个是请求对象,它是HttpServletRequest的实例,另一个是响应对象,它是HttpServletResponse的实例。它们用来处理请求和响应。HttpServletRequest接口提供了针对HTTP请求操作方法,如定义了从请求对象中获取HTTP请求头、Cookie等信息的方法。HttpServletResponse接口提供了针对HTTP的发送响应的方法。它定义了为响应设置如HTTP头、Cookie信息的方法。讲授内容2.2.1加载和实例化Servlet对客户请求Servlet时,Web容器使用Class.forName()方法将其加载到内存❶并将其实例化❷。因此,Servlet类应有一个不带参数的构造方法。若没有为Servlet类中定义构造方法,Java编译器将添加默认构造方法。容器创建了Servlet实例后就进入生命周期阶段,Servlet生命周期方法包括init()、service()和destroy()。❶加载到内存❶加载到内存Web容器HelloServletHelloServletHelloServletHelloServlet❷实例化❷实例化HelloServletHelloServletWebHelloServletHelloServletWeb浏览器❸初始化❸初始化❹提供服务❺❺销毁回收回收2.2.2初始化Servlet容器创建Servlet实例后,调用init(ServletConfig)方法初始化Servlet❸,容器为该方法传递一个ServletConfig参数,它包含Servlet初始化参数。之后,容器调用无参数的init(),完成初始化。init()在Servlet生命周期中仅被调用一次。可以在Web容器启动时将Servlet加载到容器中并初始化,这称为预初始化。可以使用@WebServlet注解的loadOnStartup属性或web.xml文件的<load-on-startup>元素指定当容器启动时加载并初始化Servlet。有时,不在容器启动时对Servlet初始化,而是当容器接收到对该Servlet第一次请求时才对它初始化,这称为延迟加载(lazyloading)。这种初始化的优点是可以大大加快容器的启动速度。但缺点是,如果在Servlet初始化时要完成很多任务(如从数据库中读取数据),则发送第一个请求的客户等待时间会很长。演示或观看教学视频2.2.3为客户提供服务在Servlet实例正常初始化后,它就准备为客户提供服务❹。用户通过单击超链接或提交表单向容器请求访问Servlet。当容器接收到对Servlet的请求时,容器根据请求中的URL找到正确的Servlet,首先创建两个对象,一个是HttpServletRequest请求对象,一个是HttpServletResponse响应对象。然后创建一个新的线程,在该线程中调用service(),同时将请求对象和响应对象作为参数传递给该方法。显然,有多少个请求,容器将创建多少个线程。接下来service()将检查HTTP请求的类型(GET,POST等)来决定调用Servlet的doGet()或doPost()方法。Servlet使用响应对象(response)获得输出流对象,调用有关方法将响应发送给客户浏览器。之后,线程将被销毁或者返回到容器管理的线程池。请求和响应对象已经离开其作用域,也将被销毁。最后客户得到响应。2.2.4销毁和卸载Servlet当容器决定不再需要Servlet实例时,它将在Servlet实例上调用destroy()方法,Servlet在该方法中释放资源❺,如它在init()中获得的数据库连接。一旦该方法被调用,Servlet实例不能再提供服务。Servlet实例从该状态仅能进入卸载状态。在调用destroy()之前,容器会等待其他执行Servlet的service()的线程结束。一旦Servlet实例被销毁,它将作为垃圾被回收。如果Web容器关闭,Servlet也将被销毁和卸载。课堂互动与讨论1、下面不属于Servlet生命周期方法的是()。A.publicvoiddestroy()B.publicvoidservice()C.publicServletConfiggetServletConfig()D.publicvoidinit()2、要使向服务器发送的数据不在浏览器的地址栏中显示,应该使用()方法。A.POSTB.GETC.PUTD.HEAD3、GET请求和POST请求有什么异同?作业预习一、知识点总结1.Servlet的执行过程和生命周期。2.能够创建并运行Servlet类。二、课后作业1.登录本书在线作业网站,完成本章作业题目。地址:/2.编写一个名为MyFirstServlet的Servlet,覆盖它的doGet()方法,当请求该Servlet时,浏览器输出一句话和当前的日期,如图所示。教学反思《JavaWeb编程技术》教案第03讲处理请求和发送响应2学时110分钟章节内容第2章JavaServlet技术2.3处理请求2.3.1HTTP请求结构2.3.2发送HTTP请求2.3.3处理HTTP请求2.3.4请求参数传递与获取2.3.5请求转发2.3.6用请求对象共享数据2.3.7检索客户端信息2.3.8检索请求头信息教学目标了解请求的协议。掌握请求消息。重点掌握请求参数传递与获取。重点难点重点:掌握请求参数传递与获取。难点:请求参数传递与获取,请求转发。教学环节教学方法及其它说明事项1.采用讲授法、演示法、讨论法。2.案例+项目式教学。3.采用线上线下混合教学模式。配套线上课程地址:/detail/2182465434.软件环境:Windows10,JDK16以上,Eclipse2020以上。导言或复习HTTP是基于请求和响应的协议。请求和响应是HTTP最重要的内容。HTTP消息是客户向服务器的请求或者服务器向客户的响应。请求消息和响应消息的格式是类似的。在服务器端,Servlet对请求处理完后,通常需要向客户发回响应。如果需要直接向客户发送响应,需要使用输出流对象。也可以将响应重定向到其他资源。讲授内容2.3处理请求2.3.1HTTP请求结构由客户向服务器发出的消息称HTTP请求(HTTPrequest),一个HTTP请求通常包括请求行、请求头和请求数据。下图是一个典型的POST请求。2.3.2发送HTTP请求在客户端发生下面的事件,浏览器就向Web服务器发送一个HTTP请求。(1)用户在浏览器的地址栏中输入URL并按回车键。(2)用户点击了HTML页面中的超链接。(3)用户在HTML页面中填写一个表单并提交。在上面的三种方法中,前两种方法向Web服务器发送的都是GET请求。如果使用页面表单发送请求可以通过method属性指定使用GET请求或POST请求。2.3.3处理HTTP请求在HttpServlet类中,针对每个HTTP方法定义了相应的请求处理方法,比如要处理GET请求,应该覆盖下面的doGet()方法,格式如下:protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException;所有的请求处理方法都有两个参数:HttpServletRequest对象和HttpServletResponse对象。处理不同的HTTP请求应使用不同的方法,它们的对应关系如表2-3所示。表2-3HTTP方法及相应的处理方法HTTP方法HttpServlet方法HTTP方法HttpServlet方法GETdoGet()DELETEdoDelete()POSTdoPost()OPTIONSdoOptions()HEADdoHead()TRACEdoTrace()PUTdoPut()演示2.3.4请求参数传递与获取请求参数(requestparameter)是随请求一起发送到服务器的数据,它们是以“名/值”对的形式发送。从客户端向服务器端传递请求参数一般有下面两种方法。1、通过查询串传递请求参数查询串(querystring)是附加在请求URL后面的数据,使用一个问号(?)分隔,问号后面为请求参数名和参数值对,参数名和参数值之间用等号(=)分隔。2.通过表单域传递请求参数通过表单域指定请求参数,每个表单域可以传递一个请求参数,这种方法适用于GET请求和POST请求。下面是一个登录页面,通过表单提供用户名(username)和密码(password)两个请求参数,然后在Servlet中检索参数并验证,最后向用户发送验证消息。清单2.1login.html<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>登录页面</title>❶</head>❶<body><formaction="user-login"method="post"><fieldset>❷<legend>用户登录</legend>❷<p><label>用户名:<inputtype="text"name="username"/></label>❷</p>❷<p><label>密  码:<inputtype="password"name="password"/></label></p><p><label><inputtype="submit"value="登录"/><inputtype="reset"value="取消"/></label></p></fieldset></form></body></html>客户发送给服务器的请求信息被封装在HttpServletRequest对象中,其中包含了由浏览器发送给服务器的数据,这些数据包括请求参数、客户端有关信息等。可以使用ServletRequest接口中定义的方法检索这些参数,下面是与检索请求参数有关的方法。publicStringgetParameter(String

name):返回由name指定的请求参数值,如果指定的参数不存在,则返回null值。若指定的参数存在,用户没有提供值,则返回空字符串。使用该方法必须保证指定的参数值只有一个。publicString[]getParameterValues(String

name):返回指定参数name所包含的所有值,返回值是一个String数组。如果指定的参数不存在,则返回null值。该方法适用于参数有多个值的情况。如果参数只有一个值,则返回的数组的长度为1。除上述两个方法外,ServletRequest接口还定义了getParameterNames()方法,它返回一个包含所有请求参数名的Enumeration枚举对象,还有一个getParameterMap()方法,返回一个包含所有请求参数的Map对象。清单2.2的LoginServlet.java检索表单提交的数据(请求参数),验证数据并向用户发回响应消息。清单2.2LoginServlet.javapackagecom.boda.xy;importjava.io.*;importjakarta.servlet.*;importjakarta.servlet.http.*;importjakarta.servlet.annotation.WebServlet;@WebServlet(name="loginServlet",value={"/user-login"})publicclassLoginServletextendsHttpServlet{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)❶throwsServletException,IOException{❶Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();out.println("<!DOCTYPEhtml>");out.println("<html><head><title>用户登录</title>");out.println("</head><body>");if("admin".equals(username)&&"123456".equals(password)){❷out.println("登录成功!欢迎您,"+username);❷}else{out.println("对不起!您的用户名或密码不正确.");}out.println("</body></html>");}}程序首先通过请求对象request的getParameter()方法获取用户输入的用户名(username)和口令(password)❶。为了方便假设用户输入的用户名为“admin”、口令为“123456”时认为验证成功,显示登录成功的消息❷。在实际应用中,用户名和口令信息通常需要从数据库中读取。访问login.html页面,显示结果如图2-6所示。输入用户名和口令,提交表单,请求将由LoginServlet处理,它从请求对象(request)中读取两个参数值,并显示有关结果。图2-6login.html页面运行结果在LoginServlet类中仅覆盖了doPost(),这样该Servlet只能处理POST请求,不能处理GET请求。如果将login.html中form元素的method属性修改为“get”,该程序不能正常运行。如果希望该Servlet既能处理POST请求,又能处理GET请求,可以添加下面的doGet(),并在其中调用doPost(),如下所示。publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);讲授内容2.3.5请求转发在实际应用中Servlet对请求处理后可能不直接向客户发回响应,而是根据需要将控制转到其他资源(Servlet或JSP/HTML页面)。例如,对于一个登录系统,如果用户输入了正确的用户名和口令,LoginServlet应该将请求转发到欢迎页面,否则应将请求转发到登录页面或错误页面。这就是请求转发(requestforward)。为实现请求转发,需要用请求对象的getRequestDispatcher()得到RequestDispatcher对象,该对象称为请求转发器对象,该方法的格式如下。RequestDispatchergetRequestDispatcher(Stringpath)参数path用来指定要转发到的资源路径。它可以是绝对路径,即以“/”开头,它被解释为相对于当前应用程序的文档根目录,也可以是相对路径,即不以“/”开头,它被解释为相对于当前资源所在的目录。RequestDispatcher接口定义了下面两个方法:publicvoidforward(ServletRequestrequest,ServletResponseresponse):将请求转发到服务器上的另一个动态或静态资源(如Servlet、JSP页面或HTML页面)。该方法只能在响应没有被提交情况下调用,否则将抛出IllegalStateException异常。publicvoidinclude(ServletRequestrequest,ServletResponseresponse):将控制转发到指定的资源,并将其输出包含到当前输出中。这种控制的转移是“暂时”的,目标资源执行完后,控制再转回当前资源接着处理请求完成服务。下面代码创建转发器RequestDispatcher对象,并将控制转发到welcome.jsp页面。RequestDispatcherrd=request.getRequestDispatcher("/welcome.jsp");rd.forward(request,response);2.3.6用请求对象共享数据可以使用请求对象共享数据。请求对象是一个作用域(scope)对象,可以在其上存储属性实现数据共享。属性(attribute)包括属性名和属性值。属性名是一个字符串,属性值是一个对象。有关属性存储的方法有4个,它们定义在ServletRequest接口中。publicvoidsetAttribute(Stringname,Objectobj):将指定名称name的对象obj作为属性值存储到请求对象中。publicObjectgetAttribute(Stringname):返回请求对象中存储的指定名称的属性值,如果指定名称的属性不存在,返回null。使用该方法在必要时需要作类型转换。publicEnumerationgetAttributeNames():返回一个Enumeration对象,它是请求对象中包含的所有属性名的枚举。publicvoidremoveAttribute(Stringname):从请求对象中删除指定名称的属性。演示清单2.3修改后的LoginServlet.javapackagecom.boda.xy;importjava.io.*;importjakarta.servlet.*;importjakarta.servlet.http.*;importjakarta.servlet.annotation.WebServlet;@WebServlet(name="loginServlet",value={"/user-login"})publicclassLoginServletextendsHttpServlet{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");//用户名和口令正确,认为登录成功StringdispatchUrl=null;if(username.equals("admin")&&password.equals("123456")){request.setAttribute("username",username);❷❶dispatchUrl="/welcome.jsp";❷❶}else{❸dispatchUrl="/error.jsp";❸}RequestDispatcherrd=request.getRequestDispatcher(dispatchUrl);rd.forward(request,response);}}该程序仍然使用清单2.3的login.html页面输入用户名和口令,单击“登录”按钮,将请求发送到LoginServlet,如果输入的用户名和口令正确,则将用户名存储到请求对象request中❶,然后指定将请求转发到的资源welcome.jsp页面❷,如果用户名或口令不正确,则将请求转发到error.jsp页面❸。下面是welcome.jsp页面的代码。清单2.4welcome.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>登录成功</title></head><body><h4>登录成功!欢迎您,${username}!</h4></body></html>该页面使用了JSP表达式语言(${username})检索请求对象中关联的属性(username)。关于JSP表达式语言将在第4章讨论。下面是error.jsp页面的代码。清单2.5error.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>错误页面</title></head><body><imgalt=""src="images\error.png"><p>对不起,您的用户名或口令错误!</p><ahref="login.html">返回登录页面</a></body></html>自学,观看视频2.3.7检索客户端信息在HttpServletRequest接口中还定义了下面常用的方法用来检索客户端有关信息:publicStringgetMethod():返回请求使用的HTTP方法名,如GET、POST或PUT等。publicStringgetRemoteHost():返回客户端的主机名。如果容器不能解析主机名,将返回点分十进制形式的IP地址。publicStringgetRemoteAddr():返回客户端的IP地址。publicintgetRemotePort():返回客户端IP地址的端口号。publicStringgetProtocol():返回客户使用的请求协议名和版本,如HTTP/1.1。publicStringgetRequestURI():返回请求行中URL的查询串前面的部分。publicStringgetContentPath():返回请求的上下文路径。publicStringgetQueryString():返回请求行中URL的查询串的内容。publicStringgetContentType():返回请求体的MIME类型。publicStringgetCharacterEncoding():返回客户请求的编码方式。如图2-7所示。图2-7ClientInfoServlet的运行结果2.3.8检索请求头信息HTTP请求头是随请求一起发送到服务器的信息,它是以“名/值”对的形式发送。例如,关于浏览器的信息就是通过User-Agent请求头发送的。在服务器端可以调用请求对象的getHeader("User-Agent")得到浏览器的信息。表2-4中列出了常用的请求头名。表2-4HTTP的常用请求头请求头内容User-Agent关于浏览器和它的平台的信息Accept客户能接受并处理的MIME类型Accept-Charset客户可以接受的字符集Accept-Encoding客户能处理的页面编码的方法Accept–Language客户能处理的语言Host服务器的DNS名字Authorization访问密码保护的Web页面时,客户用这个请求头来标识自己的身份Cookie将一个以前设置的Cookie送回服务器Date消息被发送的日期和时间Connection指示连接是否支持持续连接,值Keep-Alive表示支持持续连接结果如图2-8所示。图2-8ShowHeadersServlet的运行结果课堂互动与讨论1、有一个URL,/hello-servlet?username=Smith,问号后面的内容称为()。A.请求参数B.查询串C.请求URID.响应数据2、将一个Student类的对象student用名称studobj存储到请求作用域中,下面代码正确的是()。A.request.setAttribute("student",studobj)B.request.addAttribute("student",studobj)C.request.setAttribute("studobj",student)D.request.getAttribute("studobj",student)3、在Servlet中如果需要获得一个页面的表单中的请求参数,又不知道参数名时如何做?总结课后作业知识点总结、1、HTTP请求结构、发送HTTP请求、处理HTTP请求、请求参数传递与获取、请求转发。2、用请求对象共享数据、检索客户端信息、检索请求头信息。二、课后作业1.登录本书在线作业网站,完成本章作业题目。地址:/2.完成下面的综合应用,其运行结果如图2-18和2-19所示。(1)创建JSP页面input.jsp,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。(2)定义com.boda.xy.Student类,其中包括学号id和姓名name两个private的成员变量,为id和name定义访问方法和修改方法。(3)编写名为FirstServlet的Servlet,要求当用户在input.jsp中输入信息后点击“登录”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单传递的参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求对象中,然后通过请求对象的getRequestDispatcher()获得RequestDispatcher对象,将请求转发到SecondServlet。(4)在SecondServlet中取出请求对象上存储的Student对象,并显示输出该学生的学号和姓名。在SecondServlet的输出中应该包含一个超链接,点击该连接可以返回input.jsp页面。图2-18input.jsp页面显示结果图2-19SecondServlet显示结果教学反思

《JavaWeb编程技术》教案第04讲发送响应2学时110分钟章节内容第2章JavaServlet技术2.4发送响应2.5案例学习:表单数据处理教学目标重点掌握发送响应掌握表单数据处理重点难点重点:掌握发送响应。难点:发送响应。教学环节教学方法及其它说明事项1.采用讲授法、演示法、讨论法。2.案例+项目式教学。3.采用线上线下混合教学模式。配套线上课程地址:/detail/2182465434.软件环境:Windows10,JDK16以上,Eclipse2020以上。导言或复习在服务器端,Servlet对请求处理完后,通常需要向客户发回响应。如果需要直接向客户发送响应,需要使用输出流对象。也可以将响应重定向到其他资源。讲授内容2.4发送响应2.4.1HTTP响应结构由服务器向客户发送的HTTP消息称为HTTP响应(HTTPresponse),图2-11所示为一个典型的HTTP响应消息。从图中可以看到,HTTP响应也由三部分组成:状态行、响应头和响应的数据。2.4.2输出流与内容类型Servlet使用输出流向客户发送响应。调用响应对象的getWriter()可以得到PrintWriter对象,使用它可向客户发送文本数据。通常,在发送响应数据之前还需通过响应对象的setContentType()设置响应的内容类型。publicPrintWritergetWriter():返回一个PrintWriter对象用于向客户发送文本数据。publicServletOutputStreamgetOutputStream()throwsIOException:返回一个输出流对象,它用来向客户发送二进制数据。publicvoidsetContentType(Stringtype):设置发送到客户端响应的MIME内容类型。演示2.4.3响应重定向Servlet在对请求进行分析后,可能不直接向浏览器发送响应,而是向浏览器发送一个Location响应头,告诉浏览器访问其他资源,这称为响应重定向。响应重定向是通过响应对象的sendRedirect()实现,格式如下:publicvoidsendRedirect(Stringlocation)该方法向客户发送一个重定向的响应,参数location为新的资源的URL,该URL可以是绝对URL(如),也可以是相对URL。若相对路径以“/”开头,则相对于服务器根目录(如,/helloweb/login.html),若不以“/”开头,则相对于Web应用程序的文档根目录(如,login.jsp)。下面程序是一个使用sendRedirect()重定向请求的例子。清单2.9RedirectServlet.javapackagecom.boda.xy;importjava.io.*;importjakarta.servlet.*;importjakarta.servlet.http.*;importjakarta.servlet.annotation.*;@WebServlet(name="sendRedirect",value={"/send-redirect"})publicclassRedirectServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest, HttpServletResponseresponse) throwsIOException,ServletException{StringuserAgent=request.getHeader("User-Agent"); //在请求对象上存储一个属性request.setAttribute("param1","请求作用域属性"); //在会话对象上存储一个属性 HttpSessionsession=request.getSession();session.setAttribute("param2","会话作用域属性"); if((userAgent!=null)&&(userAgent.indexOf("Chrome")!=-1)){ response.sendRedirect("welcome.jsp");}else{response.sendRedirect("/"); } }}自学或观看视频2.4.4设置响应头响应头是随响应数据一起发送到浏览器的附加信息。每个响应头通过“名/值”对的形式发送到客户端。例如,可以使用一个响应头告诉浏览器每隔一定时间重新装载一次页面,或者指定浏览器对页面缓存多长时间。在HttpServletResponse接口中定义了如下有关响应头管理的方法。publicvoidsetHeader(Stringname,Stringvalue):将指定名称的响应头设置为指定的值。publicvoidsetIntHeader(Stringname,intvalue):用给定的名称和整数值设置响应头。publicvoidsetDateHeader(Stringname,longdate):用给定的名称和日期值设置响应头。publicvoidaddHeader(Stringname,Stringvalue):用给定的名称和值添加响应头。publicvoidaddIntHeader(Stringname,intvalue):用给定的名称和整数值添加响应头。publicvoidaddDateHeader(Stringname,longdate):用给定的名称和日期值添加响应头。publicbooleancontainsHeader(Stringname):返回是否已经设置指定的响应头。2.4.5发送状态码服务器向客户发送的响应的第一行是状态行,它由三部分组成:HTTP版本、状态码和状态码的描述信息。表2-7状态码的分类状态码范围含义示例100~199表示信息100表示服务器同意处理客户的请求200~299表示请求成功200表示请求成功,204表示内容不存在300~399表示重定向301表示页面移走了,304表示缓存的页面仍然有效400~499表示客户的错误403表示禁止的页面,404表示页面没有找到500~599表示服务器的错误500表示服务器内部错误,503表示以后再试案例2.5案例学习:表单数据处理2.5.1常用表单控件元素表单使用<form>元素创建,一般格式如下:<formaction="user-register"method="post">…</form>action属性指定处理表单数据的服务器端程序。如果Servlet或JSP页面和HTML表单位于同一服务器上,那么在action属性中应使用相对URL。method属性指定数据如何传输到服务器,它的取值可为“post”或“get”。在使用“get”时发送GET请求,使用“post”发送POST请求。1.文本控件2.按钮控件3.单选按钮和复选框4.组合框和列表框5.HTML5新增的字段2.5.2表单数据处理本节创建一个名为register.html页面,其中包含多种表单控件,访问该页面运行结果如图2-9所示。图2-9register.html页面运行结果清单2.12register.html<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>用户注册页面</title></head><body><h4>用户注册页面</h4><formaction="user-register"method="post"><table><tr><td>用户名:</td><td><inputtype="text"name="username"size="15"></td></tr><tr><td>密码:</td><td><inputtype="password"name="password"size="16"></td></tr><tr><td>性别:</td><td><inputtype="radio"name="sex"value="male">男<inputtype="radio"name="sex"value="female">女</td></tr><tr><td>年龄:</td><td><inputtype="number"name="age"size="5"></td></tr><tr><td>兴趣:</td><td><inputtype="checkbox"name="hobby"value="read">文学<inputtype="checkbox"name="hobby"value="sport">体育<inputtype="checkbox"name="hobby"value="computer">电脑</td></tr><tr><td>学历:</td><td><selectname="education"><optionvalue="bachelor">学士</option><optionvalue="master">硕士</option><optionvalue="doctor">博士</option></select></td></tr><tr><td>邮件地址:</td><td><inputtype="email"name="email"size="20"></td></tr><tr><td>简历:</td><td><textareaname="resume"rows="5"cols="30"></textarea></td></tr><tr><td><inputtype="submit"name="submit"value="提交"></td><td><inputtype="reset"name="reset"value="重置"></td></tr></table></form></body></html>表单数据作为请求参数传递到服务器端,在服务器端的Servlet中通常使用请求对象的getParameter()方法和getParameterValues()方法获取表单数据。当控件只有一个值时,使用getParameter()方法,当控件有多个值时使用getParameterValues()方法。下面的FormServlet读取register.html页面传递来的请求参数并显示用户输入信息。清单2.13FormServlet.javapackagecom.boda.xy;importjava.io.IOException;importjava.io.PrintWriter;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.HttpServlet;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;@WebServlet(name="formServlet",value={"/user-register"})publicclassFormServletextendsHttpServlet{privatestaticfinallongserialVersionUID=54L;privatestaticfinalStringTITLE="用户信息";@OverridepublicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();out.println("<!DOCTYPEhtml>");out.println("<html><head>");out.println("<metacharset=\"UTF-8\">");out.println("<title>"+TITLE+"</title></head>");out.println("</head>");out.println("<body><h4>"+TITLE+"</h4>");out.println("<table>");out.println("<tr><td>用户名</td>");Stringusername=request.getParameter("username");out.println("<td>"+username+"</td></tr>");out.println("<tr><td>密码:</td>");out.println("<td>"+request.getParameter("password")+"</td></tr>");out.println("<tr><td>性别:</td>");out.println("<td>"+request.getParameter("sex")+"</td></tr>");out.println("<tr><td>年龄:</td>");out.println("<td>"+request.getParameter("age")+"</td></tr>");

温馨提示

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

评论

0/150

提交评论