基础课程体系java1_第1页
基础课程体系java1_第2页
基础课程体系java1_第3页
基础课程体系java1_第4页
基础课程体系java1_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

2020/12/1第三章Servlet的编写及调用

2020/12/1一、Servlet的种类在Servlet2.3规范中,共有三种Servlet:1、标准Servlet用来对用户的HTTP请求作出响应,如生成动态网页、控制程序的流向、是最常用的Servlet2020/12/12、过滤器Servlet在用户请求的数据传递给标准Servlet或JSP页面之前对数据进行处理,可完成以下功能:安全检查:核实用户在访问某一网页时的口令是否正确,是否有相应的访问权限数据修改:针对用户传递的数据进行修改数据压缩:如果一个网页含有大量的数据(如含有大量的图片),可利用FilterServlet在传递给用户端之前进行压缩,以减少数据量2020/12/13、监听器Servlet监听器Servlet可对Servlet运行的WEB服务器进行监控,可实现:监控用户的访问对WEB服务器的启动、终止进行响应2020/12/1二、Servlet的基本构成1、用于Servlet的java包和类javax.servlet包含用于Servlet编程的最基础的类javax.servlet.http是Servlet编程最重要的包java.io协助Servlet完成文件读取、日志记录等工作javax.servlet.http.HttpServlet类此类是进行Servlet编程中最为重要的类,Servlet程序设计就是通过继承此类,重载该类中相应的方法来完成的。…2020/12/12020/12/1(1)init的方法在用户第一次激活Servlet时,该方法将自动执行;也可以在Servlet容器启动时执行。init()在Servlet程序中只被执行一次声明方式:publicvoidinit()throwsServletException{…}可在此方法中执行整个Servlet程序的初始化工作,如建立用户访问页数次数的计数器,初始化数据库连接等等工作2020/12/1(2)service方法用户提交的各种http请求,如get、post、put等等,都先由service方法接收,service方法根据用户请求的类型调用在相应的doGet、doPost、doPut等方法建议不要在service方法中对用户的请求进行处理,而是在相应的doGet、doPost等方法中进行处理2020/12/1service方法的声明形式publicvoidservice(ServletRequestreq,ServletResponseres)‏throwsServletException,java.io.IOException{……}说明:req参数代表用户提交的请求,从中可提取传送过来的参数及相应的数值;而res代表Servlet程序对用户请求的响应,可利用该参数向用户端输出html代码,生成相应的网页。2020/12/1(3)doGet方法protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException{…….}2020/12/1doGet方法的使用可在doGet方法中对用户的get请求进行响应,利用req参数取得用户传入的参数,再利用resp参数对用户进行回应,该方法可对用户直接在浏览器中输入Servlet的url进行的请求进行回应。2020/12/1doGet方法示例代码protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,java.io.IOException{response.setContentType("text/html;chartset=GBK");PrintWriterout=response.getWriter();out.println("<html><head>");out.println("<title>Servlet</title>");out.println("</head>");out.println("<body>");out.println("<h3>hello,world</h3>");out.println("</body></html>");out.close();}2020/12/1(3)doPost方法protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)‏throwsServletException,java.io.IOException{……}doPost方法参数类型和数目和doPost相同。2020/12/1doPost方法的调用doPost方法用来响应通过HTTP协议的post方式传递的请求。一般而言,doPost方法的调用需要借助HTML页面中的表单标记。2020/12/12020/12/11、web.xml文件web.xml文件是一种xml类型的文件,Servlet利用web.xml对自身进行设置,此文件是Servlet应用程序的核心配置文件,利用该文件可以指定Servlet在引擎中的如下特性:对Servlet完成的功能进行说明指定Servlet在引擎中发布后,可供客户端调用的URI指定Servlet被引擎装载时的运行参数指定Servlet可以使用的JavaEE资源文件中还可以指定一些Servlet以外的属性,比如Web程序的默认起始页等属性。2020/12/12、web.xml文件的格式按照Servlet2.3规范,web.xml文件利用DTD进行XML文件合法性约束,因此,在web.xml文件的开头必须声明XML文件的版本号和编码格式,并且还要声明相关的DTD约束。实际上,符合Servlet2.3规范的web.xml的开头格式都是固定的,其内容如下所示:

<?xmlversion="1.0"encoding="ISO-8859-1"?><!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""">2020/12/13、web.xml正文内容在本节中,主要讨论和Servlet相关的常用元素,主要包括以下几个:<servlet>…</servlet>段对Servlet的名字进行了定义。<servlet-mapping>…</servlet-mapping>段定义了Servlet名字在引擎中的URI。具体的示例请参照下面的示例。2020/12/1web.xml文件示例<web-app><display-name>HelloServlet</display-name><description>ASimpleServlet</description><servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet</url-pattern></servlet-mapping></web-app>2020/12/14、Servlet和Web应用程序在Tomcat中发布MyServlet之后,就可以通过在浏览器中输入调用该Sevlet,此时Servlet将在浏览器窗口中回应“Hello,world”在上述调用URL中,“servlet”是MyServlet在Tomcat中的发布名称,该名称一般被称为Web应用程序上下文,代表该Servlet在Tomcat中的调用标识,以下将讨论Web应用程序的概念2020/12/12020/12/15、Web应用部署的上下文路径在Servlet引擎中部署Web应用之后,可以通过HTTP协议,利用URL对该Web应用程序提供的资源进行请求。该URL的形式如下所示:http://主机名:端口号/Web应用程序标识/资源名在上述URL中,Web应用程序标识即为Servlet引擎在部署Web应用程序后为该程序所起的名称。也称为Web应用程序的上下文路径(ContextPath)。Servlet引擎一般采用Web应用程序的WAR文件名作为其上下文路径,同时也允许为Web应用程序指定其他的名称。在Tomcat中,如果将Web应用程序的目录或WAR文件拷贝到webapps目录中,那么该Web应用程序的上下文路径就是拷贝后的目录名或WAR文件名。2020/12/12020/12/12020/12/12020/12/17、<URL-PATTERN>的映射<URL-PATTERN>标记规定在Web程序中,如何通过某个URL调用给定的Servlet。利用<URL-PATTERN>标记可以定义多种方式Servlet的调用URL.2020/12/1/<URLName>将/<URLName>为上下文路径的请求映射到某一Servlet类。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet</url-pattern></servlet-mapping>2020/12/1/<path>/*映射所有以<path>为上下文路径的请求到某一Servlet类。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet/*</url-pattern></servlet-mapping>2020/12/1*.<ext>映射所有以.<ext>为扩展名的请求到某一Servlet类。例:<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>2020/12/1/或/*如果用户发出的url请求在以上两种映射定义都没有匹配,而在web.xml中定义了“/”或“/*”映射,那么该url请求将由此映射定义的Servlet进行处理。例:

<servlet><servlet-name>MyServlet</servletname><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2020/12/18、Servlet的两种运行方式Servlet类的实例化是由Web容器控制的。当多个用户同时访问某个Servlet时,Web容器提供了两种模式响应用户的请求:多线程模式单线程模式2020/12/1(1)多线程模式多线程是Servlet最为常用的运行模式。在这种模式中,Servlet容器只实例化一个Servlet类,用这一个类实例服务所有的对该Servlet的请求。此时,该类中定义的service、doGet、doPost等方法都是多线程的,而init、destroy不是多线程的。2020/12/12020/12/1多线程模式注意事项在多线程模式中,由于在同一时刻会产生几个对service或doXxx调用,而Servlet类的实例只有一个,所以,如果在service或doXxx方法中对类中声明的属性(即实例变量)或类中的静态变量(即类变量)进行访问,应注意变量的并发访问问题2020/12/1(2)单线程模式单线程模式是指Servlet类中声明的service方法、doGet、doPost等方法都是单线程的,不用考虑线程中的同步问题。在此种模式下,如果有多个请求同时要求调用service或doGet等方法,则容器将以一定的方式保证在同一时刻只有一个请求被相应的方法处理。2020/12/1方式1:排队方式请求1请求2请求3doXxxinitdestroyServlet类实例2020/12/12020/12/1单线程模式的说明实现单线程模式运行的Servlet需要实现SingleThreadModel接口不同的Servlet/JSP引擎在单线程模式下采取的具体实现方式(排队或多实例)有所不同一般情况下,不提倡使用单线程模式,因为这样有可能降低Servlet处理请求的效率(在排队模式下),且并不能完全避免多线程中变量的同步访问问题。在Servlet2.4规范中,已经废弃了单线程模式2020/12/1四、在NetBeans

温馨提示

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

评论

0/150

提交评论