Presentation is loading. Please wait.

Presentation is loading. Please wait.

LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.

Similar presentations


Presentation on theme: "LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4."— Presentation transcript:

1 LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘

2 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4

3 难点: java servlet 的编程实现 1 servlet 和 JSP 间的关系 2

4 9.1 servlet 编程原理  动态 Web 页技术  Tomcat  配置 Tomcat 环境  Java servlet 特性  Servlet 原理  Servlet 功能  Servlet 版的 Hello, World!

5 9.1 servlet 编程原理  9.1.1 动态 Web 页技术  一个 Web 应用是使用 Web 技术的任何一个应用 软件, Web 技术包括 Web 浏览器、 Web 服务器 和 Internet 协议。在 Web 应用的中间层有一个 Web 服务器,它接受客户的请求,并把静态和 动态内容组装成 Web 页面,然后递交给客户。  其中 HTML 是构成 Web 页面的最基本元素。

6 9.1 servlet 编程原理  9.1.2 Tomcat  Tomcat 是一个免费的开放源代码的 Web 应用 服务器,它提供一个支持 Servlet 和 JSP 运行的 容器。 Servlet 和 JSP 能根据实时需要,产生动 态网页内容。  Tomcat 则既能为动态网页服务,同时也能为静 态网页提供支持。尽管它没有通常的 Web 服务 器快、功能也不如 Web 服务器丰富,但是 Tomcat 逐渐为支持静态内容不断扩充。

7 9.1 servlet 编程原理  9.1.3 配置 Tomcat 环境  安装 Tomcat (本书以 Tomcat5.5 为例),须预先安装 JDK1.5 ,相关软件读者可以到官方网站上下载。然后 须设置环境变量:  (1) 在 Windows 桌面上,选择 “ 我的电脑 ”->“ 属性 ”->“ 高级 ”->“ 环境变量 ”->“ 系统变量 ” ;  (2) 新建 TOMCAT_HOME 属性,值设为 {Tomcat 安装目 录 } 。  (3) 新建 JAVA_HOME 属性,值设为 {JDK 安装目录 } 。  (4) 新建 CLASSPATH 属性,值设为.; %JAVA_HOME%\lib\dt.jar; %JAVA_HOME%\lib\tools.jar;  (5) 找到 Path 属性,把 %JAVA_HOME%\bin 目录添加到 path 值的末尾。

8 9.1 servlet 编程原理  9.1.4 Java Servlet 特性  Servlet 是使用 Java Servlet 应用程序设计接口 ( API )及相关类和方法的 Java 程序。  除了 Java Servlet API , Servlet 还可以使用用 以扩展和添加到 API 的 Java 类软件包。  Servlet 在启用 Java 的 Web 服务器上或应用 服务器上运行并扩展了该服务器的能力。  Java Servlet API 定义了一个 servlet 和 Java 使 能的服务器之间的一个标准接口,这使得 Servlets 具有跨服务器平台的特性。

9 9.1 servlet 编程原理  9.1.5 Servlet 原理  Servlet 通过创建一个框架来扩展服务器的能力 ,以提供在 Web 上进行请求和响应服务。  当客户机发送请求至服务器时,服务器可以将 请求信息发送给 Servlet ,并让 Servlet 建立起 服务器返回给客户机的响应。  当启动 Web 服务器或客户机第一次请求服务 时,可以自动装入 Servlet 。  装入后, Servlet 继续运行直到其它客户机发出 请求。

10 9.1 servlet 编程原理  9.1.6 Servlet 功能  (1) 创建并返回一个包含基于客户请求的动态内容的 HTML 页面  (2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面。  (3) 与其它服务器资源进行通信。  (4) 用多个客户机处理连接,接收多个客户机的输入,并将 结果广播到多个客户机上。例如, Servlet 可以是多参与者 的游戏服务器  (5) 当允许在单连接方式下传送数据的情况下,在浏览器上 打开服务器至 applet 的新连接,并将该连接保持在打开状态 。  (6) 对特殊的处理采用 MIME 类型过滤数据。  (7) 将定制的处理提供给所有服务器的标准例行程序。例如 , Servlet 可以修改如何认证用户。

11 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  (4) 在 WEB-INF 目录下创建 web.xml 文件;  编辑 web.xml 内容如下:   <!DOCTYPE web-app  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd">   myServlet1  hello.HelloWorldServlet   myServlet1  /HelloWorld.do   上述配置虽然看起来繁琐,但实际需要程序员自定义的,只是上文加粗的几个字符串。含义是 通过 myServlet1 将 Web 访问的 URL 后缀( /HelloWorld.do )和类路径 hello.HelloWorldServlet 联 系起来。

12 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  (5) 在 WEB-INF 目录下创建 classes 目录;  (6) 在 classes 目录下创建 hello (程序员自定义 的 java 包名)目录;  (7) 在 hello 目录下创建 HelloWorldServlet.java 文 件; 编辑 HelloWorldServlet.java 内容如下:

13 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  public class HelloWorldServlet extends HttpServlet {  public void doPost(HttpServletRequest request, HttpServletResponse response)  throws IOException  {  response.setContentType("text/html");  // 获取 response 输出流  PrintWriter out = response.getWriter();  // 向输出流写入文本数据  out.println(" Servlet - HelloWorld" +  " Hello, World! ");  // 输出,清空缓存  out.flush();  }  public void doGet(HttpServletRequest request, HttpServletResponse response)  throws IOException  {  doPost(request, response);  }

14 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  (8) 编译 HelloWorldServlet.java ,在 hello 目录下 生成 HelloWorldServlet.class 文件。  完成上述步骤后,启动 tomcat 服务(设服务端 口为 8080 );  并在浏览器地址栏中输入: http://localhost:8080/myapp/HelloWorld.do 即 可得到输出页面。

15 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  (1) 浏览器用户发出 http://localhost:8080/myapp/HelloWorld.do 请 求。  (2) localhost 主机,即本地的 tomcat 得到请求, 定位到 {tomcat 安装目录 }/webapps/myapp 目录 。  (3) 根据 /HelloWorld.do 请求,并结合 web.xml 文 件,得到 hello.HelloWorldServlet 字符串, 即得 到 servlet 服务类的路径 :WEB- INF/classes/hello/ HelloWorldServlet.class 。

16 9.1 servlet 编程原理  9.1.7 Servlet 版的 “Hello, World! ”  (4) 由于请求是 get 方式提交,因此在 HelloWorldServlet 程序中,先进 doGet 方法;再进 doPost 方法。  (5) doPost 方法生成 HTML 网页,返回给用户浏览器。 Servlet 可以利用 HttpServletResponse 类的 setContentType( ) 方法来设定内容类型,我们要显示 为 HTML 网页类型,因此,内容类型设为 "text/html" , 这是 HTML 网页的标准 MIME 类型值。之后, Servlet 用 getWriter( ) 方法取得 PrintWriter 类型的 out 对象,它 与 PrintSteam 类似,但是它能对 Java 的 Unicode 字 符进行编码转换。最后,再利用 out 对象把 "Hello World" 的字符串显示在网页上。

17 9.2 JSP 编程原理  JSP 简介  JSP 版 Hello World!  JSP 内置对象  Java Bean  Java Bean 案例

18 9.2 JSP 编程原理  9.2.1 JSP 简介  JSP(Java Server Pages) 是由 Sun Microsystems 公司倡导、许多公司参与一起建 立的一种动态网页技术标准。  JSP 技术有点类似 ASP 技术,它是在传统的网 页 HTML 文件 (*.htm,*.html) 中插入 Java 程序段 (Scriptlet) 和 JSP 标记 (tag) ,从而形成 JSP 文件 (*.jsp) 。  用 JSP 开发的 Web 应用是跨平台的,既能在 Linux 下运行,也能在其他操作系统上运行。

19 9.2 JSP 编程原理  9.2.2 JSP 版的 Hello World!   <%  // 结果就是在屏幕上打印两行 Hello World!  for ( int i=0; i<2; i++ )  {  %>  Hello, World!  <%  }  %> 

20 9.2 JSP 编程原理  9.2.2 JSP 版的 Hello World!  (1) 案例中的 page 指令说明如下:  ① language="java" 声明脚本语言的种类,目 前只能用 "java" 。  ② import="{package.class | package.* },..." 需 要导入的 Java 包的列表,这些包作用于程序段 ,表达式,以及声明。但如下的包在 JSP 编译 时已经导入了,所以就不需要再指明了: java.lang.*; javax.servlet.*; javax.servlet.jsp.*; javax.servlet.http.*;

21 9.2 JSP 编程原理  9.2.2 JSP 版的 Hello World!  (2) 动作语法。主要包括 , , , , 和 。本案例暂时没有涉及。

22 9.2 JSP 编程原理  9.2.2 JSP 版的 Hello World!  (3) 脚本语法。分为:  ① HTML 注释: ,这种注释发送到 客户端,但不直接显示,在源代码中可以查看到。  ②隐藏注释: ,这种注释不发送 到客户端。  ③声明: ,例如 。  ④表达式: ,例如 表示输 出 i 的值到浏览器页面上。  ⑤脚本段: ,例如案例中的

23 9.2 JSP 编程原理  9.2.3 JSP 内置对象  (1)request 对象:客户端的请求信息被封装在 request 对象中,通 过它才能了解到客户的需求,然后做出响应。它是 HttpServletRequest 类的实例。  (2)response 对象:包含了响应客户请求的有关信息,但在 JSP 中 很少直接用到它。它是 HttpServletResponse 类的实例。  (3)session 对象: session 对象指的是客户端与服务器的一次会话 ,从客户连到服务器的一个 WebApplication 开始,直到客户端与 服务器断开连接为止。它是 HttpSession 类的实例。  (4)out 对象:是 JspWriter 类的实例, 是向客户端输出内容常用的对 象。  (5)page 对象:就是指向当前 JSP 页面本身,有点象类中的 this 指 针,它是 java.lang.Object 类的实例

24 9.2 JSP 编程原理  9.2.3 JSP 内置对象  (6)application 对象:实现了用户间数据的共享,可存放全局变量 。它开始于服务器的启动,直到服务器的关闭,在此期间,此对 象将一直存在;在任何地方对此对象属性的操作,都将影响到其 他用户对此的访问。服务器的启动和关闭决定了 application 对象 的生命。它是 ServletContext 类的实例。  (7)exception 对象:是一个例外对象,当一个页面在运行过程中发 生了例外,就产生这个对象。如果一个 JSP 页面要应用此对象, 就必须把 page 指令中的 isErrorPage 设为 true ,否则无法编译。实 际上是 java.lang.Throwable 的对象。  (8)pageContext 对象:提供了对 JSP 页面内所有的对象及名字空间 的访问,也就是说他可以访问到本页所在的 SESSION ,也可以取 本页面所在的 application 的某一属性值,他相当于页面中所有功 能的集大成者,它的本类名也叫 pageContext 。  (9)config 对象:是在一个 Servlet 初始化时, JSP 引擎向它传递信 息用的,此信息包括 Servlet 初始化时所要用到的参数(通过属性 名和属性值构成)以及服务器的有关信息 ( 通过传递一个 ServletContext 对象 ) 。

25 9.2 JSP 编程原理  9.2.4 Java Bean 概述  一个网站系统一般可分为 3 层:数据层、商业层和应用 层。如果 JSP 的脚本语言将应用表现层和商务逻辑层混 在一起,将造成修改不方便,并且代码也不能重复利 用;采用 Java 组件技术 Java Bean 就可以解决这些问题 ,并使系统更易维护,也使网站的开发人员分工更为 明确。  JavaBean 是一种 JAVA 语言写成的可重用组件。为写 成 JavaBean ,类必须是具体的和公共的,并且具有无 参数的构造器。 JavaBeans 通过提供符合一致性设计 模式的公共方法将内部域暴露称为属性,并且所有属 性都有 set 和 get 方法。  JSP 和 JavaBean 可以联合使用。

26 9.2 JSP 编程原理  9.2.5 Java Bean 案例  实现学号、姓名的输入程序,如果学号存在返 回错误提示页面;否则保存数据:若失败返回 保存失败提示页面,否则返回成功页面。  要求业务逻辑与页面显示分开。

27 9.2 JSP 编程原理  9.2.5 Java Bean 案例: student  package student;  public class Student  {  private String sno;  private String sname;  String getSno() {  return sno;  }  void setSno(String value)  {  sno = value;  }  String getSname()  {  return sno;  }  void setSname(String value)  {  sname = value;  }  int save()  {  int error = 0;  // 若学号存在 error=1;  // 否则若保存失败 error=2; ...  return flag;  }

28 9.2 JSP 编程原理  9.2.5 Java Bean 案例:建立 jsp 文件  学生信息   学号:   姓名:  <%  int error = handle.flag;  if (flag==1)  {  %>   <%  }  else if (flag==2)  {  %> 

29 9.2 JSP 编程原理  9.2.5 Java Bean 案例 :useBean  <jsp:useBean id="beanInstanceName" scope="page | request | session | application" {class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | }" type="package.class" { /> | > other elements }

30 9.2 JSP 编程原理  9.2.5 Java Bean 案例 :useBean  ① id=“beanInstanceName” :在所定义的范围中确认 Bean 的变量,使之 能在后面的程序中使用此变量名来分辨不同的 Bean ,这个变量名对大小 写敏感。  ② scope=“page | request | session | application” : Bean 存在的范围以及 id 变量名的有效范围。  ③ class=“package.class” : 使用 new 关键字以及 class 构造器从一个 class 中实例化一个 bean 。这个 class 不能是抽象的,必须有一个公用的,没有 参数的构造器。这个 package 的名字区别大小写。  ④ type=“package.class” :如果这个 Bean 已经在指定的范围中存在,那 么赋予这个 Bean 一个的数据开库类型 。如果使用 type 属性的同时没有使 用 class 或 beanName , Bean 将不会被实例化。注意 package 和 class 的名 称区分大小写。  ⑤ type="package.class" :如果这个 Bean 已经在指定的范围中存在,那 么赋予这个 Bean 一个的数据开库类型 。如果使用 type 属性的同时没有使 用 class 或 beanName , Bean 将不会被实例化。注意 package 和 class 的名 称区分大小写。 beanName 可以是 package 和 class ,也可以是表达式,它 的值会传给 Beans.instantiate 方法。 type 的值可以和 Bean 相同,也可以是 它的基类,或者是它所实现的接口。

31 9.2 JSP 编程原理  9.2.5 Java Bean 案例 :jsp:setProperty  <jsp:setProperty  name="beanInstanceName"  {  property= "*" ? |  property="propertyName" [ param="parameterName" ] ? |  property="propertyName" value="{string | }"  }  />

32 9.2 JSP 编程原理  9.2.5 Java Bean 案例 :jsp:setProperty  ① name="beanInstanceName" :表示已经在 “ ” 中 创建的 Bean 实例的名字。  ② property="*" :获取用户在 form 提交时输入的,即 JSP 页面中 request 对象的所有属性值,用于匹配 Bean 中的属性。  ③ property="propertyName" [ param="parameterName" ] :用一 个参数值来指定 Bean 中的一个属性值,一般情况下是从 request 对 象中获得的。其中 property 指定 Bean 的属性名, param 指定 request 中的参数名。  ④ property="propertyName" value="{string | }" :使用指定的值来设定 Bean 属性。  的含义将用户 在 form 上填写的,并通过 request 对象传递过来的学号、姓名传递 到 handle 对象的 sno,sname 属性中。

33 9.2 JSP 编程原理  9.2.5 Java Bean 案例 : jsp:getProperty   ① name="beanInstanceName" : bean 的名字,由 指定。来分辨不同的 Bean ,这个变 量名对大小写敏感。  ② property="propertyName" :所指定的 Bean 的属性 名.  的含义是在页面输出对象 handle 的 sno 属性值。

34 9.3 servlet 和 JSP  JSP 原理  JSP 与 servlet

35 9.3 servlet 和 JSP  9.3.1 JSP 原理  (1) 客户端发出 Request( 请求 ) ;  (2) JSP Container 将 JSP 转译成 Servlet 的源代 码;  (3) 将产生的 Servlet 的源代码经过编译后,并 加载到内存执行;  (4) 把结果 Response ( 响应 ) 至客户端

36 9.3 servlet 和 JSP  9.3.2 JSP 与 servlet  JSP 的脚本实际上与 Java Servlet 中 HttpServlet.doPost 及 HttpServlet.doGet 方法的 实现部分相对应。  doPost 和 doGet 的入口参数均为 HttpServletRequest 类和 HttpServletResponse 类的两个对象。  而 JSP 获取该两个对象并非由入口参数获得, 而是通过内置对象。

37 LOGO


Download ppt "LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4."

Similar presentations


Ads by Google