1 / 35

第14章 Servlet 编程

第14章 Servlet 编程. 教学目的要求. 1.理解 Servlet 的概念以及 Servlet 的处理流程。 2.初步掌握用 java 书写动态网页的技能。 3.对 java 在构建 Web 网站方面的应用有初步的了解。. 14.1 Servlet 简介. Servlet 是标准的服务器端程序,用以增强 Web 服务器的功能。 Servlet 运行在服务器上,当 Web 服务器收到一个用户的 Servlet 请求时,执行 Servlet , 动态地创建 HTML 响应给用户。. 14.1.1 Servlet 概述.

kailey
Download Presentation

第14章 Servlet 编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第14章 Servlet编程 教学目的要求 1.理解Servlet的概念以及Servlet的处理流程。 2.初步掌握用java书写动态网页的技能。 3.对java在构建Web网站方面的应用有初步的了解。

  2. 14.1 Servlet简介 Servlet是标准的服务器端程序,用以增强Web服务器的功能。Servlet运行在服务器上,当Web服务器收到一个用户的Servlet请求时,执行Servlet,动态地创建HTML响应给用户。

  3. 14.1.1 Servlet概述 • Servlet是标准的服务器端程序,用以增强Web服务器的功能。用Servlet可以创建协议、平台无关的Web应用程序可以生成动态的Web页面,它是公共网关接口(Common Gateway Interface ,CGI)程序设计的Java技术解决方案。 • Servlet提供了比使用CGI开发服务器端功能更好的方法,因为Java Servlet 在Web服务器和Servlet之间定义了一个标准的接口,这使Servlet运行是平台独立的,具有很高的可移植性,可以和异构的服务器交互。大多数主流服务器通过插件支持Servlet。

  4. 14.1.2 Servlet开发环境搭建 学习Servlet开发,必须搭建一个符合规范的开发环境,有许多的Web服务器或应用服务器可以运行提供我们需要的软件:如Apache Tomcat、Allaire Jrun、New Atlanta ServletExec、Gefion Software LiteWebServer等。

  5. 1、Apache Tomcat建Servlet开发环境 Tomcat是一个免费的开放源代码的Servlet容器可以到http://jakarta.apache.org下载Tomcat 5.x。 安装后还应设置CLASSPATH以使得编译程序javac能利用Servlet API,为此,应将install_dir\common\lib\Servlet-api.jar放入置在CLASSPATH中。 启动后在浏览器地址栏里输入http://localhost:8080/出现服务器测试成功页面。

  6. 2、创建开发目录 创建一个自己的开发目录 比如:install_dir\webapps\ROOT\myapp,于其中放置所有的Servlet和JSP页面

  7. 14.1.3 Servlet的工作原理与生命周期 • 每个Servlet都有一个生命周期,从它被装入到Web应用服务器的内存开始,到终止或重新装入时结束。 • 每个生命周期定义了Servlet如何被加载和被初始化,它怎样接收请求、响应请求,怎样提供服务。 • javax.Servlet.Servlet接口中定义了生命周期方法,如init()、service()、destroy()等,在Servlet的生命周期中,这些方法会在待定时间按照一定的顺序被调用。

  8. 1 、init()方法 客户端通过HTTP协议发送,当Web服务器接收请求并将其发送给Servlet,如果需要处理请求的Servlet未加载,服务器把它加载到JVM并执行它。服务器首先调用init()方法进行初始化工作。 该方法只被调用一次。

  9. 2 、service()方法 在init()方法之后,服务器调用service()方法准备处理用户的访问。 通常是Servlet接收HTTP请求并执行相应的处理,并向Web服务器返回应答,Web服务器再把从Servlet收到的应答发送给客户端。来自HTTP的访问有GET、PUT、POST、DELETE等类型,这些都可以在service()方法中处理,也可以重置doPost、doGet等方法来处理特定的请求方式。

  10. 3 、destroy()方法 服务器在结束Servlet运行时调用destroy()方法,通常在这个方法中执行诸如清除资源的操作。 例如停止后台的文件处理、线程和释放数据库连接等操作。

  11. 例14.2 测试Servlet的生命周期方法 package mjwa; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Lifecircle extends HttpServlet{ public void init (ServletConfig config) throws ServletException{ System.out.println("init(): "+new Date()); } public void destroy() { System.out.println("destroy(): "+new Date()); } public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException ,ServletException { PrintWriter out=resp.getWriter(); resp.setContentType("text/html"); out.print("<HTML>to see:<br> <h1>install_dir/logs/stdout.log</h1> </HTML>"); System.out.println("service(): "+new Date()); } }

  12. 使用命令javac -d . Lifecircle.java进行编译。将编译之后在当前目录下产生的子目录mjwa整体拷贝到myapp/WEB-INF/classes目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。 <servlet> <servlet-name> Lifecircle </servlet-name> <servlet-class>mjwa. Lifecircle </servlet-class> </servlet> <servlet-mapping> <servlet-name> Lifecircle </servlet-name> <url-pattern>/servlet/Lifecircle </url-pattern> </servlet-mapping>

  13. 重新启动Tomcat,在浏览器地址栏中输入http://localhost:8080/servlet/Lifecircle 即可运行。该程序运行时由System.out.print产生的输出在install_dir/logs/stdout.log文件中。 可以看出,浏览器每刷新一次,service方法就执行一遍,而init()方法只开始的时候执行一次,destroy( )始终得不到执行。

  14. 14.2 Servlet编程示例 〖例14.3〗获取参数:根据用户的request,得到有关的信息。 //获取参数 package mjwa; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class InfoServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{

  15. response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h3>Request InformationExample</h3>"); out.println("Method: " + request.getMethod() out.println("<br>Request URI: " + request.getRequestURI()); out.println("<br>Protocol: " + request.getProtocol()); out.println("<br>PathInfo: " +request.getPathInfo());

  16. out.println("<br>Remote Address: " + request.getRemoteAddr()+"<br>"); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getHeader(name); out.println("<br>"+name + " = " + value); } out.println("</body></html>"); } }

  17. 编译InfoServlet.java源程序文件,生成字节代码文件InfoServlet.class,将该文件拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。编译InfoServlet.java源程序文件,生成字节代码文件InfoServlet.class,将该文件拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。 <servlet> <servlet-name> InfoServlet </servlet-name> <servlet-class>mjwa. InfoServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> InfoServlet </servlet-name> <url-pattern>/servlet/ InfoServlet </url-pattern> </servlet-mapping>

  18. 重新启动Tomcat,在浏览器地址栏中输入http://localhost:8080/servlet/ InfoServlet 运行。本程序运行结果如图所示。

  19. 〖例14.4〗表单处理应用举例:利用Servlet读取表单输入内容,对客户的GET和POST请求分别用doGet方法和doPost方法进行处理。 源程序如下: //表单处理应用 package mjwa; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;

  20. public class FormServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{ resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("GET Request. No Form Data Posted"); }

  21. public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{ Enumeration e = req.getParameterNames(); PrintWriter out = resp.getWriter (); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = req.getParameter(name); out.println(name + " :<br> " + value); } } }

  22. 对应的FormServlet .html文件如下: <html><body> <FORM action=http://localhost:8080/servlet/FormServlet method="GET"> Name:<br><input type="text" name="name" ><br> Address:<br><input type="text" name="addr"><br> <input type="submit" value="OK-GET"> </FORM> <hr>

  23. <FORM action=http://localhost:8080/servlet/FormServlet method="POST"> Name:<br><input type="text" name="name" ><br> Address:<br><input type="text" name="addr"><br> <input type="submit" value="OK-POST"> </FORM> </body></html>

  24. 对源文件FormServlet.java进行编译,生成字节代码文件FormServlet.class,将该文件拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。对源文件FormServlet.java进行编译,生成字节代码文件FormServlet.class,将该文件拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。

  25. <servlet> <servlet-name> FormServlet </servlet-name> <servlet-class>mjwa. FormServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>FormServlet </servlet-name> <url-pattern>/servlet/FormServlet </url-pattern> </servlet-mapping>

  26. 文件FormServlet.html保存在文件夹install_dir\webapps\ROOT\myapp中。重新启动Tomcat。在浏览器地址栏中输入http://localhost:8080/FormServlet.html 运行。本程序运行结果如图14.4(a)~(c)所示。

  27. (a)

  28. (b)

  29. (c) 图14.4例14.4的执行结果

  30. 〖例14.5〗会话管理应用举例。 源程序如下: package mjwa;//例14.5,会话管理 import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class SessionServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response)

  31. throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(true); Date created = new Date(session.getCreationTime()); Date accessed = new Date(session.getLastAccessedTime()); out.println("<br>ID " + session.getId()); out.println("<br>Created: " + created); out.println("<br>Last Accessed: " + accessed+"<hr>");

  32. String id = request.getParameter("id"); String email = request.getParameter("email"); session.setAttribute("id", id); session.setAttribute("email", email); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println("<br>"+name + " = " + value); } } }

  33. 把编译源文件SessionServlet.java生成的字节代码文件SessionServlet.class拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。把编译源文件SessionServlet.java生成的字节代码文件SessionServlet.class拷贝到myapp/WEB-INF/classes/mjwa目录下,并在配置文件web.xml中添加如下的servlet和servlet-mapping。

  34. <servlet> <servlet-name> SessionServlet </servlet-name> <servlet-class>mjwa. SessionServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>SessionServlet </servlet-name> <url-pattern>/servlet/SessionServlet </url-pattern> </servlet-mapping> 重新启动Tomcat,在浏览器地址栏中输入http://localhost:8080/servlet/ SessionServlet 即可运行。

  35. 本章小结 • 本章介绍了Servlet的基本概念、工作原理、生命周期、Servlet程序的基本构架以及开发Servlet程序的基本步骤。 • Servlet是运行在请求/面向请求服务器上的模块,它是在服务器端的Servlet容器中执行的Java程序。一个Servlet可以从一个HTML表单中获取数据,然后用商业逻辑进行处理,最后把处理结果发往客户的浏览器。

More Related