《Java软件项目BS架构开发4Servlet与欢迎页面的实现》由会员分享,可在线阅读,更多相关《Java软件项目BS架构开发4Servlet与欢迎页面的实现(29页珍藏版)》请在金锄头文库上搜索。
1、第第4章章 Servlet与欢迎与欢迎页面的实现页面的实现 Java软件项目(B/S架构)开发 覃国蓉学习目标掌握定义Servlet的2种方法 如何将Servlet部署到Tomcat上 Servlet如何与客户端交互,即Servlet如何获得客户端传递过来的参数和如何向浏览器传递信息 如何在Servlet中引用(或加载)别的Servlet或JSP以及如何传递参数 如何在Servlet中调用别的Servlet或JSP以及如何传递参数 如何在Servlet中使用Cookie将信息保存在用户的机器中 如何利用Servlet的生命周期特点使访问页面的计数器值连续 完成欢迎页面 Java软件项目(B/S
2、架构)开发 覃国蓉欢迎页面要求Java软件项目(B/S架构)开发 覃国蓉“欢迎光临联合银行”滚动显示实现一个显示页面被访问次数的计数器HTML已经无法实现,需要使用动态网页技术,如ServletJava软件项目(B/S架构)开发 覃国蓉Servlet概述 运行在服务器端的Web容器中的Java应用程序 它响应客户端的请求,并把处理结果以HTML网页的形式返回给客户 Servlet可扩展服务器的功能,如访问数据库Java软件项目(B/S架构)开发 覃国蓉Servlet的生命周期初始化阶段处理客户端请求阶段 销毁阶段 Java软件项目(B/S架构)开发 覃国蓉使用Servlet的优点 Servle
3、t只在第1次被请求执行时才需要加载 不需要创建不同的进程来处理不同的 客户请求 由于Servlet就是Java程序,因此可以使用Java类库编写具有各种功能的Servlet平台无关 Java软件项目(B/S架构)开发 覃国蓉下载并安装Tomcat首先要从SUN 公司下载并安装JDK设置环境变量JAVA_HOME=JDK的安装目录去Tomcat的官方网站或其他提供Tomcat下载的网址下载,可能是一个安装包或压缩包安装或解压即可Java软件项目(B/S架构)开发 覃国蓉Servlet API在标准版的JDK中不包含Servlet API可以使用J2SDKEE中的j2ee.jar或Tomcat的c
4、ommonlibservlet-api.jar都包含Servlet API的包javax.servlet和javax.servlet.httpJava软件项目(B/S架构)开发 覃国蓉使用Servlet API编写Servlet 编写Servlet小应用程序要用到Servlet API,Servlet API由2个Java包javax.servlet和javax.servlet.http组成。编写 Servlet有2种方法:通过继承javax.servlet.GenericServlet类 通 过 继 承 javax.servlet.http.HttpServlet类 Java软件项目(B/S
5、架构)开发 覃国蓉继承GenericServlet定义一个新的Servlet类 重写service() 方法定义Servlet的功能案例4-1:显示“你好”。在Service方法中通过调用参数response 的方法setContentType设置返回的页面的内容类型和字符编码,处理中文显示乱码调用response 的方法getWriter获得发送数据的输出流对象,然后用该对象的println方法向浏览器发送信息Java软件项目(B/S架构)开发 覃国蓉package ch4.servlet;import javax.servlet.*;/import javax.servlet.http.*
6、;import java.io.*;public class HelloWorldServlet extends GenericServletpublic void service(ServletRequest request,ServletResponse response) throws IOException response.setContentType(text/html;charset=GB2312);PrintWriter out=response.getWriter();out.println();out.println(helloWorldServlet);out.print
7、ln();out.println(你好你好!);out.println();out.println();Java软件项目(B/S架构)开发 覃国蓉将Servlet部署到Tomcat上 对于Tomcat,需要手工部署:编译生成Servlet的字节码文件将字节码文件复制到TOMCAT_HOMEwebapps下的对应某个应用程序的目录(如test2)的子目录 WEB-INFclasses目录或其子目录 (如TOMCAT_HOMEwebapps test2WEB-INFclassesch4servlet )中修改WEB-INF下的web.xml文件,见教材86页,注意ch4.servlet.Hello
8、WorldServletJava软件项目(B/S架构)开发 覃国蓉与部分定义一个新的Servlet,其中段指定这个servlet的名字,注意段指定这个servlet对应的类,由于这个类属于包ch4.servlet,所以要给出包名与部分定义servlet在URL中出现的名字Java软件项目(B/S架构)开发 覃国蓉调用Servlet的2种方式在浏览器的地址栏中输入Servlet的URLhttp:/localhost:8080/test2/HelloWorldServlet在表单(Form)的属性Action中指定Servlet的URL.Java软件项目(B/S架构)开发 覃国蓉问题用户在页面上输
9、入姓名,如王红,服务器端的Servlet会针对这个姓名返回一个欢迎信息,如“欢迎你,王红!”用户的输入是不确定的,不能用静态页面完成。需要服务器端的程序,如某Servlet。程序设计需要划分功能:哪部分用静态网页,哪部分用Servlet,它们之间如何通信(即建立关联或联系?如何指定服务器端的程序?服务器端程序,如某Servlet ,如何获得用户的输入?如何向客户端浏览器返回信息?Java软件项目(B/S架构)开发 覃国蓉通过继承HttpServlet定义一个新的Servlet类 重写doGet()或者doPost()方法定义Servlet的功能 案例4-2 :用户在页面上输入姓名,服务器端的S
10、ervlet会针对这个姓名返回一个欢迎信息。请求采用GET方式发送到服务器端重写doGet()方法定义Servlet的功能 通过doGet() 的参数request可以获得来自浏览器的相关请求信息 ,如用户在表单中的输入,设置页面请求的字符编码以保证正确解码通过参数response设置送回到浏览器的相关信息,如设置返回页面类型和字符编码并获得发送数据的输出流对象Java软件项目(B/S架构)开发 覃国蓉案例4-3 :功能同4-2,只是请求采用POST方式发送到服务器端,Servlet重写doPost()方法定义Servlet的功能 Java软件项目(B/S架构)开发 覃国蓉练习实现一个名为em
11、ailServlet的Servlet,可以接受用户输入的email地址并显示:你输入的邮箱地址是:XXXXXXXXXX用HTML实现一个email地址录入界面,当用户提交后将调用emailServlet显示用户输入的信息。Java软件项目(B/S架构)开发 覃国蓉显示用户前一次用同一台机器登录服务器的时间 使用cookie技术,将登录服务器的时间 保存到用户的硬盘上,用户下一次调用时就从用户的硬盘上读出来并显示Java软件项目(B/S架构)开发 覃国蓉在Servlet中使用cookieServlet API 中的Cookie 类提供了很多方法处理cookieHttpServletRequest
12、的getCookies()方法可以获得存储在客户计算机上的cookie HttpServletResponse的addCookie方法,可以将cookie的数据和HTTP响应一起发送给客户 HttpServlet 的service、doGet和doPost方法的2个参数的类型分别是HttpServletRequest和HttpServletResponseJava软件项目(B/S架构)开发 覃国蓉读出已经存在的cookie Cookie cookies = request.getCookies();for (int i = 0; i cookies.length; i+) Cookie c =
13、 cookiesi; String name = c.getName(); String value = c.getValue(); out.println(name + = + value); Java软件项目(B/S架构)开发 覃国蓉生成并设置一个cookie Cookie c = new Cookie(name, value);c.setMaxAge(LastSecond); response.addCookie(c); Java软件项目(B/S架构)开发 覃国蓉案例4-4定义一个Servlet显示用户前一次用同一台机器登录服务器的时间 Java软件项目(B/S架构)开发 覃国蓉显示生命
14、周期的Servlet 在Servlet的生命周期中,有几个重要的方法:init()方法只在第1次请求时调用每次请求都会调用service()方法, service()方法根据请求是GET还是POST调用doGet()或doPost()方法destroy()方法只在servlet被销毁时才调用 案例4-5 :重写init()方法,将计数器的值清0重写doGet()方法,将计数器的值加1 通过计数器的值的变化来说明Servlet的方法的调用情况Java软件项目(B/S架构)开发 覃国蓉案例4-6 :计数连续的Servlet重写init()方法,从文件中读出计数值重写doGet()方法,将计数器的值
15、加1重写destroy()方法,将计数值保存到文件中 可以将计数值保存到数据库中Java软件项目(B/S架构)开发 覃国蓉从Servlet中引用其他文件 用被引用文件的URL作为参数调用request的getRequestDispatcher()方法来获得request调度程序对象 调度程序对象 的include()方法将资源引入 并且传递参数案例4-7:让用户在输入界面上选中一个客户端技术,然后提交给服务器端的Servlet处理,Servlet会引用一个JSP文件显示部分信息 RequestDispatcher dispatcher=request.getRequestDispatcher(
16、include.jsp); dispatcher.include(request,response);Java软件项目(B/S架构)开发 覃国蓉从Servlet跳转到其他页面 与引用文件类似:以跳转页面的URL为参数获得获得request调度程序对象 用调度程序对象的forward()方法 跳转到其他页面案例4-8: RequestDispatcher dispatcher=request.getRequestDispatcher(include.jsp); dispatcher.forward(request,response); Java软件项目(B/S架构)开发 覃国蓉欢迎页面的分析设计 参照案例4-6实现 在该Servlet 中定义一个整数数据成员counter来存储计数器值 静态页面部分,即welcome.html的内容,可以在service或doGet或doPost()方法中直接用out.println()的语句输出重写init()方法和destroy()方法,使计数器的值连续Java软件项目(B/S架构)开发 覃国蓉