内蒙古科技大学 教 案 第6章Servlet技术 理论 Servlet技术、Servlet的应用、生命周期和各种常用的类接口 ·技能: 很好地处理Servlet与JSP之间的关系,灵活应用JSP开发网站 ·要求: 掌握Servlet的结构、接口方法和生命周期等概念,学会使用Servlet进行编 程,与表单交互、控制会话等 历史背景: 1995年,Java技术正式推出。 1997年,Sun紧接着又推出Servlet技术 2008年,Servlet的版本己经发展到了2.5版。 念 Servlet(java服务器小程序)是一个用Java编写的程序,此程序在服务器上运 行以处理客户端请求。是按照Servlet规范编写的java类 6.1 servlet对象 ·Java Servlet核心思想:在服务器端创建能响应用户请求的对象,即创建servlet 对象。 ·学习Java Servlet首要任务: (1)编写创建servlet对象的类 (2)综写部署文件 (3)运行servlet(请求Tomcat服务器创建一个servlet对象) (4)servlet对象的使用 一、HttpServlet类 (一)、javax.servlet.http包中的HttpServlet类 (二)、HttpServlet类实现了Servlet接口,实现了响应用户的方法 (三)、HttpServlet类的子类称为一个Servlet类 (四)、Servlet类创建的对象称为一个servlet对象 ,Servlet源文件HelloBeijing.java package star.moon; import iava.io,* import javax.servlet.*; impo mblic class lon extends ervlet rt iavax public void init(ServletConfig config)throws ServletException super.init(config); public void service(HtpServletRequest response) throws IOException 第1页
内 蒙 古 科 技 大 学 教 案 第 1 页 第 6 章 Servlet 技术 ·理论 : Servlet 技术、Servlet 的应用、生命周期和各种常用的类接口 ·技能: 很好地处理 Servlet 与 JSP 之间的关系,灵活应用 JSP 开发网站 ·要求 : 掌握 Servlet 的结构、接口方法和生命周期等概念,学会使用 Servlet 进行编 程,与表单交互、控制会话等 历史背景: 1995 年,Java 技术正式推出。 1997 年,Sun 紧接着又推出 Servlet 技术 2008 年,Servlet 的版本已经发展到了 2.5 版。 概念: Servlet (java 服务器小程序)是一个用 Java 编写的程序,此程序在服务器上运 行以处理客户端请求。是按照 Servlet 规范编写的 java 类 6.1 servlet 对象 ·Java Servlet 核心思想:在服务器端创建能响应用户请求的对象,即创建 servlet 对象。 ·学习 Java Servlet 首要任务: (1)编写创建 servlet 对象的类 (2)编写部署文件 (3)运行 servlet(请求 Tomcat 服务器创建一个 servlet 对象 ) (4)servlet 对象的使用 一、HttpServlet 类 (一)、javax.servlet.http 包中的 HttpServlet 类 (二)、HttpServlet 类实现了 Servlet 接口,实现了响应用户的方法 (三)、HttpServlet 类的子类称为一个 Servlet 类 (四)、Servlet 类创建的对象称为一个 servlet 对象 ·Servlet 源文件 HelloBeijing.java package star.moon; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloBeijing extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void service(HttpServletRequest reqest,HttpServletResponse response) throws IOException
内蒙古科技大学 教 案 (response.setContentType("text/html:charset=GB2312"):/设置响应 的MTE类型 PrintWriter out-response.getWriter(:/获得一个向客户发送数 的输出流 out.println("<html><body>"): out.println(<h2>北京奥运圆满成功!</h2>"): out.printIn("</bodyx</html>"); ·response.getWriter(0和out的区别: 1、out和response.getWriter的类不一样,一个是JspWriter,另一个是 ava.io.PrintWriter 2、执行原理不同:JspWriter相当于一个带缓存功能的printWriter,它不是直接 将数据输出到页面,而是将数据刷新到response的缓冲区后再输出, response.getWriter直接输出数据: 3、out为jsp的内置对象,刷新jsp页面,自动初始化获得out对象,所以使用 out对象是需要刷新页面的,而response.getWriter0响应信息通过out对象输出到 页上,当响应结束时它自动被关闭,与j5页面无关,无需刷新页 4、out的print0方法和printin0方法在缓冲区溢出并 1没有自动刷新时候会产 生ioexception,而response.getWrite()方法的print和printIn中都是抑制 ioexception异常的,不会有ioexception 二、部署servlet (一)字节码的保存 C:\Program Files\Apache Software Foundation'\Tomcat 6.0\webapps\ch6\ WEB-INF\classes\star\moon (二)为了能让Tomcat服务器用字节码文件创建对象,必须为Tomcat服务器编一个部 署文件,一个XL文件,web.Xml,该文件由Tomcat 服务器负责管理 C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ch6\WEB-INF ·web.xml <?xml version="1.0"encoding="IS0-8859-1"?> <web-app> <servlet> Kservlet-name>helloK/servlet-name <servlet-class>star.moon.HelloBeijing</servlet-class> </servlet> 《servlet-mapning> <servlet-name>hello</servlet-name> <url-pattern>/lookHello</url-pattern> /servlet-mapping </web-app> 第2页
内 蒙 古 科 技 大 学 教 案 第 2 页 { response.setContentType("text/html;charset=GB2312");//设置响应 的 MIME 类型 PrintWriter out=response.getWriter();//获得一个向客户发送数据 的输出流 out.println("<html><body>"); out.println("<h2>北京奥运圆满成功!</h2>"); out.println("</body></html>"); } } ·response.getWriter()和 out 的区别: 1、out 和 response.getWriter 的类不一样,一个是 JspWriter,另一个是 java.io.PrintWriter 2、执行原理不同:JspWriter 相当于一个带缓存功能的 printWriter,它不是直接 将数据输出到页面,而是将数据刷新到 response 的缓冲区后再输出, response.getWriter 直接输出数据; 3、out 为 jsp 的内置对象,刷新 jsp 页面,自动初始化获得 out 对象,所以使用 out 对象是需要刷新页面的,而 response.getWriter()响应信息通过 out 对象输出到网 页上,当响应结束时它自动被关闭,与 jsp 页面无关,无需刷新页 4、out 的 print()方法和 println()方法在缓冲区溢出并且没有自动刷新时候会产 生 ioexception,而 response.getWrite()方法的 print 和 println 中都是抑制 ioexception 异常的,不会有 ioexception 二、部署 servlet (一)字节码的保存 HelloBeijing.class 当前 Web 服务目录\WEB-INF\classes\star\moon C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ch6\ WEB-INF\classes\star\moon (二)为了能让 Tomcat 服务器用字节码文件创建对象,必须为 Tomcat 服务器编一个部 署文件,一个 XML 文件,web.xml,该文件由 Tomcat 服务器负责管理。 C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ch6\WEB-INF ·web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>star.moon.HelloBeijing</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/lookHello</url-pattern> </servlet-mapping> </web-app>
内蒙古科技大学 教案 注:1、Encoding属性的值: (1)IS0-8859-1:XWL文件只使用ASCII字符 (2)UTF-8:XML文件可使用ASCII字符、汉字、日文等字符 2、<servlet-class>标记的内容指定Tomcat服务器用哪个类创建servlet对象 3、<servlet-name>标记的内容是Tomcat服务器创建的servlet对象的名字。 例:he11o” 4、<url-pattern>标记的内容用来指定用户用怎样的模式来请求servlet对象。 例:“/1 ookHe11o” 测宽器地址栏:http:/h27.00.1:80s0/ch6/1oke1l (三)一个Web服务目录的veb.xml文件负责管理该目录下的servlet对象 (四)一个Wb服务目录需要多个servlet对象时,只要在eb.xml文件中增加 <servlet>和<servlet-mapping>子标记即可 、行sarv1at 用户请求服务器运行一个s0 rvlet对象时,需根据eb.ml文件中 se vlet-mapping>标记指定的格式输入请求。 例:http:/127.0.0.1:8080/ch6/1 ookHello (二)如果服务器没有名字为hello的servlet对象,服务器会根据web.xml文件中 (servlet-class>标记,用指定的类创建一个名字为hello的servlet对象 四、Servlet体系结构 (一)Servlet包含两个包: l.javax.servlet称为GenericServlet 2.javax.servlet.http称为HttpServlet (二)Servlet包的层次结构 Servlet GenericSer HttnServlet 用户自定义的Servlet 第3页
内 蒙 古 科 技 大 学 教 案 第 3 页 注:1、Encoding 属性的值: (1)ISO-8859-1:XML 文件只使用 ASCII 字符 (2)UTF-8: XML 文件可使用 ASCII 字符、汉字、日文等字符 2、<servlet-class>标记的内容指定 Tomcat 服务器用哪个类创建 servlet 对象 3、<servlet-name>标记的内容是 Tomcat 服务器创建的 servlet 对象的名字。 例:“hello” 4、<url-pattern>标记的内容用来指定用户用怎样的模式来请求 servlet 对象。 例:“/lookHello” 浏览器地址栏:http://127.0.0.1:8080/ch6/lookHello (三)一个 Web 服务目录的 web.xml 文件负责管理该目录下的 servlet 对象 (四)一个 Web 服务目录需要多个 servlet 对象时,只要在 web.xml 文件中增加 <servlet>和<servlet-mapping>子标记即可 三、运行 servlet (一)用 户请 求服 务 器运 行一 个 servlet 对象 时 ,需 根据 web.xml 文件中 <servlet-mapping>标记指定的格式输入请求。 例:http://127.0.0.1:8080/ch6/lookHello (二)如果服务器没有名字为 hello 的 servlet 对象,服务器会根据 web.xml 文件中 <servlet-class>标记,用指定的类创建一个名字为 hello 的 servlet 对象 四、Servlet 体系结构 (一)Servlet 包含两个包: 1.javax.servlet 称为 GenericServlet 2. javax.servlet.http 称为 HttpServlet (二)Servlet 包的层次结构 Servlet GenericSer vlet HttpServlet 用户自定义的 Servlet
内蒙古科技大学 教 案 (三)Servlet必须实现javax.servlet.Servlet接口 (四)通过扩展这两个类实现: 跨协议的Servlet 2.javax.servlet.HttpServlet HTTP Servlet ,Servlet实现. GenericServlet类和HttpServlet类 abstract GenericServlet public abstract service(request response) ◆ 继承 HttpServlet protected void service(request.response) public void service(request.response) protected void doGet(request.response) protected void doPost(request.response) 注 (1)我们自己编写的servlet要继承HttpServlet,.一般要覆盖doPost或者doGe 方法。 (2)HttpServlet类的doGet方法用于接收Get请求,doPost方法用于接收Post 请求。 第4页
内 蒙 古 科 技 大 学 教 案 第 4 页 (三)Servlet 必须实现 javax.servlet.Servlet 接口 (四)通过扩展这两个类实现: 1.javax.servlet.GenericServlet 跨协议的 Servlet 2.javax.servlet.HttpServlet HTTP Servlet ·Servlet 实现: GenericServlet 类和 HttpServlet 类 注: (1)我们自己编写的 servlet 要继承 HttpServlet,一般要覆盖 doPost 或者 doGet 方法。 (2)HttpServlet 类的 doGet 方法用于接收 Get 请求,doPost 方法用于接收 Post 请求
内蒙古科技大学 教 案 elet收到一个请求 这个 ublic的service()方 法调用ro的 调用public的service()方法 方法 根据HTTP请求方法的类 6.2 servlet的工作原理 、servlet的生命周期 (一)一个servlet对象的生命周期: 1.初始化servlet对象。servlet对象第一次被请求加载时,服务器创建一个 servlet对象,这个对象调用init方法完成必要的初始化工作。 2.诞生的 ervlet对象再调用ser C方法响应客户的请求。 3.当服务器关闭时,调用destory方法,结束该servlet。 实例化:一般在第一次请求servlet时创建servlet实例。 初始化:包容器调用实例的initO方法。 服务:如果包容器有请求要传送给servlet,它就会调用 et立例的 个清求作为一个线程 消亡:在实例消亡之前,包容器调用servlet3实例的destroy()方法。 不可获得的:实例被删除了。 第5页
内 蒙 古 科 技 大 学 教 案 第 5 页 6.2 servlet 的工作原理 一、servlet 的生命周期 (一)一个 servlet 对象的生命周期: 1.初始化 servlet 对象。 servlet 对象第一次被请求加载时,服务器创建一个 servlet 对象,这个对象调用 init 方法完成必要的初始化工作。 2.诞生的 servlet 对象再调用 service 方法响应客户的请求。 3.当服务器关闭时,调用 destory 方法,结束该 servlet