资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java软件项目(B/S架构)开发 覃国蓉,第4章 Servlet与欢迎页面的实现,Java软件项目(B/S架构)开发 覃国蓉,学习目标,掌握 定义Servlet的2种方法 如何将Servlet部署到Tomcat上 Servlet如何与客户端交互,即Servlet如何获得客户端传递过来的参数和如何向浏览器传递信息 如何在Servlet中引用(或加载)别的Servlet或JSP以及如何传递参数 如何在Servlet中调用别的Servlet或JSP以及如何传递参数 如何在Servlet中使用Cookie将信息保存在用户的机器中 如何利用Servlet的生命周期特点使访问页面的计数器值连续 完成 欢迎页面,Java软件项目(B/S架构)开发 覃国蓉,欢迎页面要求,Java软件项目(B/S架构)开发 覃国蓉,“欢迎光临联合银行”滚动显示 实现一个显示页面被访问次数的计数器 HTML已经无法实现,需要使用动态网页技术,如Servlet,Java软件项目(B/S架构)开发 覃国蓉,Servlet概述,运行在服务器端的Web容器中的Java应用程序 它响应客户端的请求,并把处理结果以HTML网页的形式返回给客户 Servlet可扩展服务器的功能,如访问数据库,Java软件项目(B/S架构)开发 覃国蓉,Servlet的生命周期,初始化阶段 处理客户端请求阶段 销毁阶段,Java软件项目(B/S架构)开发 覃国蓉,使用Servlet的优点,Servlet只在第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的commonlibservlet-api.jar都包含Servlet API的包javax.servlet和javax.servlet.http,Java软件项目(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架构)开发 覃国蓉,继承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.*; import java.io.*; public class HelloWorldServlet extends GenericServlet public void service(ServletRequest request,ServletResponse response) throws IOException response.setContentType(“text/html;charset=GB2312“); PrintWriter out=response.getWriter(); out.println(“); out.println(“helloWorldServlet“); out.println(“); out.println(“你好!“); out.println(“); out.println(“); ,Java软件项目(B/S架构)开发 覃国蓉,将Servlet部署到Tomcat上,对于Tomcat,需要手工部署: 编译生成Servlet的字节码文件 将字节码文件复制到TOMCAT_HOMEwebapps下的对应某个应用程序的目录(如test2)的子目录 WEB-INFclasses目录或其子目录 (如TOMCAT_HOMEwebapps test2WEB-INF classesch4servlet )中 修改WEB-INF下的web.xml文件,见教材86页,注意 ch4.servlet.HelloWorldServlet ,Java软件项目(B/S架构)开发 覃国蓉,与部分定义一个新的Servlet,其中段指定这个servlet的名字,注意段指定这个servlet对应的类,由于这个类属于包ch4.servlet,所以要给出包名 与部分定义servlet在URL中出现的名字,Java软件项目(B/S架构)开发 覃国蓉,调用Servlet的2种方式,在浏览器的地址栏中输入Servlet的URL http:/localhost:8080/test2/HelloWorldServlet 在表单(Form)的属性Action中指定Servlet的URL .,Java软件项目(B/S架构)开发 覃国蓉,问题,用户在页面上输入姓名,如王红,服务器端的Servlet会针对这个姓名返回一个欢迎信息,如“欢迎你,王红!” 用户的输入是不确定的,不能用静态页面完成。需要服务器端的程序,如某Servlet。程序设计需要划分功能:哪部分用静态网页,哪部分用Servlet,它们之间如何通信(即建立关联或联系? 如何指定服务器端的程序? 服务器端程序,如某Servlet ,如何获得用户的输入?如何向客户端浏览器返回信息?,Java软件项目(B/S架构)开发 覃国蓉,通过继承HttpServlet定义一个新的Servlet类,重写doGet()或者doPost()方法定义Servlet的功能 案例4-2 :用户在页面上输入姓名,服务器端的Servlet会针对这个姓名返回一个欢迎信息。 请求采用GET方式发送到服务器端 重写doGet()方法定义Servlet的功能 通过doGet() 的参数request可以获得来自浏览器的相关请求信息 ,如用户在表单中的输入,设置页面请求的字符编码以保证正确解码 通过参数response设置送回到浏览器的相关信息,如设置返回页面类型和字符编码并获得发送数据的输出流对象,Java软件项目(B/S架构)开发 覃国蓉,案例4-3 :功能同4-2,只是请求采用POST方式发送到服务器端,Servlet重写doPost()方法定义Servlet的功能,Java软件项目(B/S架构)开发 覃国蓉,练习,实现一个名为emailServlet的Servlet,可以接受用户输入的email地址并显示: 你输入的邮箱地址是: XXXXXXXXXX 用HTML实现一个email地址录入界面,当用户提交后将调用emailServlet显示用户输入的信息。,Java软件项目(B/S架构)开发 覃国蓉,显示用户前一次用同一台机器登录服务器的时间 使用cookie技术,将登录服务器的时间 保存到用户的硬盘上,用户下一次调用时就从用户的硬盘上读出来并显示,Java软件项目(B/S架构)开发 覃国蓉,在Servlet中使用cookie,Servlet API 中的 Cookie 类提供了很多方法处理cookie HttpServletRequest的getCookies()方法可以获得存储在客户计算机上的cookie HttpServletResponse的addCookie方法,可以将cookie的数据和HTTP响应一起发送给客户 HttpServlet 的service、doGet和doPost方法的2个参数的类型分别是HttpServletRequest和HttpServletResponse,Java软件项目(B/S架构)开发 覃国蓉,读出已经存在的cookie,Cookie cookies = request.getCookies(); for (int i = 0; i cookies.length; i+) Cookie c = 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架构)开发 覃国蓉,显示生命周期的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()方法,将计数器的值加1 重写destroy()方法,将计数值保存到文件中 可以将计数值保存到数据库中,Java软件项目(B/S架构)开发 覃国蓉,从Servlet中引用其他文件,用被引用文件的URL作为参数调用request的getRequestDispatcher()方法来获得request调度程序对象 调度程序对象 的include()方法将资源引入 并且传递参数 案例4-7:让用户在输入界面上选中一个客户端技术,然后提交给服务器端的Servlet处理,Servlet会引用一个JSP文件显示部分信息 RequestDispatcher dispatcher=request.getRequestDispatcher(“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)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号