首页 深入体验Java+Web开发内Servlet 开发基础幕

深入体验Java+Web开发内Servlet 开发基础幕

举报
开通vip

深入体验Java+Web开发内Servlet 开发基础幕 深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org 声明: 如果引用或借鉴本书稿中的图例、解说和讲解技巧,请标明出处,以示对我的辛勤劳动 的尊重!这些东西虽然谈不上创造发明,但确实也是花费了我很多时间和精力去总结、归纳 出来的。如果有人等我总结、消化后再“巧妙借鉴”,精华和核心全部拿走,然后在随便从 书上找到别的知识作补充,以示区别的行为将会极大挫伤我的积极性,希望网友们从道义上 对这种行为进行谴责!因涉及商业机密和出版合同,本书中的一些最富有技巧的知识和讲解 ...

深入体验Java+Web开发内Servlet 开发基础幕
深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org 声明: 如果引用或借鉴本书稿中的图例、解说和讲解技巧,请标明出处,以示对我的辛勤劳动 的尊重!这些东西虽然谈不上创造发明,但确实也是花费了我很多时间和精力去总结、归纳 出来的。如果有人等我总结、消化后再“巧妙借鉴”,精华和核心全部拿走,然后在随便从 书上找到别的知识作补充,以示区别的行为将会极大挫伤我的积极性,希望网友们从道义上 对这种行为进行谴责!因涉及商业机密和出版 合同 劳动合同范本免费下载装修合同范本免费下载租赁合同免费下载房屋买卖合同下载劳务合同范本下载 ,本书中的一些最富有技巧的知识和讲解 手法没有提供出来,敬请谅解! ————张孝祥 第 4章 Servlet开发基础 4.1.3 Servlet技术简介 Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的 WEB服务器端编程技术,主要用于在WEB服务器端获得客户端的访问请求信息和动态生成对客 户端的响应消息。Servlet技术也是JSP技术(另外一种动态网页开发技术)的基础。一个 Servlet程序就是一个实现了特殊接口的 Java类,用于被支持Servlet的WEB服务器调用和 运行,即只能运行于具有Servlet引擎的WEB服务器端。一个Servlet程序负责处理它所对应 的一个或一组URL地址的访问请求,接收访问请求信息和产生响应内容。 Applet是用于浏览器端的Java小程序,在浏览器端被解释执行,用于在HTML网页中实现 一些桌面应用程序的功能,被称为“小应用程序”。Servlet是用于WEB服务器端的Java小程 序,它在WEB服务器端被解释执行,用于处理客户端的请求和产生动态网页内容。源于Applet 的命名,这种WEB服务器端的Java小程序就被命名为了Servlet,与Applet相对应,Servlet 可以被称之为“小服务程序”。 Servlet与普通java程序相比,只是输入信息的来源和输出结果的目标不一样,所以, 普通Java程序所能完成的大多数任务,Servlet程序都可以完成。Servlet程序具有如下的 一些基本功能: l 获取客户端通过 HTML的 FORM表单递交的数据和 URL后面的参数信息; l 创建对客户端的响应消息内容; l 访问服务器端的文件系统; l 连接数据库并开发基于数据库的应用; l 调用其它的 Java类。 4.2.2 编写与编译 Servlet程序 一个Servlet程序就是一个在WEB服务器端运行的特殊Java类,这个特殊的 Java类必 须实现javax.servlet.Servlet接口,Servlet接口定义了Servlet容器与 Servlet程序之 间通信的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 约定。为了简化 Servlet程序的编写,Servlet API中也提供了一个实现了 rr 线条 rr 线条 深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org Servlet接口的最简单的Servlet类,其完整名称为javax.servlet.GenericServlet,这个 类实现了Servlet程序的基本特征和功能。Servlet API中还提供了一个专用于HTTP协议 的Servlet类,其名称是javax.servlet.http.HttpServlet,它是GenericServlet的子类, 在GenericServlet类的基础上进行了一些针对HTTP特点的扩充。显然,一个Java类只要 继承了GenericServlet或HttpServlet,它就是一个Servlet。反过来说,要编写一个Servet 类,这个类必须继承GenericServlet类或HttpServlet类。为了充分利用 HTTP协议的功能, 在一般情况下,都应让自己编写的 Servlet类继承 HttpServlet类,而不是继承 GenericServlet类。 查看HttpServlet类的帮助文档,可以看到其中有一个名为service的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,当客户端 每次访问一个Servlet程序时,Servlet引擎都将调用这个方法来进行处理。service方法 接受两个参数,一个是用于封装HTTP请求消息的对象,其类型为HttpServletRequest,另 一个是代表 HTTP响 应 消 息 的 对 象 , 其 类 型 为 HttpServletResponse。调用 HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个流对象 中写入的数据将作为HTTP响应消息的实体内容部分发送给客户端。 :动手体验:编写与编译Servlet程序的过程 (1)编写一个继承了 HttpServlet类的 HelloServlet类,它对 HttpServlet类中的 service方法进行了覆盖,如例程4-2所示。 例程4-2 HelloServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { //从HttpServlet类的帮助文档中复制service方法的声明部分可避免书写错误 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter out = response.getWriter(); out.println(""); out.println("www.it315.org
"); out.println("" + new java.util.Date() + ""); out.println(""); } } (2)使用 javac命令编译这个源文件,通常情况下,第一次学习编写 Servlet程序的 人都会遇到类似如下错误: HelloWorld.java:2: package javax.servlet does not exist import javax.servlet.*; ^ 深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org HelloWorld.java:3: package javax.servlet.http does not exist import javax.servlet.http.*; ^ ...... 这些错误信息提示javac编译器找不到javax.servlet和javax.servlet.http这两个 包以及其中的一些Servlet API类,这是因为包含Servlet API类的jar文件还没有被加入 到javac所使用的CLASSPATH环境变量中。 (3)在执行javac的命令行窗口中,将包含有Servlet API的jar文件加入到CLASSPATH 环境变量的路径列表中,例如,对于Tomcat 4.x,应使用如下的命令设置: set CLASSPATH=\common\lib\servlet.jar;%CLASSPATH% 设置完CLASSPATH环境变量后,重新编译HelloServlet.java文件,如果源程序中没有 书写错误的话,这时候就可以编译成功了。 在笔者编写的《java就业培训 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 》中曾经讲过,在命令行窗口中设置的 CLASSPATH 环境变量是临时的,只对这个命令行窗口起作用,对其它窗口和应用程序不起作用,因此在 每次新启动的命令行窗口中都要重新设置。如果想让设置一直保持有效,应该使用对整个系 统都有效的环境变量的设置方法,例如,在win2000的系统特性的“环境变量”对话框中进 行设置,在win98的开机自动批处理文件Autoexec.bat中设置,在Linux的Profile文件 中设置。 (4)在编译和运行 java程序时,Java类装载器也会去\jre\lib\ext目录 下的 jar 包中搜索要加载的类。如果将包含 Serlet API 的 jar 文件复制到该目录下,在编译 Servlet程序时,就不必在 CLASSPATH环境变量中增加包含 Serlet API的 jar 文件。 第 5章 HttpServletResponse的应用 5.5.2 让浏览器定时刷新网页或跳转至其他页面 HTTP协议中定义了一个 Refresh头字段,用于告诉浏览器过多少秒后自动刷新页面。 在Refresh头字段的时间设置值后面还可以用分号(;)分隔后,再指定一个 URL地址,这 将让浏览器在指定的时间值后自动去访问该 URL地址指向的资源。 :动手体验:Refresh头字段的作用效果 (1)按例程5-2编写一个设置 Refresh头字段的 Servlet。 例程5-2 RefreshServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RefreshServlet extends HttpServlet { 深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //分别注释下面两条语句中的一条,查看各自的运行效果 response.setHeader("Refresh","2"); //response.setHeader("Refresh","2;URL=http://www.it315.org"); response.getWriter().println(new java.util.Date()); } } 使用 compile.bat编译 RefreshServlet.java源文件,确保编译后生成的 class文件存放在 了\webapps \it315\WEB-INF\classes 目录中。 (2)修改\webapps\it315\WEB-INF\web.xml文件,在其中的相应 位置处增加如下两段内容: RefreshServlet RefreshServlet … … … … RefreshServlet /servlet/RefreshServlet 保存 web.xml文件后,重新启动 Tomcat。 (3)在浏览器地址栏中输入如下地址: http://localhost:8080/it315/servlet/RefreshServlet 可以看到浏览器两秒钟后自动刷新网页文档的效果。 (4)将RefreshServlet.java源文件中的第一条调用setHeader方法的语句注释掉, 并取消第二条调用setHeader方法的语句的注释。重新编译 RefreshServlet.java源文件并 等待Tomcat重新装载RefreshServlet后,重复步骤(3)的操作,可以看到的浏览器两秒 后自动去访问 http://www.it315.org 的运行效果。 5.6.5 图像访问计数器 统计和显示页面的访问次数是一个常见的 WEB应用,因为在网页每次被访问时,页面 的访问次数都要发生改变,所以这个功能必须通过服务器端的程序来实现。页面访问计数器 在服务器端的基本执行过程为:首先从数据库或其他存储系统中取出页面原来的访问次数, 然后将原来的访问次数加 1后再作为当前访问次数送给浏览器显示,同时将当前访问次数存 储回数据库或其他存储系统中,以便下次访问该页面时使用。但是,一些 WEB站点只能输 出静态页面内容,没有开放运行服务器端程序的功能。例如,一些提供免费网页空间的站点, 在客户端访问任何类型的文件时,服务器都会原封不动地输出给浏览器去处理,显然无法直 深入体验JavaWeb开发内幕 张孝祥著 http://www.it315.org 接在这些只支持静态内容的WEB站点上编写服务器端程序来实现页面访问次数的统计和显 示功能。于是,一些具有执行服务器端程序功能的 WEB站点推出了免费的页面访问计数器, 只要在位于任何站点的一个静态 HTML页面中增加一条该站点提供的 HTML语句,该语句 就能显示出该静态页面的访问次数,从而帮助静态 HTML页面实现了访问次数的统计和显 示功能。一个站点要想能统计另外一个站点上的某个 HTML页面的访问次数,必须让任何 一个浏览器在每次访问那个 HTML页面都通知这个一下站点,这可以通过在静态 HTML页 面中增加两种特殊的标签来实现:标签和设置 src 属性的