服务器将响应传输给客户端 Servlet 技术具有如下特点 : 方便 :Servlet 提供了大量的实用工具例程, 如处理很难完成的 HTML 表单数据 读取和设置 HTTP 头, 以及处理 Cookie 和跟踪会话等 跨平台 :Servlet 用 Java 类编写, 可以在不同操作系统平台和不同应

Size: px
Start display at page:

Download "服务器将响应传输给客户端 Servlet 技术具有如下特点 : 方便 :Servlet 提供了大量的实用工具例程, 如处理很难完成的 HTML 表单数据 读取和设置 HTTP 头, 以及处理 Cookie 和跟踪会话等 跨平台 :Servlet 用 Java 类编写, 可以在不同操作系统平台和不同应"

Transcription

1 第 3 章 Servlet 基础 学习目标 掌握 Servlet 接口及其实现类的使用 了解 Servlet 的生命周期 熟练使用 Eclipse 工具开发 Servlet 掌握 Servlet 虚拟路径映射的配置 随着 Web 应用业务需求的增多, 动态 Web 资源的开发变得越来越重要 目前, 很多公司都提供了开发动态 Web 资源的相关技术, 其中比较常见的有 ASP PHP JSP 和 Servlet 等 基于 Java 的动态 Web 资源开发,SUN 公司提供了 Servlet 和 JSP 两种技术 接下来, 本章将针对 Servlet 技术的相关知识进行详细的讲解 3.1 Servlet 概述 Servlet 是使用 Java 语言编写的运行在服务器端的程序 狭义的 Servlet 是指 Java 语言实现的一个接口, 广义的 Servlet 是指任何实现了这个 Servlet 接口的类, 一般情况下, 人们将 Servlet 理解为后者 Servlet 主要用于处理客户端传来的 HTTP 请求, 并返回一个响应, 它能够处理的请求有 doget() 和 dopost() 等方法 Servlet 由 Servlet 容器提供, 所谓的 Servlet 容器是指提供了 Servlet 功能的服务器 ( 本书中指 Tomcat),Servlet 容器将 Servlet 动态的加载到服务器上 与 HTTP 协议相关的 Servlet 使用 HTTP 请求和 HTTP 响应与客户端进行交互 因此,Servlet 容器支持所有 HTTP 协议的请求和响应 Servlet 应用程序的体系结构如图 3-1 所示 HTTP 请求客户端 HTTP 服务器 Servlet 容器 Servlet HTTP 响应图 3-1 Servlet 应用程序的体系结构在图 3-1 中,Servlet 的请求首先会被 HTTP 服务器接收,HTTP 服务器只负责静态 HTML 页面的解析, 对于 Servlet 的请求转交给 Servlet 容器,Servlet 容器会根据 web.xml 文件中的映射关系, 调用相应的 Servlet,Servlet 将处理的结果返回给 Servlet 容器, 并通过 HTTP 1

2 服务器将响应传输给客户端 Servlet 技术具有如下特点 : 方便 :Servlet 提供了大量的实用工具例程, 如处理很难完成的 HTML 表单数据 读取和设置 HTTP 头, 以及处理 Cookie 和跟踪会话等 跨平台 :Servlet 用 Java 类编写, 可以在不同操作系统平台和不同应用服务器平台下运行 灵活性和可扩展性 : 采用 Servlet 开发的 Web 应用程序, 由于 Java 类的继承性及构造函数等特点, 使得应用灵活, 可随意扩展 除了上述几点外,Servlet 还具有功能强大 能够在各个程序之间共享数据 安全性强等特点, 此处就不再详细说明, 读者作为了解即可 3.2 Servlet 开发入门 Servlet 接口及其实现类 针对 Servlet 技术的开发,SUN 公司提供了一系列接口和类, 其中最重要的接口是 javax.servlet.servlet 在 Servlet 接口中定义了 5 个抽象方法, 具体如表 3-1 所示 表 3-1 Servlet 接口的抽象方法方法声明功能描述容器在创建好 Servlet 对象后, 就会调用此方法 void init(servletconfig config) 该方法接收一个 ServletConfig 类型的参数,Servlet 容器通过这个参数向 Servlet 传递初始化配置信息用于获取 Servlet 对象的配置信息, 返回 Servlet 的 ServletConfig getservletconfig() ServletConfig 对象返回一个字符串, 其中包含关于 Servlet 的信息, String getservletinfo() 例如, 作者 版本和版权等信息负责响应用户的请求, 当容器接收到客户端访问 Servlet 对象的请求时, 就会调用此方法 容器会构造一个表示客户端请求信息的 ServletRequest 对象 void service(servletrequest 和一个用于响应客户端的 ServletResponse 对象作 request,servletresponse 为参数传递给 service() 方法 在 service() 方法中, response) 可以通过 ServletRequest 对象得到客户端的相关信息和请求信息, 在对请求进行处理后, 调用 ServletResponse 对象的方法设置响应信息负责释放 Servlet 对象占用的资源 当服务器关闭 void destroy() 或者 Servlet 对象被移除时,Servlet 对象会被销毁, 容器会调用此方法 2

3 在表 3-1 中, 列举了 Servlet 接口中的 5 个方法, 其中 init() service() 和 destroy() 这三个方法可以表现 Servlet 的生命周期, 它们会在某个特定的时刻被调用 另外,getServletInfo() 方法用于返回 Servlet 的相关信息 getservletconfig() 方法用于返回 ServletConfig 对象, 该对象包含 Servlet 的初始化信息 需要注意的是, 表中提及的 Servlet 容器指的是 Web 服务器 针对 Servlet 的接口,SUN 公司提供了两个默认的接口实现类 :GenericServlet 和 HttpServlet GenericServlet 是一个抽象类, 该类为 Servlet 接口提供了部分实现, 它并没有实现 HTTP 请求处理 HttpServlet 是 GenericServlet 的子类, 它继承了 GenericServlet 的所有方法, 并且为 HTTP 请求中的 POST GET 等类型提供了具体的操作方法 通常情况下, 编写的 Servlet 类都继承自 HttpServlet, 在开发中使用的具体的 Servlet 对象就是 HttpServlet 对象 HttpServlet 的常用方法及其说明如表 3-2 所示 表 3-2 HttpServlet 类的常用方法方法声明功能描述 protected void doget(httpservletrequest req, 用于处理 GET 类型的 Http 请求的方法 HttpServletResponse resp) protected void dopost(httpservletrequest 用于处理 POST 类型的 Http 请求的方法 req, HttpServletResponse resp) protected void doput(httpservletrequest req, 用于处理 PUT 类型的 Http 请求的方法 HttpServletResponse resp) 实现第一个 Servlet 程序 为了帮助读者快速学习 Servlet 开发, 接下来, 分步骤的实现一个 Servlet 程序, 来演示其使用, 具体如下 : (1) 创建 Servlet 文件在目录 D:\cn\itcast\firstapp\servlet 下编写一个 Servlet 由于直接实现 Servlet 接口来编写 Servlet 很不方便, 需要实现很多方法 因此, 可以通过继承 Servlet 接口的实现类 javax.servlet.genericservlet 来实现 具体代码如文件 3-1 所示 文件 3-1 HelloWorldServlet.java 1 package cn.itcast.firstapp.servlet; 2 import java.io.*; 3 import javax.servlet.*; 4 public class HelloWorldServlet extends GenericServlet { 5 public void service(servletrequest request, ServletResponse response) 6 throws ServletException, IOException { 7 // 得到输出流 PrinterWriter 对象,Servlet 使用输出流来产生响应 8 PrintWriter out = response.getwriter(); 9 // 使用输出流对象向客户端发送字符数据 3

4 10 out.println("hello World"); 11 } 12 } 从文件 3-1 中可以看出,HelloWorldServlet 类继承 GenericServlet 后, 只实现了 service() 方法 这是因为 GenericServlet 类除了 Servlet 接口的 service() 方法外, 其它方法都已经实现 由此可见, 继承 GenericServlet 类比实现 Servlet 接口更加简便 (2) 编译 Servlet 文件打开电脑上的命令行窗口, 进入 HelloWorldServlet.java 文件所在目录, 编译 HelloWorldServlet.java 文件, 程序报错, 如图 3-2 所示 图 3-2 编译 HelloWorldServlet.java 的出错信息从图 3-2 中可以看出, 编译错误提示 程序包 javax.servlet.* 不存在 这是因为 Java 编译器在 CLASSPATH 环境变量中没有找到 javax.servlet.* 包 因此, 如果想编译 Servlet, 需要将 Servlet 相关 JAR 包所在的目录添加到 ClASSPATH 环境变量中 (3) 查找 Servlet 的 JAR 包由于 Servlet 程序是一个 JavaEE 程序而不是 JavaSE 程序, 因此所有的 JAR 文件都需要自己手动的加到 CLASSPATH 环境变量中 进入 Tomcat 安装目录下的 lib 目录, 里面包含了许多与 Tomcat 服务器相关的 JAR 文件, 其中 servlet-api.jar 文件就是与 Servlet 相关的 JAR 文件, 如图 3-3 所示 4

5 图 3-3 Servlet-api.jar (4) 引入 Servlet 的 JAR 包打开命令行窗口, 通过 set classpath 命令将图 3-3 所示的 servlet-api.jar 文件所在的目录添加到 CLASSPATH 环境变量中, 如图 3-4 所示 图 3-4 设置 CLASSPATH 环境变量 (5) 重新编译 Servlet 在命令提示窗口中重新编译 HelloWorldServlet.java 文件, 如果程序编译通过, 则会生成一个 HelloWorldServlet.class 文件, 如图 3-5 所示 图 3-5 HelloWorldServlet.class 文件 (6) 将编译后的.class 文件添加到服务器在 Tomcat 的 webapps 下创建目录 chapter03,chapter03 为 Web 应用的名称, 然后在 5

6 chapter03 目录下创建 \WEB-INF\classes 目录, 将图 3-5 所示的 HelloWorldServlet.class 文件 拷贝到 classes 目录下, 需要注意的是, 在拷贝时要将该文件所在的包目录 (cn/itcast/firstapp/servlet) 一起拷贝过去, 如图 3-6 所示 图 3-6 classes 目录下的 HelloWorldServlet.class 文件 (7) 创建 web.xml 文件进入目录 WEB-INF, 编写一个 web.xml 文件, 关于 web.xml 文件的编写方式可以参考 Tomcat 安装目录下的 web.xml 文件, 该文件位于 examples/web-inf 子目录下 下面是 chapter03/web-inf 目录下 web.xml 中的配置代码 : <?xml version="1.0" encoding="iso "?> <web-app xmlns=" xmlns:xsi=" xsi:schemalocation=" version="3.0"> <servlet> <servlet-name>helloworldservlet</servlet-name> <servlet-class> cn.itcast.firstapp.servlet.helloworldservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>helloworldservlet</servlet-name> <url-pattern>/helloworldservlet</url-pattern> </servlet-mapping> </web-app> 在上面的配置信息中, 元素 <servlet> 用于注册 Servlet, 它的两个子元素 <servlet-name> 和 <servlet-class> 分别用来指定 Servlet 名称及其完整类名 元素 <servlet-mapping> 用于映射 Servlet 对外访问的虚拟路径, 它的子元素 <servlet-name> 的值必须和 <servlet> 元素中 <servlet-name> 相同, 子元素 <url-pattern> 则是用于指定访问该 Servlet 的虚拟路径, 该路径以正斜线 (/) 开头, 代表当前 Web 应用程序的根目录 (8) 运行服务器, 查看结果启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 HelloWorldServlet, 浏览器显示的结果如图 3-7 所示 6

7 图 3-7 运行结果从图 3-7 中可以看出, 客户端可以正常访问 Tomcat 服务器的 Servlet 程序 至此, 第一个 Servlet 程序已经实现 Servlet 的生命周期 在 Java 中, 任何对象都有生命周期,Servlet 也不例外, 接下来, 通过一张图来描述 Servlet 的生命周期, 如图 3-8 所示 客户端 Servlet 容器 Servlet 1 发送请求 2 解析请求 3 创建 Servlet 实例对象 4 调用 init() 方法 5 调用 service() 方法 7 返回响应 6 输出响应消息 8 调用 destory() 方法 图 3-8 Servlet 的生命周期图图 3-8 描述了 Servlet 的生命周期 按照功能的不同, 大致可以将 Servlet 的生命周期分为三个阶段, 分别是初始化阶段 运行阶段和销毁阶段 接下来, 针对 Servlet 生命周期的这三个阶段进行详细的讲解, 具体如下 : 1. 初始化阶段当客户端向 Servlet 容器发出 HTTP 请求要求访问 Servlet 时,Servlet 容器首先会解析请求, 检查内存中是否已经有了该 Servlet 对象, 如果有直接使用该 Servlet 对象, 如果没有就创建 Servlet 实例对象, 然后通过调用 init() 方法实现 Servlet 的初始化工作 需要注意的是, 在 Servlet 的整个生命周期内, 它的 init() 方法只被调用一次 2. 运行阶段这是 Servlet 生命周期中最重要的阶段, 在这个阶段,Servlet 容器会为这个请求创建 7

8 代表 HTTP 请求的 ServletRequest 对象和代表 HTTP 响应的 ServletResponse 对象, 然后将它们作为参数传递给 Servlet 的 service() 方法 service() 方法从 ServletRequest 对象中获得客户请求信息并处理该请求, 通过 ServletResponse 对象生成响应结果 在 Servlet 的整个生命周期内, 对于 Servlet 的每一次访问请求,Servlet 容器都会调用一次 Servlet 的 service() 方法, 并且创建新的 ServletRequest 和 ServletResponse 对象, 也就是说,service() 方法在 Servlet 的整个生命周期中会被调用多次 3. 销毁阶段当服务器关闭或 web 应用被移除出容器时,Servlet 随着 web 应用的销毁而销毁 在销毁 Servlet 之前,Servlet 容器会调用 Servlet 的 destroy() 方法, 以便让 Servlet 对象释放它所占用的资源 在 Servlet 的整个生命周期中,destroy() 方法也只被调用一次 需要注意的是,Servlet 对象一旦创建就会驻留在内存中等待客户端的访问, 直到服务器关闭, 或 web 应用被移除出容器时 Servlet 对象才会销毁 了解了 Servlet 生命周期的三个阶段后, 接下来通过一个具体的案例来演示 Servlet 生命周期方法的执行效果 对文件 3-1 HelloWorldServlet.java 进行修改, 在文件中重写 init() 方法和 destroy() 方法, 修改后的代码如文件 3-2 所示 文件 3-2 HelloWorldServlet.java 1 package cn.itcast.firstapp.servlet; 2 import javax.servlet.*; 3 public class HelloWorldServlet extends GenericServlet { 4 public void init(servletconfig config) throws ServletException { 5 System.out.println("init methed is called"); 6 } 7 public void service(servletrequest request, ServletResponse response) 8 throws ServletException { 9 System.out.println("Hello World"); 10 } 11 public void destroy() { 12 System.out.println("destroy method is called"); 13 } 14 } 重新编译 HelloWorldServlet.java 文件, 将编译后生成的 class 文件拷贝到 Tomcat 服务器中 webapps\chapter03\web-inf\classes 目录下 启动 Tomcat 服务器, 在浏览器的地址栏输入地址 访问 HelloWorldServlet,Tomcat 控制台的打印结果如图 3-9 所示 8

9 图 3-9 运行结果从图 3-9 可以看出,Tomcat 的控制台输出了 init methed is called 和 Hello World 语句 说明用户第一次访问 HelloWorldServlet 时,Tomcat 就创建了 HelloWorldServlet 对象, 并在调用 service() 方法处理用户请求之前, 通过 init() 方法实现了 Servlet 的初始化 刷新浏览器, 多次访问 HelloWorldServlet 后,Tomcat 控制台的打印结果如图 3-10 所示 图 3-10 运行结果从图 3-10 中可以看出,Tomcat 控制台只输出了 Hello World 语句 由此可见,init() 方法只在第一次访问时执行,service() 方法则在每次访问时都被执行 如果想将 HelloWorldServlet 移除, 可以通过 Tomcat 的管理平台终止 Web 应用 chapter03, 此时,Servlet 容器会调用 HelloWorldServlet 的 destroy() 方法, 在 Tomcat 控制台打印出 destroy method is called 语句, 如图 3-11 所示 9

10 图 3-11 运行结果 多学一招 : 自动加载 Servlet 程序在实际开发时, 有时候会希望某些 Servlet 程序可以在 Tomcat 启动时随即启动 例如, 当启动一个 Web 项目时, 首先需要对数据库信息进行初始化 这时, 只需要使用 web.xml 文件中 <load-on-startup> 元素, 将初始化数据库的 Servlet 配置为随着 web 应用启动而启动的 Servlet 即可 <load-on-startup> 元素是 <servlet> 元素的一个子元素, 它用于指定 Servlet 被加载的时机和顺序 在 <load-on-startup> 元素中, 设置的值必须是一个整数 如果这个值是一个负数, 或者没有设定这个元素,Servlet 容器将在客户端首次请求这个 Servlet 时加载它 ; 如果这个值是正整数或 0,Servlet 容器将在 Web 应用启动时加载并初始化 Servlet, 并且 <load-on-startup> 的值越小, 它对应的 Servlet 就越先被加载 接下来, 将文件 3-1 HelloWorldServlet.java 配置为 Tomcat 启动时自动加载的 Servlet, 具体配置方式如下所示 : <servlet> <servlet-name>helloworldservlet</servlet-name> <servlet-class> cn.itcast.firstapp.servlet.helloworldservlet </servlet-class> <!-- 设置 Servlet 在 Web 应用启动时初始化 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>helloworldservlet</servlet-name> <url-pattern>/helloworldservlet</url-pattern> </servlet-mapping> 10

11 启动 Tomcat 服务器, 在 Tomcat 控制台输出的信息中, 会发现如图 3-12 所示的内容 图 3-12 运行结果 从图 3-12 中可以看出,HelloWorldServlet 的初始化信息被打印了出来, 由此说明, HelloWorldServlet 在 Tomcat 启动时就被自动加载并且初始化了 3.3 Servlet 应用 HttpServlet 类 由于大多数 Web 应用都是通过 HTTP 协议和客户端进行交互, 因此, 在 Servlet 接口中, 提供了一个抽象类 javax.servlet.http.httpservlet, 它是 GenericServlet 的子类, 专门用于创建应用于 HTTP 协议的 Servlet 为了读者可以更好地了解 HttpServlet, 接下来, 看一下 HttpServlet 类的源代码片段, 具体如下 : 1 public abstract class HttpServlet extends GenericServlet { 2 protected void doget(httpservletrequest req, HttpServletResponse resp) 3 throws ServletException, IOException 4 { } 7 protected void dopost(httpservletrequest req, HttpServletResponse resp) 8 throws ServletException, IOException { } 11 protected void service(httpservletrequest req, HttpServletResponse resp) 12 throws ServletException, IOException { 13 String method = req.getmethod(); 14 if (method.equals(method_get)) { 15 long lastmodified = getlastmodified(req); 16 if (lastmodified == -1) { 11

12 17 // servlet doesn't support if-modified-since, no reason 18 // to go through further expensive logic 19 doget(req, resp); 20 } else { 21 long ifmodifiedsince = req.getdateheader(header_ifmodsince); 22 if (ifmodifiedsince < (lastmodified / 1000 * 1000)) { 23 // If the servlet mod time is later, call doget() 24 // Round down to the nearest second for a proper compare 25 // A ifmodifiedsince of -1 will always be less 26 maybesetlastmodified(resp, lastmodified); 27 doget(req, resp); 28 } else { 29 resp.setstatus(httpservletresponse.sc_not_modified); 30 } 31 } 32 } else if (method.equals(method_head)) { 33 long lastmodified = getlastmodified(req); 34 maybesetlastmodified(resp, lastmodified); 35 dohead(req, resp); 36 } else if (method.equals(method_post)) { 37 dopost(req, resp); 38 } else if (method.equals(method_put)) { 39 doput(req, resp); 40 } else if (method.equals(method_delete)) { 41 dodelete(req, resp); 42 } else if (method.equals(method_options)) { 43 dooptions(req,resp); 44 } else if (method.equals(method_trace)) { 45 dotrace(req,resp); 46 } else { 47 String errmsg = lstrings.getstring("http.method_not_implemented"); 48 Object[] errargs = new Object[1]; 49 errargs[0] = method; 50 errmsg = MessageFormat.format(errMsg, errargs); 51 resp.senderror(httpservletresponse.sc_not_implemented, errmsg); 52 } 53 } 54 public void service(servletrequest req, ServletResponse res) 55 throws ServletException, IOException { 12

13 56 HttpServletRequest request; 57 HttpServletResponse response; 58 try { 59 request = (HttpServletRequest) req; 60 response = (HttpServletResponse) res; 61 } catch (ClassCastException e) { 62 throw new ServletException("non-HTTP request or response"); 63 } 64 service(request, response); 65 } 66 } 通过分析 HttpServlet 的源代码片段, 发现 HttpServlet 主要有两大功能, 第一是根据用 户请求方式的不同, 定义相应的 doxxx() 方法处理用户请求 例如, 与 GET 请求方式对应 的 doget() 方法, 与 POST 方式对应的 dopost() 方法 第二是通过 service() 方法将 HTTP 请 求和响应分别强转为 HttpServletRequest 和 HttpServletResponse 类型的对象 需要注意的是, 由于 HttpServlet 类在重写的 service() 方法中, 为每一种 HTTP 请求方 式都定义了对应的 doxxx() 方法, 因此, 当定义的类继承 HttpServlet 后, 只需根据请求方 式, 重写对应的 doxxx() 方法即可, 而不需要重写 service() 方法 动手体验 :HttpServlet 中的 doget() 和 dopost() 方法 由于大多数客户端的请求方式都是 GET 和 POST, 因此学习如何使用 HttpServlet 中 doget() 和 dopost() 方法变得相当重要 接下来, 通过一个具体的案例, 分步骤讲解 HttpServlet 中 doget() 和 dopost() 方法的使用, 具体如下 : (1) 在目录 D:\cn\itcast\firstapp\servlet 下编写 RequestMethodServlet 类, 并且通过继承 HttpServlet 类, 实现 doget() 和 dopost() 方法的重写, 如文件 3-3 所示 1 package cn.itcast.firstapp.servlet; 2 import java.io.*; 3 import javax.servlet.*; 4 import javax.servlet.http.*; 文件 3-3 RequestMethodServlet.java 5 public class RequestMethodServlet extends HttpServlet { 6 public void doget(httpservletrequest request, 7 HttpServletResponse response)throws ServletException, IOException { 8 PrintWriter out = response.getwriter(); 9 out.write("this is doget method"); 10 } 11 public void dopost(httpservletrequest request, 12 HttpServletResponse response)throws ServletException, IOException { 13

14 13 PrintWriter out = response.getwriter(); 14 out.write("this is dopost method"); 15 } 16 } (2) 在 Tomcat 中 chapter03 目录的 web.xml 中配置 RequestMethodServlet 的映射路径, 配置信息如下所示 : <servlet> <servlet-name>requestmethodservlet</servlet-name> <servlet-class> cn.itcast.firstapp.servlet.requestmethodservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>requestmethodservlet</servlet-name> <url-pattern>/requestmethodservlet</url-pattern> </servlet-mapping> ( 3 ) 编译 RequestMethodServlet.java 文件, 并将编译后生成的 RequestMethodServlet.class 文件拷贝到 Tomcat 安装目录下的 webapps\chapter03\web-inf\classes 文件中 (4) 采用 GET 方式访问 RequestMethodServlet 启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 浏览器显示的结果如图 3-13 所示 图 3-13 运行结果 从图 3-13 中可以看出, 浏览器显示出了 this is doget method 语句 由此可见, 采用 GET 方式请求 Servlet 时, 会自动调用 doget() 方法 (5) 采用 POST 方式访问 RequestMethodServlet 在目录 webapps\chapter03 下编写 一个名为 form.html 的文件, 并将其中表单的提交方式设置为 POST, 如文件 3-4 所示 文件 3-4 form.html 1 <form action="/chapter03/requestmethodservlet" method="post"> 2 姓名 <input type="text" name="name" /><br /> 3 密码 <input type="text" name="psw" /><br /> 4 <input type="submit" value=" 提交 "/> 5 </form> ( 6 ) 启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 form.html 文件, 浏览器显示的 14

15 结果如图 3-14 所示 所示 图 3-14 运行结果 单击 提交 按钮, 浏览器界面跳转到 RequestMethodServlet, 显示的结果如图 3-15 图 3-15 运行结果从图 3-15 中可以看出, 浏览器显示出了 this is dopost method 语句 由此可见, 采用 POST 方式请求 Servlet 时, 会自动调用 dopost() 方法 需要注意的是, 如果 GET 和 POST 请求的处理方式一致, 则可以在 dopost() 方法中直接调用 doget() 方法, 具体示例如下 : public void doget(httpservletrequest request,httpservletresponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); out.write("the same way of the doget and dopost method"); } public void dopost(httpservletrequest request, HttpServletResponse response)throws ServletException, IOException { this.doget(request, response); } 任务 3-1 使用 Eclipse 工具开发 Servlet 任务目标 为了帮助读者了解 Servlet 的开发过程, 在本节之前实现的 Servlet 都没有借助开发工具, 开发步骤相当繁琐 但是, 在实际开发中, 通常都会使用 Eclipse( 或 MyEclipse 等 ) 工具完成 Servlet 的开发,Eclipse 不仅会自动编译 Servlet, 还会自动创建 web.xml 文件信息, 完成 Servlet 虚拟路径的映射 通过本任务的学习, 读者要学会如何使用 Eclipse 工具开发 Servlet 实现步骤 1. 新建 Web 项目 15

16 选择 Eclipse 上方工具栏的 File New Other 选项, 进入新建工程的界面, 如图 3-16 所示 图 3-16 新建项目的界面 选择图 3-16 所示的 Dynamic Web Project 选项, 单击 Next 按钮, 进入填写项目 信息的界面, 如图 3-17 所示 图 3-17 填写项目信息的界面 在图 3-17 中, 填写的项目名为 chapter03, 选择的运行环境是 Tomcat 7.0, 单击 Next 按钮, 进入 Web 项目的配置界面, 如图 3-18 所示 16

17 图 3-18 Web 项目的配置界面在图 3-18 中,Eclipse 会自动将 src 目录下的文件编译成 class 文件存放到 classes 目录下 需要注意的是,src 目录和 classes 目录都是可以修改的, 在此, 这里不作任何修改, 采用默认设置的目录 单击 Next 按钮, 进入下一个配置页面, 如图 3-19 所示 图 3-19 New Dynamic Web Project 选项 在图 3-19 中, Context root 选项用于指定 Web 项目的根目录, Content directory 17

18 选项用于指定存放 Web 资源的目录 这里采用默认设置的目录, 将 chapter03 作为 Web 资源的根目录, 将 WebContent 作为存放 Web 资源的目录 单击 Finish 按钮, 完成 Web 项目的配置 需要注意的是, 如果 Eclipse 中使用的是 Java 视图, 单击 Finish 后, 会弹出 Open Associated Perspective 确认提示框 ( 如图 3-20), 出现此窗口的原因是所创建的 Web 项目关联了 Java EE 视图, 由于两种视图在开发使用时区别不大, 而且在 Eclipse 中可做相应设置, 所以此处依照个人习惯选择相应视图即可 单击 No 后 Web 应用目录如图 3-21 所示 图 3-20 开启关联视图确认框 图 3-21 创建好的 Web 应用目录 2. 创建 Servlet 程序创建好 Web 项目后, 接下来, 就可以开始新建 Servlet 了 右击图 3-21 所示的 chapter03 项目的 src 文件, 选择 New Other 选项, 进入创建 Servlet 的界面, 如图 3-22 所示 18

19 图 3-22 创建 Servlet 的界面 在图 3-22 中, 选择 Servlet 选项, 单击 Next 按钮, 进入填写 Servlet 信息的界 面, 如图 3-23 所示 图 3-23 填写 Servlet 的界面在图 3-23 中, Java package 用于指定 Servlet 所在包的名称, Class name 用于指定 Servlet 的名称 这里创建的 Servlet 的名称为 TestServlet01, 它所在的包的名称为 cn.itcast.servlet 单击 Next 按钮, 进入配置 Servlet 的界面, 如图 3-24 所示 19

20 图 3-24 Servlet 的配置界面在图 3-24 中, Name 选项用来指定 web.xml 文件中 <servlet-name> 元素的内容, URL mapping 文本框用来指定 web.xml 文件中 <url-pattern> 元素的内容, 这两个选项的内容都是可以修改的, 此处不作任何修改, 采用默认设置的内容, 单击 Next 按钮, 进入下一个配置界面, 如图 3-25 所示 图 3-25 配置界面在图 3-25 中, 可以勾选需要创建的方法 这里只选择 Inherited abstract methods doget 和 dopost 方法, 单击 Finish 按钮, 完成 Servlet 的创建 TestServlet01 创建后的内容如图 3-26 所示 20

21 图 3-26 创建后的 TestServlet01 类由于 Eclipse 工具在创建 Servlet 时会自动将 Servlet 的相关配置文件添加到 web.xml 中, 因此打开 web.xml 文件, 可以看到 TestServlet01 的虚拟映射路径已自动进行了配置, 如图 3-27 所示 图 3-27 web.xml 文件从图 3-27 中可以看到,TestServlet01 的配置信息已在 web.xml 中被创建, 至此,Servlet 创建成功 为了更好的演示 Servlet 的运行效果, 接下来在该 Servlet 的 doget() 和 dopost() 方法中添加一些代码, 具体如下 : protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { this.dopost(request, response); } protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); 21

22 out.print("this servlet is created by eclipse"); } 3. 部署和访问 Servlet 打开 Servers 选项卡(Java 视图中如果没显示此项, 可选择 Eclipse 工具栏的 Window Show View Other Server Servers 显示出此项), 选中部署 Web 应用的 Tomcat 服务器 ( 关于 Tomcat 服务器的配置方式参考第二章 ), 右击并选择 Add and Remove 选项, 如图 3-28 所示 所示 图 3-28 Add and Remove 选项 单击图 3-28 所示的 Add and Remove 选项后, 进入部署 Web 应用的界面, 如图

23 图 3-29 部署 Web 应用的界面在图 3-29 中, Available 选项中的内容是还没有部署到 Tomcat 服务器的 Web 项目, Configured 选项中的内容是已经部署到 Tomcat 服务器的 Web 项目, 选中 chapter03, 单击 Add 按钮, 将 chapter03 项目添加到 Tomcat 服务器中, 如图 3-30 所示 图 3-30 将 chapter03 项目部署到 Tomcat 服务器 单击图 3-30 所示的 Finish 按钮, 完成 Web 应用的部署 接下来, 启动 Eclipse 中的 Tomcat 服务器, 在浏览器的地址栏中输入地址 23

24 访问 TestServlet01, 浏览器的显示结果如图 3-31 所示 图 3-31 访问 EclipseServlet 从图 3-31 中可以看出, 浏览器中已经显示出了 TestServlet01 中需要输出的内容, 至此, 已经完成了使用 Eclipse 工具开发 Servlet Eclipse 工具在 Web 开发中相当重要, 读者应该熟练掌握 Eclipse 工具的使用 任务 3-2 实现 Servlet 虚拟路径的映射 任务目标 在 web.xml 文件中, 一个 <servlert-mapping> 元素用于映射一个 Servlet 的对外访问路径, 该路径也称为虚拟路径 例如, 在 小节中,HelloWorldServlet 所映射的虚拟路径为 /HelloWorldServlet 创建好的 Servlet 只有映射成虚拟路径, 客户端才能对其进行访问 但是, 在映射 Servlet 时, 还有一些细节问题需要学习, 比如 Servlet 的多重映射 在映射路径中使用通配符 配置缺省的 Servlet 等 通过本任务的学习, 读者可以解决这些 Servlet 映射时的问题 实现步骤 1.Servlet 的多重映射 Servlet 的多重映射指的是同一个 Servlet 可以被映射成多个虚拟路径 也就是说, 客户端可以通过多个路径实现对同一个 Servlet 的访问 Servlet 多重映射的实现方式有两种, 具体如下 : (1) 配置多个 <servlet-mapping> 元素以任务 3-1 中的 TestServlet01 为例, 在 web.xml 文件中对 TestServlet01 虚拟路径的映射进行修改, 修改后的代码如下所示 : <servlet> <servlet-name>testservlet01</servlet-name> <servlet-class> cn.itcast.chapter03.servlet.testservlet01 </servlet-class> </servlet> <servlet-mapping> <!-- 映射为 TestServlet01--> 24

25 <servlet-name> TestServlet01</servlet-name> <url-pattern>/testservlet01</url-pattern> </servlet-mapping> <servlet-mapping> <!-- 映射为 Test01--> <servlet-name>testservlet01</servlet-name> <url-pattern>/test01</url-pattern> </servlet-mapping> 重启 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 TestServlet01, 浏览器的显示结果如图 3-32 所示 图 3-32 运行结果 在浏览器的地址栏中输入地址 访问 TestServlet01, 浏览器显示的结果如图 3-33 所示 图 3-33 运行结果通过图 3-32 和图 3-33 的比较, 发现使用两个 URL 地址都可以正常访问 TestServlet01 由此可见, 通过配置多个 <servlet-mapping> 元素可以实现 Servlet 的多重映射 (2) 在一个 <servlet-mapping> 元素下配置多个 <url-pattern> 子元素 同样以 TestServlet01 为例, 在 web.xml 文件中对 TestServlet01 虚拟路径的映射进行修改, 修改后的代码如下所示 : <servlet> <servlet-name>testservlet01</servlet-name> <servlet-class> cn.itcast.chapter03.servlet.testservlet01 </servlet-class> </servlet> <servlet-mapping> <!-- 映射为 TestServlet01 和 Test02--> <servlet-name>testservlet01</servlet-name> 25

26 <url-pattern>/testservlet01</url-pattern> <url-pattern>/test02</url-pattern> </servlet-mapping> 重启 Tomcat 服务器, 在浏览器的地址栏中输入地址 TestServlet01 访问 TestServlet01, 浏览器的显示结果如图 3-34 所示 图 3-34 运行结果 在浏览器的地址栏中输入地址 访问 TestServlet01, 浏览器的显示结果如图 3-35 所示 图 3-35 运行结果通过图 3-34 和图 3-35 的比较, 发现使用两个 URL 地址都可以正常访问 TestServlet01 由此可见, 在一个 <servlet-mapping> 元素下配置多个 <url-pattern> 子元素同样可以实现 Servlet 的多重映射 2.Servlet 映射路径中使用通配符在实际开发过程中, 开发者有时候会希望某个目录下的所有路径都可以访问同一个 Servlet, 这时, 可以在 Servlet 映射的路径中使用通配符 * 通配符的格式有两种, 具体如下 (1) 格式为 *. 扩展名, 例如 *.do 匹配以.do 结尾的所有 URL 地址 (2) 格式为 /*, 例如 /abc/* 匹配以 /abc 开始的所有 URL 地址 需要注意的是, 这两种通配符的格式不能混合使用, 例如,/abc/*.do 就是不合法的映射路径 另外, 当客户端访问一个 Servlet 时, 如果请求的 URL 地址能够匹配多个虚拟路径, 那么 Tomcat 将采取最具体匹配原则查找与请求 URL 最接近的虚拟映射路径 例如, 对于如下所示的一些映射关系 : /abc/* 映射到 Servlet1 /* 映射到 Servlet2 /abc 映射到 Servlet3 *.do 映射到 Servlet4 将发生如下一些行为 : 26

27 当请求 URL 为 /abc/a.html, /abc/* 和 /* 都可以匹配这个 URL,Tomcat 会调用 Servlet1 当请求 URL 为 /abc, /abc/* 和 /abc 都可以匹配这个 URL,Tomcat 会调用 Servlet3 当请求 URL 为 /abc/a.do, *.do 和 /abc/* 都可以匹配这个 URL,Tomcat 会调用 Servlet1 当请求 URL 为 /a.do, /* 和 *.do 都可以匹配这个 URL,Tomcat 会调用 Servlet2 当请求 URL 为 /xxx/yyy/a.do, *.do 和 /* 都可以匹配这个 URL,Tomcat 会调用 Servlet2 3. 缺省 Servlet 如果某个 Servlet 的映射路径仅仅是一个正斜线 (/), 那么这个 Servlet 就是当前 Web 应用的缺省 Servlet Servlet 服务器在接收到访问请求时, 如果在 web.xml 文件中找不到匹配的 <servlet-mapping> 元素的 URL, 就会将访问请求交给缺省 Servlet 处理, 也就是说, 缺省 Servlet 用于处理其他 Servlet 都不处理的访问请求 接下来对本任务中的 web.xml 文件进行修改, 将其设置为缺省的 Servlet, 具体如下 : <servlet> <servlet-name>testservlet01</servlet-name> <servlet-class> cn.itcast.chapter03.servlet.testservlet01 </servlet-class> </servlet> <servlet-mapping> <servlet-name>testservlet01</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 启动 Tomcat 服务器, 在浏览器的地址栏中输入任意的地址如 : 浏览器的显示结果如图 3-36 所示 图 3-36 运行结果从图 3-36 中可以看出, 当 URL 地址和 TestServlet01 的虚拟路径不匹配时, 浏览器仍然可以正常访问 TestServlet01 需要注意的是, 在 Tomcat 安装目录下的 web.xml 文件中也配置了一个缺省的 Servlet, 配置信息如下所示 : 27

28 <servlet> <servlet-name>default</servlet-name> <servlet-class> org.apache.catalina.servlets.defaultservlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 在上面的配置信息中,org.apache.catalina.servlets.DefaultServlet 被设置为缺省的 Servlet, 它对 Tomcat 服务器上所有 Web 应用都起作用 当 Tomcat 服务器中的某个 Web 应用没有缺省 Servlet 时, 都会将 DefaultServlet 作为默认缺省的 Servlet 当客户端访问 Tomcat 服务器中的某个静态 HTML 文件时,DefaultServlet 会判断 HTML 是否存在, 如果存在, 就会将数据以流的形式回送给客户端, 否则会报告 404 错误 3.4 ServletConfig 和 ServletContext ServletConfig 接口 在 Servlet 运行期间, 经常需要一些辅助信息, 例如, 文件使用的编码 使用 Servlet 程序的共享等, 这些信息可以在 web.xml 文件中使用一个或多个 <init-param> 元素进行配置 当 Tomcat 初始化一个 Servlet 时, 会将该 Servlet 的配置信息封装到一个 ServletConfig 对象中, 通过调用 init(servletconfig config) 方法将 ServletConfig 对象传递给 Servlet ServletConfig 定义了一系列获取配置信息的方法, 接下来通过一张表来描述 ServletConfig 接口的常用方法, 如表 3-3 所示 表 3-3 ServletConfig 接口的常用方法方法说明功能描述 String getinitparameter(string name) 根据初始化参数名返回对应的初始化参数值返回一个 Enumeration 对象, 其中包含了所有的初 Enumeration getinitparameternames() 始化参数名返回一个代表当前 Web 应用的 ServletContext 对 ServletContext getservletcontext() 象返回 Servlet 的名字, 即 web.xml 中 <servlet-name> String getservletname() 元素的值了解了表 3-3 中的 ServletConfig 接口的常用方法后, 接下来以 getinitparameter() 方法 28

29 为例, 分步骤讲解该方法的使用, 具体如下 : (1) 在 chapter03 项目的 web.xml 文件中为 Servlet 配置一些参数信息, 具体的配置代码如下所示 : <servlet> <servlet-name>testservlet02</servlet-name> <servlet-class> cn.itcast.servlet.testservlet02 </servlet-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>testservlet02</servlet-name> <url-pattern>/testservlet02</url-pattern> </servlet-mapping> 上面的参数信息中 <init-param> 节点表示要设置的参数, 该节点中的 <param-name> 表示参数的名称,<param-value> 表示参数的值, 在 <init-param> 节点中为 TestServlet02 配置了一个名为 encoding 的参数, 并设置其参数的值为 UTF-8 (2) 在 cn.itcast.servlet 包中编写 TestServlet02 类, 用于读取 web.xml 文件中的参数信息, 代码如文件 3-5 所示 文件 3-5 TestServlet02.java 1 package cn.itcast.servlet; 2 import java.io.*; 3 import javax.servlet.*; 4 import javax.servlet.http.*; 5 public class TestServlet02 extends HttpServlet { 6 protected void doget(httpservletrequest request, 7 HttpServletResponse response) throws ServletException, IOException { 8 PrintWriter out = response.getwriter(); 9 // 获得 ServletConfig 对象 10 ServletConfig config = this.getservletconfig(); 11 // 获得参数名为 encoding 对应的参数值 12 String param = config.getinitparameter("encoding"); 13 out.println("encoding="+param); 14 } 15 protected void dopost(httpservletrequest request, 16 HttpServletResponse response) throws ServletException, IOException { 29

30 17 this.doget(request, response); 18 } 19 } ( 3 ) 启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 TestServlet02, 显示的结果如图 3-37 所示 图 3-37 运行结果 从图 3-37 中可以看出, 在 web.xml 文件中为 TestServlet02 配置的编码信息被读取了出 来 由此可见, 通过 ServletConfig 对象可以获得 web.xml 文件中的参数信息 ServletContext 接口 当 Servlet 容器启动时, 会为每个 Web 应用创建一个唯一的 ServletContext 对象代表当前 Web 应用, 该对象不仅封装了当前 Web 应用的所有信息, 而且实现了多个 Servlet 之间数据的共享 接下来, 针对 ServletContext 接口的不同作用分别进行讲解, 具体如下 : 1. 获取 Web 应用程序的初始化参数在 web.xml 文件中, 不仅可以配置 Servlet 的初始化信息, 还可以配置整个 Web 应用的初始化信息 Web 应用初始化参数的配置方式具体如下所示 : <context-param> <param-name>xxx</param-name> <param-value>xxx</param-value> </context-param> <context-param> <param-name>aaa</param-name> <param-value>aaa</param-value> </context-param> 在上面的示例中,<context-param> 元素位于根元素 <web-app> 中, 它的子元素 <param-name> 和 <param-value> 分别用来指定参数的名字和参数值 要想获取这些参数信息, 可以使用 ServletContext 接口, 该接口中定义的 getinitparameternames() 和 getinitparameter(string name) 方法分别用来获取参数名和参数值 接下来, 通过一个案例来演示如何使用 ServletContext 接口获取 Web 应用程序的初始化参数 (1) 在 chapter03 项目的 web.xml 文件中, 配置初始化参数信息和 Servlet 信息, 其代 30

31 码如下所示 <context-param> <param-name>companyname</param-name> <param-value>itcast</param-value> </context-param> <context-param> <param-name>address</param-name> <param-value>beijing</param-value> </context-param> <servlet> <servlet-name>testservlet03</servlet-name> <servlet-class>cn.itcast.servlet.testservlet03</servlet-class> </servlet> <servlet-mapping> <servlet-name>testservlet03</servlet-name> <url-pattern>/testservlet03</url-pattern> </servlet-mapping> (2) 在项目的 cn.itcast.servlet 包中, 创建一个名称为 TestServlet03 的类, 该类中使用 ServletContext 接口来获取 web.xml 中的配置信息, 如文件 3-6 所示 文件 3-6 TestServlet03.java 1 package cn.itcast.servlet; 2 import java.io.*; 3 import java.util.*; 4 import javax.servlet.*; 5 import javax.servlet.http.*; 6 public class TestServlet03 extends HttpServlet { 7 public void doget(httpservletrequest request, 8 HttpServletResponse response)throws ServletException, IOException { 9 response.setcontenttype("text/html;charset=utf-8"); 10 PrintWriter out = response.getwriter(); 11 // 得到 ServletContext 对象 12 ServletContext context = this.getservletcontext(); 13 // 得到包含所有初始化参数名的 Enumeration 对象 14 Enumeration<String> paramnames = context.getinitparameternames(); 15 out.println("all the paramname and paramvalue are following:"); 16 // 遍历所有的初始化参数名, 得到相应的参数值并打印 17 while (paramnames.hasmoreelements()) { 18 String name = paramnames.nextelement(); 19 String value = context.getinitparameter(name); 31

32 20 out.println(name + ": " + value); 21 out.println("<br>"); 22 } 23 } 24 public void dopost(httpservletrequest request, 25 HttpServletResponse response)throws ServletException, IOException { 26 this.doget(request, response); 27 } 28 } 在文件 3-6 中, 当通过 this.getservletcontext() 方法获取到 ServletContext 对象后, 首先调用 getinitparameternames () 方法, 获取到包含所有初始化参数名的 Enumeration 对象, 然后遍历 Enumeration 对象, 根据获取到的参数名, 通过 getinitparamter(string name) 方法得到对应的参数值 ( 3 ) 在 Eclipse 中启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 TestServlet03, 浏览器的显示结果如图 3-38 所示 图 3-38 运行结果从图 3-38 中可以看出, 在 web.xml 文件中配置的信息被读取了出来 由此可见, 通过 ServletContext 对象可以获取到 Web 应用的初始化参数 2. 实现多个 Servlet 对象共享数据由于一个 Web 应用中的所有 Servlet 共享同一个 ServletContext 对象, 因此 ServletContext 对象的域属性可以被该 Web 应用中的所有 Servlet 访问 在 ServletContext 接口中定义了分别用于增加 删除 设置 ServletContext 域属性的四个方法, 如表 3-4 所示 表 3-4 ServletContext 接口的方法 32

33 方法说明功能描述返回一个 Enumeration 对象, 该对象包含了所 Enumeration getattributenames() 有存放在 ServletContext 中的所有域属性名根据参数指定的属性名返回一个与之匹配的 Object getattibute(string name) 域属性值根据参数指定的域属性名, 从 ServletContext void removeattribute(string name) 中删除匹配的域属性设置 ServletContext 的域属性, 其中 name 是 void setattribute(string name,object obj) 域属性名,obj 是域属性值了解了 ServletContext 接口中操作属性的方法后, 接下来通过一个案例来演示表中方法的使用 使用 Eclipse 在 chapter03 项目的 cn.itcast.servlet 包中创建两个 Servlet 类 TestServlet04 和 TestServlet05, 这两个 Servlet 类中分别使用了 ServletContext 接口中的方法设置和获取属性值, 其代码如文件 3-7 文件 3-8 所示 文件 3-7 TestServlet04.java 1 package cn.itcast.servlet; 2 import java.io.*; 3 import javax.servlet.*; 4 import javax.servlet.http.*; 5 public class TestServlet04 extends HttpServlet { 6 public void doget(httpservletrequest request, 7 HttpServletResponse response)throws ServletException, IOException { 8 ServletContext context = this.getservletcontext(); 9 // 通过 setattribute() 方法设置属性值 10 context.setattribute("data", "this servlet save data"); 11 } 12 public void dopost(httpservletrequest request, 13 HttpServletResponse response)throws ServletException, IOException { 14 this.doget(request, response); 15 } 16 } 文件 3-8 TestServlet05.java 1 package cn.itcast.servlet; 2 import java.io.*; 3 import javax.servlet.*; 4 import javax.servlet.http.*; 5 public class TestServlet05 extends HttpServlet { 6 public void doget(httpservletrequest request, 7 HttpServletResponse response)throws ServletException, IOException { 33

34 8 PrintWriter out = response.getwriter(); 9 ServletContext context = this.getservletcontext(); 10 // 通过 getattribute() 方法获取属性值 11 String data = (String) context.getattribute("data"); 12 out.println(data); 13 } 14 public void dopost(httpservletrequest request, 15 HttpServletResponse response)throws ServletException, IOException { 16 this.doget(request, response); 17 } 18 } 在文件 3-7 中,setAttribute() 方法用于设置 ServletContext 对象的属性值 在文件 3-8 中,getAttribute() 方法用于获取 ServletContext 对象的属性值 为了验证 ServletContext 对象是否可以实现多个 Servlet 数据的共享, 启动 Tomcat 服务器, 首先在浏览器的地址栏中输入地址 访问 TestServlet04, 将数据存入 ServletContext 对象, 然后在浏览器的地址栏中输入地址 访问 TestServlet05, 浏览器的显示结果如图 3-39 所示 图 3-39 运行结果从图 3-39 中可以看出, 浏览器显示出了 ServletContext 对象存储的属性 由此说明, ServletContext 对象所存储的数据可以被多个 Servlet 所共享 3. 读取 Web 应用下的资源文件在实际开发中, 有时候可能会需要读取 Web 应用中的一些资源文件, 比如配置文件, 图片等 为此, 在 ServletContext 接口中定义了一些读取 Web 资源的方法, 这些方法是依靠 Servlet 容器来实现的 Servlet 容器根据资源文件相对于 Web 应用的路径, 返回关联资源文件的 IO 流 资源文件在文件系统的绝对路径等 表 3-5 中列举了 ServletContext 接口中用于获取资源路径的相关方法, 具体如下 : 表 3-5 ServletContext 接口的常用方法方法说明功能描述返回一个 Set 集合, 集合中包含资源目录中子目录 Set getresourcepaths(string path) 和文件的路径名称 参数 path 必须以正斜线 (/) 开始, 指定匹配资源的部分路径 34

35 返回资源文件在服务器文件系统上的真实路径 ( 文件的绝对路径 ) 参数 path 代表资源文件的虚拟路 String getrealpath(string path) 径, 它应该以正斜线开始 (/) 开始, / 表示当前 Web 应用的根目录, 如果 Servlet 容器不能将虚拟路径转换为文件系统的真实路径, 则返回 null 返回映射到某个资源文件的 URL 对象 参数 path URL getresource(string path) 必须以正斜线 (/) 开始, / 表示当前 Web 应用的根目录返回映射到某个资源文件的 InputStream 输入流对 InputStream 象 参数 path 传递规则和 getresource() 方法完全一 getresourceasstream(string path) 致了解了 ServletContext 接口中用于获得 Web 资源路径的方法后, 接下来通过一个案例, 分步骤演示如何使用 ServletContext 对象读取资源文件, 具体如下 : (1) 创建一个资源文件 在 chapter03 项目中右击 src 目录, 选择 New > Other 选项, 进入创建文件的界面, 如图 3-40 所示 图 3-40 新建文件的界面 单击图 3-40 所示的 Next 按钮, 进入填写文件名称的界面, 如图 3-41 所示 35

36 图 3-41 填写文件名称的界面在图 3-41 中, File name 文本框中的内容为资源文件的名称, 在此, 将创建的资源文件命名为 itcast.properties, 并且选择存放的目录为 src 目录 单击 Finish 按钮, 完成配置文件的创建 在创建好的 itcast.properties 文件中, 输入如下所示的配置信息 : Company = itcast Address = Beijing 需要注意的是,Eclipse 中 src 目录下创建的资源文件在 Tomcat 服务器启动时会被复制到项目的 WEB-INF/classes 目录下, 如图 3-42 所示 图 3-42 WEB-INF/classes 目录 (2) 编写读取 itcast.properties 资源文件的 Servlet 在 cn.itcast.servlet 包中创建一个名称为 TestServlet06 的 Servlet 类, 该类的实现代码如文件 3-9 所示 文件 3-9 TestServlet06.java 1 package cn.itcast.servlet; 2 import java.io.*; 3 import java.util.properties; 4 import javax.servlet.*; 5 import javax.servlet.http.*; 36

37 6 public class TestServlet06 extends HttpServlet { 7 public void doget(httpservletrequest request, 8 HttpServletResponse response)throws ServletException, IOException { 9 response.setcontenttype("text/html;charset=utf-8"); 10 ServletContext context = this.getservletcontext(); 11 PrintWriter out = response.getwriter(); 12 // 获取相对路径中的输入流对象 13 InputStream in = context 14.getResourceAsStream("/WEB-INF/classes/itcast.properties"); 15 Properties pros = new Properties(); 16 pros.load(in); 17 out.println("company=" + pros.getproperty("company") + "<br>"); 18 out.println("address=" + pros.getproperty("address") + "<br>"); 19 } 20 public void dopost(httpservletrequest request, 21 HttpServletResponse response)throws ServletException, IOException { 22 this.doget(request, response); 23 } 24 } 在文件 3-9 中, 使用 ServletContext 的 getresourceasstream(string path) 方法获得了关 联 itcast.properties 资源文件的输入流对象, 其中的 path 参数必须以正斜线 / 开始, 表示 itcast.properties 文件相对于 Web 应用的相对路径 ( 3 ) 启动 Tomcat 服务器, 在浏览器的地址栏中输入地址 访问 TestServlet06, 浏览器的显示结果如图 3-43 所示 图 3-43 运行结果从图 3-43 中可以看出,itcast.properties 资源文件的内容被读取出来 由此可见, 使用 ServletContext 可以读取到 Web 应用中的资源文件 (4) 有的时候, 开发者需要获取的是资源的绝对路径 接下来, 对文件 3-9 TestServlet06.java 进行修改, 通过使用 getrealpath(string path) 方法获取资源文件的绝对路径, 修改后的代码如文件 3-10 所示 文件 3-10 TestServlet06.java 1 package cn.itcast.servlet; 2 import java.io.*; 37

38 3 import java.util.properties; 4 import javax.servlet.*; 5 import javax.servlet.http.*; 6 public class TestServlet06 extends HttpServlet { 7 public void doget(httpservletrequest request, 8 HttpServletResponse response)throws ServletException, IOException { 9 PrintWriter out = response.getwriter(); 10 ServletContext context = this.getservletcontext(); 11 // 获取文件绝对路径 12 String path = context 13.getRealPath("/WEB-INF/classes/itcast.properties"); 14 FileInputStream in = new FileInputStream(path); 15 Properties pros = new Properties(); 16 pros.load(in); 17 out.println("company=" + pros.getproperty("company") + "<br>"); 18 out.println("address=" + pros.getproperty("address") + "<br>"); 19 } 20 public void dopost(httpservletrequest request, 21 HttpServletResponse response)throws ServletException, IOException { 22 this.doget(request, response); 23 } 24 } 在文件 3-10 中, 使用 ContextServlet 对象的 getrealpath(string path) 方法获得 itcast.properties 资源文件的绝对路径 path, 然后使用这个路径创建关联 itcast.properties 文 件的输入流对象 ( 5 ) 启动 Tomcat 服务器, 在浏览器的地址栏中再次输入地址 访问 TestServlet06, 同样可以看到图 3-43 所显示的内容 3.5 本章小结 本章主要介绍了 Java Servlet 的基本知识及其接口和类的用法 通过本章的学习, 读者可以掌握 Servlet 接口及其实现类的使用, 了解 Servlet 的生命周期, 可以熟练使用 Eclipse 工具开发 Servlet, 并能够掌握 Servlet 虚拟路径映射的配置 Servlet 技术在 web 开发中非常重要, 读者应该熟练掌握 Servlet 相关技术 38

39 测一测 学习完前面的内容, 下面来动手测一测吧, 请思考以下问题 : 1 请列举 Servlet 接口中的方法, 并分别说明这些方法的特点及其作用 2 简述 ServletContext 接口的三个主要作用 3 编写一个 Servlet, 实现统计网站被访问次数的功能 4 请编写一段程序, 使程序能读取该 Servlet 的配置信息, 从中获得参数名为 encoding 对应的参数值, 并输出到页面上 扫描右方二维码, 传智名师帮你解答! 39

Microsoft Word - 第4章 Servlet技术—样章.doc

Microsoft Word - 第4章 Servlet技术—样章.doc 第 4 章 Servlet 技术 学习目标 u 熟悉 Servlet 在生命周期中调用的方法 u 掌握 HttpServlet 类的作用及其使用 u 掌握 Servlet 虚拟路径的映射 u 掌握 ServletConfig 和 ServletContext 接口的使用 随着 Web 应用业务需求的增多, 动态 Web 资源的开发变得越来越重要 目前, 很多公司都提供了开发动态 Web 资源的相关技术,

More information

resp.getwriter().print(j + "*" + i + "=" + j * i+" "); resp.getwriter().print("<br/>"); protected void dopost(httpservletrequest req, HttpServletRespo

resp.getwriter().print(j + * + i + = + j * i+ ); resp.getwriter().print(<br/>); protected void dopost(httpservletrequest req, HttpServletRespo 第三章补充案例 案例 3-1 HttpServlet 一 案例描述 1 考核知识点名称 :HttpServlet 编号 : 2 练习目标 掌握 HttpServlet 的 doget() 方法和 dopost() 方法 3 需求分析由于大多数 Web 应用都是通过 HTTP 协议和客户端进行交互, 因此, 在 Servlet 接口中, 提供了 一个抽象类 javax.servlet.http.httpservlet,

More information

Microsoft Word - 第4章 Servlet开发—教学设计.doc

Microsoft Word - 第4章 Servlet开发—教学设计.doc 传智播客 JavaWeb 程序开发入门 教学设计 课程名称 : JavaWeb 程序开发入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 09 月 09 日 课题名称内容分析教学目标及基本要求重点及措施 计划第 4 章 Servlet 技术 6 课时学时随着 Web 应用业务需求的增多, 动态 Web 资源的开发变得越来越重要, 为此 Sun

More information

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) 09 (File Processes) 9-1 9-2 (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) Java Servlet 9-1 Servlet (File Processes) Client Servlet Servlet Java Java (Stream)

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ 第 四 章 Filter( 过 滤 器 ) 样 题 A 卷 一 选 择 题 ( 每 小 题 2 分, 共 20 分 ) 1 下 面 选 项 中, 用 于 实 现 初 始 化 过 滤 器 的 方 法 是 ( ) A init(filterconfig filterconfig) B dofilter(servletrequest req,servletresponse resp,filterchain

More information

教案模板4-2

教案模板4-2 传智播客 Java Web 程序设计任务教程 教学设计 课程名称 :Java Web 程序设计任务教程 授课年级 : 2016 年级 授课学期 : 2016 学年第二学期 教师姓名 : 某某老师 2016 年 9 月 1 日 课题 名称 第 3 章 Servlet 基础 计划 学时 6 课时 内容分析教学目标及基本要求教学重点教学难点教学方式 随着 Web 应用业务需求的增多, 动态 Web 资源的开发变得越来越重要,

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Servlet

Servlet Servlet Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 Huihoo - Enterprise Open Source http://www.huihoo.com 2 GET POST Huihoo

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt 2004 Marty Hall servlet 基础 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 Eclipse 插件 ( 比如 MyEclipse 插件 ), 其开发方式和步骤可能略有差异和不同 在该例中,

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 与客户端交互 客户端跟踪 与客户端交互客户端跟踪 1 与客户端交互 HTTP servlet 与客户端的交互 通过 service 方法处理客户端的请求 service 方法根据请求 (request) 类型的不同, 调用不同的方法 对于 GET 请求, 调用 doget( ) 方法进行处理 对于 POST 请求, 调用 dopost( )

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt 2004 Marty Hall 服务器响应的生成 : HTTP 状态代码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型 文 章 编 号 :1007-757X(2012)1-0036-04 领 域 驱 动 模 型 的 WEB 软 件 系 统 设 计 研 究 摘 要 : J2EE 3 JDK1.7 Tomcat WEB 关 键 词 : 中 图 分 类 号 :TP311 文 献 标 志 码 :A 0 引 言 Web 软 件 系 统 的 分 层 结 构 典 型 的 J2EE 软 件 系 统 开 发 方 法 分 为 三 层 结

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问 内置对象的取得和多人开发 一 内置对象的取得 在使用的 servlet 的时候可以通过 HttpServletResquest 获取到一些内置对象, 但是在 struts2 中为了方便取得内置对象, 专门提供了一个 ServletActionContext 这个类取得取得内置对象, 观察如下方法 public static javax.servlet.jsp.pagecontext() 取得 pagecontext

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 掌握 Model I 体系结构 掌握 Model II 体系结构 掌握 MVC 应用程序 Model I 体系结构 6 1 Model I 体系结构结合使用 JSP 页面和 Bean 来开发 Web 应用程序 应用服务器 请求 JSP 页面 响应 Bean 数据库服务器 Model I 体系结构 6 2 Model I 体系结构用于开发简单的应用程序

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

untitled

untitled Velocity 14 100061 315@pptph.com.cn http://www.pptph.com.cn 010-67129212 010-67129211 787 1092 1/16 22 535 1 0 000 2001 11 1 2001 11 1 ISBN 7-115-09828-X/TP 2577 32.00 01067129223 1 2 1 2 3 4 5 1 Velocity

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

untitled

untitled 653 JAVA 2008 11 Institution of Software Engineer... 2... 4... 4... 5... 5... 8... 8... 8... 8... 8... 9... 9... 9... 11... 13... 13... 13... 13... 15... 15... 15... 15... 16... 16... 17... 17... 17...

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 网络程序设计的基本概念 Servlet 基础 Servlet 的生命周期 网络程序设计的基本概念 Servlet 基础 Servlet 的生命周期 1 网络程序设计的基本概念 网络将世界联系在一起, 使世界变得更加丰富多彩 同时网络互连是一个内容丰富而复杂的主题, 所以这方面的程序设计涉及面很广且不易掌握 与其他语言相比, 语言在网络应用程序方面具有一定的优势

More information

Microsoft Word - JavaWeb程序开发入门—教学大纲.doc

Microsoft Word - JavaWeb程序开发入门—教学大纲.doc JavaWeb 程序开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 : 201409210011 学分 : 5 学分学时 : 54 学时 ( 其中 : 讲课学时 :38 上机学时 :16) 先修课程 :Java 基础入门 MySQL 数据库入门后续课程 :JavaWeb 程序开发进阶教程适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 JavaWeb 程序开发入门

More information

XXXXXXXX http://cdls.nstl.gov.cn 2 26

XXXXXXXX http://cdls.nstl.gov.cn 2 26 [ ] [ ] 2003-7-18 1 26 XXXXXXXX http://cdls.nstl.gov.cn 2 26 (2003-7-18) 1...5 1.1...5 1.2...5 1.3...5 2...6 2.1...6 2.2...6 2.3...6 3...7 3.1...7 3.1.1...7 3.1.2...7 3.1.2.1...7 3.1.2.1.1...8 3.1.2.1.2...10

More information

ebook

ebook 26 JBuilder RMI Java Remote Method Invocation R M I J a v a - - J a v a J a v J a v a J a v a J a v a R M I R M I ( m a r s h a l ) ( u n m a r c h a l ) C a ff e i n e J a v a j a v a 2 i i o p J a v

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

TopTest_Adminstrator.doc

TopTest_Adminstrator.doc 壹 前 言... 3 貳 系 統 簡 介... 4 一 TKB multimedia Top-Test 系 統 架 構...4 1. 使 用 者 介 面 層 (Presentation tier)...5 2. 商 業 邏 輯 層 (business logic tier)...5 3. 資 料 服 務 層 (data services tier)...5 二 TKB Multimedia Top-Test

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

第X章

第X章 Java Web 开发 Java Web 开发 盛鑫教育产品研发部研发 www.51ok.org 声明 : 1 本书为内部资料, 仅供盛鑫教育授权单位使用 ; 2 本书版权归盛鑫教育所有, 未经本公司书面许可, 任何单位和个人不得全部或部分复制本课程资料 ; 3 如发现本书存在印刷质量问题, 盛鑫教育负责免费调换 ; 4 希望广大读者阅读本书后提出宝贵意见和建议, 并将您的意见反馈至 :info@51ok.org;

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

1. 2. Flex Adobe 3.

1. 2. Flex Adobe 3. 1. 2. Flex Adobe 3. Flex Adobe Flex Flex Web Flex Flex Flex Adobe Flash Player 9 /rich Internet applications/ria Flex 1. 2. 3. 4. 5. 6. SWF Flash Player Flex 1. Flex framework Adobe Flex 2 framework RIA

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 导 你 搭 建 Linux 平 台 下 的 JAVA 开 发 环 境, 包 括 JDK 以 及 集

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

untitled

untitled PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說

More information

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc 在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 理解 Struts 框架的工作原理 掌握使用 Struts 框架开发 Web 应用的基本步骤 熟悉 MyEclipse 对 Struts 开发的支持 Web 框架事实标准 : Web 框架的事实标准 http://struts.apache.org Java EE 主流技术趋势图 主流 Web 框架趋势图 使用 Struts 实现加法器 使用开发的

More information

spc

spc 网站的静态页面生成方案 yanrong79@gmail.com 提升网站性能的方式有很多, 例如有效的使用缓存, 生成静态页面等等 今天要说的就是生成静态页面的方式 什么叫生成静态页面呢? 很简单, 例如我们如果访问一个链接 http://xyz.com/index.do, 那么服务器就会解析这个请求, 让特定的 Action 去处理 这其中的缺点是显而易见的 : 如果访问的人, 那么就会加重应用服务器的压力,

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难 第 1 章 Java 概 述 Java 的 诞 生 Java 的 特 点 Java 开 发 环 境 安 装 与 配 置 创 建 并 运 行 一 个 简 单 的 Java 程 序 Java 语 言 是 当 今 计 算 机 软 件 行 业 中 最 热 门 的 网 络 编 程 语 言, 以 Java 为 核 心 的 芯 片 技 术 编 译 技 术 数 据 库 连 接 技 术, 以 及 基 于 企 业 级

More information

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX BPMX3 技 术 白 皮 书 业 务 流 程 开 发 平 台 介 绍 目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX3... 5 2.2.1 BPMX3

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

Servlet技术

Servlet技术 Servlet 技 术 1 复 习 几 个 要 点 2 请 求 (request) 用 户 何 时 发 起 一 个 请 求 点 击 一 个 链 接 提 交 一 个 表 单 在 地 址 栏 键 入 一 个 Web 地 址! 请 求 通 过 URL 来 指 定 http://www.neusoft.edu.cn:80/cs/news.html URL 的 构 成 : http:// 代 表 超 文 本

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Spring3.x开发入门

Spring3.x开发入门 Spring Bean 管理 Spring 的工厂类 课程安排 Spring 的 Bean 管理 (XML 方式 ) Spring 的属性注入 (XML 方式 ) Spring 的 Bean 管理 ( 注解方式 ) Spring 的属性注入 ( 注解方式 ) Spring 的工厂类 Spring 的 Bean 管理 (XML 方式 ) 三种实例化 Bean 的方式 使用类构造器实例化 ( 默认无参数

More information

Stateless Session Beans(无状态bean)的学习

Stateless Session Beans(无状态bean)的学习 一 Stateless Session Beans( 无状态 bean) 的学习 第一步 : 要定义一个会话 Bean, 首先需要定义一个包含他所有业务方法的接口 这个接口不需要任何注释, 就像普通的 java 接口那样定义 调用 EJB 的客户端通过使用这个接口引用从 EJB 容器得到的会话 Bean 对象 stub 接口的定义如下: HelloWorld.java package com.foshanshop.ejb3;

More information

新美大酒店开放平台SDK(.NET版)使用说明.pages

新美大酒店开放平台SDK(.NET版)使用说明.pages SDK(.NET 版 ) 使 用说明 1 SDK 包说明 1.1 获取 SDK SDK 可以在数据平台下载, 也可直接通过下载地址获得 下载地址 : http://s3.meituan.net/v1/mss_de81c933e113413ea913a772b707b9c9/open-platform-sdk/mthotelopenplatform-sdk-1.0-net.zip 下载成功后, 解压后可获得

More information

RUN_PC連載_10_.doc

RUN_PC連載_10_.doc PowerBuilder 8 (10) Jaguar CTS ASP Jaguar CTS PowerDynamo Jaguar CTS Microsoft ASP (Active Server Pages) ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar Server ASP

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

1.1 Filter 的特性 请求映射 filter-mapping 和 servlet-mapping 都是将对应的 filter 或 servlet 映射到某 个 url-pattern 上, 当客户发起某一请求时, 服务器先将此请求与 web.xml 中定 义的所有 url-pat

1.1 Filter 的特性 请求映射 filter-mapping 和 servlet-mapping 都是将对应的 filter 或 servlet 映射到某 个 url-pattern 上, 当客户发起某一请求时, 服务器先将此请求与 web.xml 中定 义的所有 url-pat 1.1 Filter 的特性 1.1.1 请求映射 filter-mapping 和 servlet-mapping 都是将对应的 filter 或 servlet 映射到某 个 url-pattern 上, 当客户发起某一请求时, 服务器先将此请求与 web.xml 中定 义的所有 url-pattern 进行匹配, 然后执行匹配通过的 filter 和 servlet 你可以使用三种方式定义 url-pattern

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

07-form

07-form PHP 的输 入 表单与 文件上传杨亮 Web 基本流程 请求 页 面 对应 文件 获取数据 PC Mobile HTTP 请求 html css javascript 服务器 (Apache) (IIS) html css javascript 后端脚本 (PHP) (JSP) (ASP) 数据库 (MySQL) (Oracle) (Access) 返回 页 面 返回 页 面 返回数据 客户端 服务器端

More information

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID 58 2016. 14 * LireSolr LireSolr CEDD Ajax CSpace LireSolr CEDD Abstract In order to offer better image support services it is necessary to extend the image retrieval function of our institutional repository.

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

jsp

jsp JSP Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 JSP JSP JSP JSP MVC Huihoo - Enterprise Open Source http://www.huihoo.com 2

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

附录J:Eclipse教程

附录J:Eclipse教程 附 录 J:Eclipse 教 程 By Y.Daniel Liang 该 帮 助 文 档 包 括 以 下 内 容 : Eclipse 入 门 选 择 透 视 图 创 建 项 目 创 建 Java 程 序 编 译 和 运 行 Java 程 序 从 命 令 行 运 行 Java Application 在 Eclipse 中 调 试 提 示 : 在 学 习 完 第 一 章 后 使 用 本 教 程 第

More information

Microsoft PowerPoint - 03-Form-Data-Chinese.ppt

Microsoft PowerPoint - 03-Form-Data-Chinese.ppt 2004 Marty Hall 客户请求的处理 : 表单数据 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

Java 1 Java String Date

Java 1 Java String Date JAVA SCJP Java 1 Java String Date 1Java 01 Java Java 1995 Java Java 21 Java Java 5 1-1 Java Java 1990 12 Patrick Naughton C++ C (Application Programming Interface API Library) Patrick Naughton NeXT Stealth

More information

untitled

untitled ArcGIS Server Web services Web services Application Web services Web Catalog ArcGIS Server Web services 6-2 Web services? Internet (SOAP) :, : Credit card authentication, shopping carts GIS:, locator services,

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

JSP基础编程

JSP基础编程 JSP 基础编程 报告人 : 包亮 邮箱 :rslab@lzb.ac.cn HTTP 基础 HTTP is a simple, stateless protocol. A client, such as a web browser, makes a request, the web server responds, and the transaction is done. Client 发出一个请求

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

Microsoft Word - Learn Objective-C.doc

Microsoft Word - Learn Objective-C.doc Learn Objective C http://cocoadevcentral.com/d/learn_objectivec/ Objective C Objective C Mac C Objective CC C Scott Stevenson [object method]; [object methodwithinput:input]; output = [object methodwithoutput];

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30 0 配置 Host MIB 设备 V 1.1.2 ( 简体版 ) 0 Update: 2016/1/30 前言 N-Reporter 支持 Host Resource MIB 监控主机 (Host) 状态, 本文件描述 N-Reporter 用户如何配置 Host MIB 设备 文件章节如下 : 1. 配置 Windows Server 2003... 2 1-1.Windows Server 2003

More information

untitled

untitled Work Managers 什 Work Managers? WebLogic Server 9.x 行 (thread) 理 thread pool 數量 立 execute queues 來 量 理 thread count, thread priority 參數 理 thread pool 數量? WebLogic Server 9.x 理 行 (thread) (self-tuning) 句

More information

WWW PHP

WWW PHP WWW PHP 2003 1 2 function function_name (parameter 1, parameter 2, parameter n ) statement list function_name sin, Sin, SIN parameter 1, parameter 2, parameter n 0 1 1 PHP HTML 3 function strcat ($left,

More information

Microsoft Word - Chap02.doc

Microsoft Word - Chap02.doc Servlet & JSP Servlet Web Model 2 2-2 Servlet & JSP 教學手冊 2.1 從 Servlet 到 Web 容器 要撰寫一個 Servlet 類別很簡單, 只要繼承 javax.servlet.http.httpservlet 類別, 並重新定義 (override)doget() dopost() 等對應 HTTP 請求的方法 然而到這邊為止, 還稱不上一個可以服務的

More information

epub 61-2

epub 61-2 2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +

More information