Java Web 开发从入门到实战 课件 第6章 Java Servlet基础_第1页
Java Web 开发从入门到实战 课件 第6章 Java Servlet基础_第2页
Java Web 开发从入门到实战 课件 第6章 Java Servlet基础_第3页
Java Web 开发从入门到实战 课件 第6章 Java Servlet基础_第4页
Java Web 开发从入门到实战 课件 第6章 Java Servlet基础_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第6章JavaServlet基础学习目的与要求本章主要介绍Java

Servlet的基础知识,包括部署Servlet、Servlet的生命周期、JSP页面如何访问Servlet、重定向与转发等。通过本章的学习,熟练掌握Servlet对象的创建与运行,理解Servlet的生命周期与工作原理。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.1Servlet类与Servlet对象编写一个Servlet类很简单,只要继承jakarta.servlet.http包中的HttpServlet类,并重写响应HTTP请求的方法即可。HttpServlet类实现了Servlet接口,实现了响应用户请求的接口方法。HttpServlet类的一个子类习惯地称为一个Servlet类,这样的子类创建的对象又习惯地称为servlet对象。【例6-1】一个简单的Servlet类。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.2Servlet对象的创建与运行要想让Web服务器使用Servlet类编译后的字节码文件创建Servlet对象处理用户请求,必须先为Web服务器部署Servlet。部署Servlet,目前有两种方式:一是在web.xml中部署Servlet;一是基于注解的方式部署Servlet。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.2.1在web.xml中部署Servletweb.xml文件由Web服务器负责管理,该文件是Web应用的部署描述文件,包含如何将用户请求URL映射到Servlet。因此,可以在Web项目的web\WEB-INF\web.xml文件中,部署自己的Servlet。<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>servlet.FirstServlet</servlet-class></servlet><servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/firstServlet</url-pattern></servlet-mapping>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.2.2基于注解的方式部署Servlet从6.2.1节可知,每开发一个Servlet,都要在web.xml文件中部署Servlet才能够使用。这样会给Web工程的维护带来非常大的麻烦。从Servlet3.0开始提供了注解@WebServlet,使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。本书中后续的Servlet都是基于注解的方式部署。注解虽然方便了开发人员,但在后期会让维护和调试成本增加。为方便后期维护,建议开发人员部署Servlet时把@WebServlet的属性urlPatterns的值设置为Servlet类的名字。例如:@WebServlet(name="secondServlet",urlPatterns={"/secondServlet"})publicclassSecondServletextendsHttpServlet{}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.@WebServlet@WebServlet用于将一个类声明为Servlet对象,该注解将会在部署时被Web容器处理,Web容器根据具体属性将相应的类部署为Servlet对象。属性名类

型描

述nameString指定Servlet的name属性,等价于<servlet-name>。如果没有显式指定,则该Servlet的取值即为类的全名。valueString[]该属性等价于urlPatterns属性。两个属性不能同时使用。urlPatternsString[]指定一组Servlet的URL匹配模式。等价于<url-pattern>标签。loadOnStartupint指定Servlet的加载顺序,等价于<load-on-startup>标签。initParamsWebInitParam[]指定一组Servlet初始化参数,等价于<init-param>标签。以上所有属性均为可选属性,但是vlaue或者urlPatterns通常是必需的,且二者不能共存,如果同时指定,通常是忽略value的取值。可使用简化注解,如@WebServlet("/secondServlet"),其中“/secondServlet”为请求的URL,即urlPatterns属性值。【例6-2】基于注解的Servlet类——SecondServlet。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.@WebInitParam@WebInitParam注解通常不单独使用,而是配合@WebServlet和@WebFilter(第8章讲解)使用。它的作用是为Servlet或Filter指定初始化参数,这等价于web.xml中<servlet>的<init-param>子标签。属性名类

型是否可选描

述nameString否指定参数的名字,等价于<param-name>。valueString否指定参数的值,等价于<param-value>。@WebServlet(name="thirdServlet",urlPatterns={"/thirdServlet"},initParams={@WebInitParam(name="firstParam",value="one"),@WebInitParam(name="secondParam",value="two")})《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.2.3实践环节——@WebServlet的应用首先,将web.xml文件中有关Servlet的部署代码删除,然后使用注解的方式部署例6-1的Servlet,并运行部署后的Servlet。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.3Servlet的生命周期1.初始化Servlet对象当Servlet对象第一次被请求加载时,服务器会创建一个Servlet对象,该Servlet对象调用init()方法完成必要的初始化工作。2.service方法响应请求创建的Servlet对象再调用service方法响应客户的请求。3.Servlet对象死亡当服务器关闭时,Servlet对象调用destroy()方法使自己消亡。从上面三个过程来看,init()方法只能被调用一次,即在Servlet第一次被请求加载时调用该方法。当客户端请求Servlet服务时,服务器将启动一个新的线程,在该线程中,Servlet对象调用service()方法响应客户端的请求。那么多客户端请求Servlet服务时,服务器会怎么办呢?服务器会为每个客户端启动一个新的线程,在每个线程中,Servlet对象调用service()方法响应客户端的请求。也就是说,每个客户端请求都会导致service()方法被调用执行,分别运行在不同的线程中。【例6-3】Servlet接口的init()、service()和destroy()方法。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.4通过JSP页面访问Servlet可以通过JSP页面的表单或超链接请求某个Servlet。通过JSP页面访问Servlet的好处是,JSP页面负责页面的静态信息处理,动态信息处理由Servlet完成。1.通过表单访问Servlet假设在JSP页面中,有如下表单:<formaction="isLogin"method="post">……</form>那么该表单的处理程序(action)就是一个Servlet,为该Servlet部署时,@WebServlet

的urlPatterns属性值为“{"/isLogin"}”。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.4通过JSP页面访问Servlet2.通过超链接访问Servlet在JSP页面中,可以单击超链接,访问Servlet对象,同时也可以通过超链接向Servlet提交信息,例如,<ahref="loginServlet?user=taipingle&&pwd=zhenzuile">查看用户名和密码</a>,“查看用户名和密码”这个超链接就将user=taipingle和pwd=zhenzuile两个信息提交给Servlet处理。【例6-4】编写JSP页面login.jsp,在该页面中通过表单向urlPatterns为“{"/loginServlet"}”的Servlet(由LoginServlet类负责创建)提交用户名和密码,Servlet负责判断输入的用户名和密码是否正确,并把判断结果返回。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.5doGet()和doPost()方法当服务器接收到一个Servlet请求时,就会产生一个新线程,在这个线程中让Servlet对象调用service()方法为请求作出响应。service()方法首先检查HTTP请求类型(get或post),并在service()方法中根据用户的请求方式,对应地再调用doGet()或doPost()方法。HTTP请求类型为get方式时,service()方法调用doGet()方法响应用户请求;HTTP请求类型为post方式时,service()方法调用doPost()方法响应用户请求。因此,在Servlet类中,没有必要重写service()方法,直接继承即可。在Servlet类中重写doGet()或doPost()方法来响应用户的请求,这样可以增加响应的灵活性,同时减轻服务器的负担。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.5doGet()和doPost()方法【例6-5】编写JSP页面inputLader.jsp,在该页面中使用表单向urlPatterns为“{"/getLengthOrAreaServlet"}”的Servlet提交矩形的长与宽。Servlet(由GetLengthOrAreaServlet负责创建)处理手段依赖表单提交数据的方式,当提交方式为get时,Servlet计算矩形的周长,当提交方式为post时,Servlet计算矩形的面积。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.6重定向与转发重定向是将用户从当前JSP页面或Servlet定向到另一个JSP页面或Servlet,以前的request中存放的信息全部失效,并进入一个新的request作用域;转发是将用户对当前JSP页面或Servlet的请求转发给另一个JSP页面或Servlet,以前的request中存放的信息不会失效。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.6.1重定向在Servlet中通过调用HttpServletResponse类中的方法sendRedirect(String

location)来实现重定向,重定向的目标页面或Servlet(由参数location指定),无法从以前的request对象中获取用户提交的数据。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.6.2转发jakarta.servlet.RequestDispatcher对象可以将用户对当前JSP页面或Servlet的请求转发给另一个JSP页面或Servlet。实现转发需要两个步骤:1.获得RequestDispatcher对象在当前JSP页面或Servlet中,使用request对象调用publicRequestDispatchergetRequestDispatcher(Stringurl)方法返回一个RequestDispatcher对象,其中参数url就是要转发的JSP页面或Servlet的地址,例如:

RequestDispatcher

dis=request.getRequestDispatcher("dologin");2.RequestDispatcher对象调用forward()方法实现转发获得RequestDispatcher对象之后,就可以使用该对象调用publicvoidforward(ServletRequestrequest,ServletResponseresponse)方法将用户对当前JSP页面或Servlet的请求转发给RequestDispatcher对象所指定的JSP页面或Servlet。例如:

dis.forward(request,response);《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

重定向与转发示例【例6-6】编写JSP页面redirectForward.jsp,在该JSP页面中通过表单向urlPatterns为“{"/redirectForwardServlet"}”的Servlet(由RedirectForwardServlet负责创建)提交用户名和密码。如果用户输入的数据不完整,redirectForwardServlet将用户重定向到redirectForward.jsp页面;如果用户输入的数据完整,redirectForwardServlet将用户对redirectForward.jsp页面的请求转发给urlPatterns为“{"/showServlet"}”的Servlet(由ShowServlet负责创建),showServlet显示用户输入的信息。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.6.3实践环节——登录验证编写登录页面login_1.jsp,在该JSP页面中通过表单向urlPatterns为“{"/loginServlet_1"}”的Servlet(由LoginServlet_1类负责创建)提交用户名和密码。如果用户输入的数据不完整,loginServlet_1将用户重定向到login_1.jsp页面;如果用户输入的数据完整并正确(用户名“zhangsan”,密码“123”),loginServlet_1将用户的请求转发给loginSuccess_1.jsp页面,loginSuccess_1.jsp页面显示用户输入的信息。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.7在JavaServlet中使用session在Servlet中获得当前请求的会话对象可通过调用HttpServletRequest的getSession()方法实现,例如:HttpSession

session

=request.getSession(true);//若存在会话则返回该会话,否则新建一个会话。或HttpSessionsession=request.getSession(false);//若存在会话则返回该会话,否则返回null。经常情况下,通过第一种方式获得session,即指定getSession()的参数为true。缺省参数为true,即request.getSession(true)等同于request.getSession()。【例6-7】编写JSP页面useSession.jsp,在该页面中通过表单向名为useSession的Servlet对象(由UseSessionServlet类负责创建)提交用户名,useSession将用户名存入用户的session对象中,然后用户请求另一个Servlet对象showName(由ShowNameServlet类负责创建),showName从用户的session对象中取出存储的用户名,并显示在浏览器中。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录6.1Servlet类与Servlet对象6.2Servlet对象的创建与运行6.3Servlet的生命周期6.4通过JSP页面访问Servlet6.5doGet()和doPost()方法6.6重定向与转发6.7在JavaServlet中使用session6.8基于Servlet的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.8.1MVC模式MVC是Model、View、Controller的缩写,分别代表Web应用程序中的三种职责: 模型——用于存储数据以及处理用户请求的业务逻辑。 视图——向控制器提交数据,显示模型中的数据。 控制器——根据视图提出的请求,判断将请求和数据交给哪个模型处理,处理后的有关结果交给哪个视图更新显示。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.基于Servlet的MVC模式基于Servlet的MVC模式的具体实现如下: 模型:一个或多个JavaBean对象,用于存储数据(实体模型,由JavaBean类创建)和处理业务逻辑(业务模型,由一般的Java类创建)。 视图:一个或多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean标记来显示数据。 控制器:一个或多个Servlet对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将处理结果存放到实体模型JavaBean中,输出给视图显示。浏览器Web服务器HTMLJSP(视图)Servlet(控制器)JavaBean(模型)数据库请求响应请求显示数据存储数据处理数据图6.7JSP中的MVC模式《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.8.2使用JSP、Servlet、JavaBean实现MVC【例6-8】使用MVC模式实现简单的用户登录验证程序,其中包括实体模型User、业务模型UserCheck、控制器LoginCheckServlet和两个视图页面,即登录页面和登录成功页面。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

6.8.3模型周期在基于Servlet的MVC模式中,控制器Servlet创建的实体模型JavaBean也涉及到生命周期,生命周期分别为request、session和application。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

request周期的模型(1)创建模型并把数据保存到模型中Useruser=newUser();//实例化模型useruser.setName(name);//把数据存在模型user中user.setPwd(pwd);//把数据存在模型user中(2)将模型保存到request对象中并转发给视图JSPrequest.setAttribute("user",user);//把装有数据的模型user输出给视图loginSuccess.jsp页面RequestDispatcherdis=request.getRequestDispatcher("loginSuccess.jsp");dis.forward(request,response);(3)视图更新<jsp:useBeanid="user"type="dto.User"scope="request"/><jsp:getPropertyproperty="name"name="user"/>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

session周期的模型(1)创建模型并把数据保存到模型中Useruser=newUser();//实例化模型useruser.setName(name);//把数据存在模型user中user.setPwd(pwd);//把数据存在模型user中(2)将模型保存到session对象中并转发给视图JSPsession.setAttribute("user",user);//把装有数据的模型user输出给视图loginSuccess.jsp页面RequestDispatcherdis=request.getR

温馨提示

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

评论

0/150

提交评论