Presentation is loading. Please wait.

Presentation is loading. Please wait.

第二讲 第二讲 Servlet&JSP 基础培训 博和利初级培训 — 开发技能. Web 编程概述 -- B/S DB Server Web Server 浏览器.

Similar presentations


Presentation on theme: "第二讲 第二讲 Servlet&JSP 基础培训 博和利初级培训 — 开发技能. Web 编程概述 -- B/S DB Server Web Server 浏览器."— Presentation transcript:

1 第二讲 第二讲 Servlet&JSP 基础培训 博和利初级培训 — 开发技能

2 Web 编程概述 -- B/S DB Server Web Server 浏览器

3 浏览器与 Web 服务器的动态交互 …… …… …… 提交按钮,点此 Button 将 把 FORM 内的数据传送到 服务器 各种输入控件,接 受用户输入。 Method 属性指定了 数据传送方式,可 以是 GET 或 POST GET 方式将数据接在 URL 后面传送给服务器端程序, 如: http://url?name1=abc&name2=def http://url?name1=abc&name2=def POST 方式将数据放在 HTTP 请求的请求头后面发送。

4 Servlet 简介 Servlet 是 java 语言的 CGI 实现,与传统的 CGI 和许多其他类似 CGI 的技 术相比, Java Servlet 具有更高的效率,更容易使用,功能更强大,具有 更好的可移植性。 高效 传统的 CGI 程序以进程方式运行,而 Servlet 以线程方式运行。 方便 Servlet 提供了大量的实用工具例程,例如自动地解析和解码 HTML 表 单数据、读取和设置 HTTP 头、处理 Cookie 、跟踪会话状态等。 功能强大 可以完成很多传统的 CGI 程序很难做到的事情。 可移植性好 Servlet API 具有完善的标准。

5 Servlet 基本结构 public class SomeServlet extends HttpServlet { // 必须继承自 HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { // 使用 “request” 读取和请求有关的信息(比如 Cookies )和表单数据 // 使 用 “response” 指定 HTTP 应答状态代码和应答头(比如指定内容类型,设置 Cookie ) PrintWriter out = response.getWriter(); // 使用 "out" 把应答内容发送到浏览器 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { …… } }

6 Servlet 生命周期 服务器只创建每个 Servlet 的单一实例,每个用户请求都会引 发新的线程。 创建 Servlet 实例时,会调用 init() 方法,针对每个用户请求都 会创建一个线程,该线程调用前面创建实例的 service() 方法,由 service() 方法依据接收到的 HTTP 请求的类型,调用相应的 doXxx 方法,比如 doGet() ,最后调用 destroy() 方法销毁。

7 Servlet 工作原理 Web 服务器 doGet () 方法 doPost () 方法 HTTP GET 请求 HTTP POST 请求 响应 客户机

8 HttpServletRequest&HttpServletResponse doGet 和 doPost 方法的参数都是 HttpServletRequest 和 HttpSe rvletResponse 对象。其中 HttpServletRequest 对象代表了客户端 的请求, servlet 通过这个对象获得客户 端 的 请 求 数 据; Htt pServletResponse 对象代表了 servlet 对客户端请求的响应, sevlet 用这个对象向客户端返回数据。

9 HttpServletRequest&HttpServletResponse ● 通过 HttpServletRequest 对象获取客户请求数据: getParameter() 方法 protected void doGet(HttpServletRequest request, HttpServletResponse re sponse) { String str = request.getParameter("name"); // 参数为 FORM 内某输入控件的 名字 } ● 通过 HttpServletResponse 对象向客户端返回数据 protected void doGet(HttpServletRequest request, HttpServletResponse re sponse) { PrintWriter out = response.getWriter(); // 获取输出流对象 out.println("……"); // 通过输出流对象向客户端返回 HTML 文本 }

10 Servlet 处理用户请求简介 单个值的读取 request.getParameter(“Param1”); 多个值的读取 request.getParameterValues(); 参数名的查找 request.getParameterNames(); request.getParameterMap(); 原始表单数据的读取以及对上载文件的分析 request.getReader(); request.getInputStream(); 多字符集输入的读取 request.setCharacterEncoding(“utf-8”);

11 Servlet 设置响应报头 普通设置方法 setHeader(String headerName, String headerValue) HttpServletResponse 提供的方法 setDateHeader(String header, long milliseconds) setIntHeader(Stirng header, int headerValue) setContentType(String mimeType) setContentLength(int length)

12 会话跟踪 HTTP 是无状态协议,它没有提供内置方法来对一系列由相同用户发起的请求进行 识别。客户程序每次读取 Web 页面,都打开到 Web 服务器的单独的连接,并且服务器 也不自动维护客户的上下文信息。 因此如果 Web 应用程序如果想要为来自同一个用户的请求保留状态或数据的话(比 如购物车程序,用户会在不同网页间切换来选购商品,因此要求 Web 应用程序必须要 能记住一个用户选购的所有商品),这一般可以通过以下几个方法实现: –Cookie –URL 重写 – 隐藏表单项目

13 解决 HTTP 无状态的方法 Cookie cookie 是是一些由服务器发向浏览器并且还能由浏览器读回来的小段的 文本信息。 Web 服务器将它发送到浏览器,之后在访问同一网站或域时, 浏览器又将它原封不动的返回。一般用于记录用户名密码、根据用户的偏 好定制站点、定向广告。 cookie 的内容主要包括:名字,值,过期时间,路径和域。 -- 域可以指定某一个域比如 www.google.com 。 www.google.com -- 路径就是跟在域名后面的 URL 路径 ,比如 /news 。

14 解决 HTTP 无状态的方法 Cookie 代码样例 Cookie userCookie = new Cookie(“uesr”, “uid1234”); userCookie.setMaxAge(60*60*24*265);// 一年 response.addCookie(userCookie );

15 解决 HTTP 无状态的方法 URL 重写 利用 URL 重写技术,每个可能被用户点击的 URL 都会被动态修改, 为 URL 附加上一个标志本次会话的 ID 。采用这种方式时,客户程 序在每个 URL 的尾部添加一些额外数据,用来表示当前的会话, 服务器将这个标识符与它存储的用户相关数据关联起来。比如 : http://url/xxx?jsessionid=123

16 解决 HTTP 无状态的方法 隐藏的表单域 所谓隐藏表单项目指的是 HTML 表单上不在客户端上显示的项目,它们 在提交表单时也被送到服务器端。我们可以利用这一机制来维护会话信息。 …… 在提交表单时,要将指定的名称和值自动包括在 GET 和 POST 数据中, 隐藏域可以用来存储有关会话的信息。 缺点:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。

17 Servlet 的会话管理 HttpSession API HttpSession API 是一个基于 Cookie 和 URL 重写机制的高级会话状态跟 踪接口:如果浏览器支持 Cookie ,则使用 Cookie ;如果浏览器不支持 Cookie 或者 Cookie 功能被关闭,则自动使用 URL 改写方法。 Servlet 开发者 无需关心细节问题,也无需直接处理 Cookie 或附加到 URL 后面的信息, API 自动为 Servlet 开发者提供一个可以方便地存储会话信息的地方。 会话状态跟踪 API 在 Servlet 中使用会话信息是相当简单的,主要的操作包括:查看和当前 请求关联的会话对象,必要的时候创建新的会话对象;查看与某个会话相关 的信息;在会话对象中保存信息以及会话完成或中止时释放会话对象。

18 会话跟踪基础 常用 api 样例 HttpSession session = request.getSession(); session.setAttribute(“test”,”test”); String str = (String)session.getAttribute(“test”); session.removeAttribute(“test”);

19 JSP 概述 JSP 采用的是动态代码与静态 HTML 页面相结合的方式, JSP 的语法内 容放入在以 “ < % ” 开始,以 “ % > ” 结束的特殊标记之内。 JSP 页面文件通常以.jsp 为扩展名。虽然从代码编写来看, JSP 页面更 象普通 Web 页面而不象 Servlet ,但实际上, JSP 最终会被转换成正规的 Servlet ,静态 HTML 直接输出到和 Servlet service 方法关联的输出流。

20 JSP 文件结构... 其他 HTML 语言 <% 符合 JAVA 语法的 JAVA 语句 %> 其他 HTML 语言

21 JSP 执行过程 *.jsp*.java*.class request response jsp parser JSDK servlet servlet 分析器

22 JSP 执行过程 查找对应的 JSP 文件 是否存在 Y N 是否是修改或创建 后第一次调用 Y 调用 Jsp Parser 将其 编译成 Servlet 程序 调用 JSDK 将对应的 Servlet 程序编译成 Servlet 字节码 执行 ( 若未载入则先载入 ) 已有的对应的 Java 字节码 N Client Server

23 JSP 语法概述 JSP 原始代码中包含了 JSP 元素和 Template data 两类 – Template data 指的是 JSP 引擎不处理的部分,即标记 以 外的部分,例如代码中的 HTML 的内容等 ,这些数据会直接传送到客 户端的浏览器。 – JSP 元素则是指将由 JSP 引擎直接处理的部分,这一部分必须符合 JSP 语法,否则会导致编译错误。

24 JSP 语法概述 脚本元素( Scripting Element ) 脚本元素用来在 JSP 中嵌入 Java 代码,它允许声明变量和方法,包含任意 脚本代码和对表达式求值。这些 Java 代码将成为转换得到的 Servlet 的一部分。 指令( Directive ) JSP 指令是用作从 JSP 发送到 JSP 引擎上的一个信息。它们不向客户端产生 任何输出,只是指示 JSP 引擎需要做什么,所有的指令都在整个 JSP 文件内有 效。也就是说,一个指令影响整个 JSP 文件,并且只影响这个 JSP 文件。在标 签中指令由 标记。 动作( Action ) 动作用来引入现有的组件或者控制 JSP 引擎的行为。

25 JSP 基础 --- 注释 注释 ] --> 或 ] --> 这种注释发送到客户端,但不直接显示,在源代码中可以查到。 这种注释不发送到客户端。

26 JSP 基础 --- 声明 声明 语法 : 样例 : berhely <%! int doSomething() …… } %>

27 JSP 基础 --- 表达式 表达式 语法 : 样例 : berhely a= b= c=

28 JSP 基础 --- 脚本段 脚本段 语法 : 样例 : berhely <% for(int i = 0; i < 10; i++) {out.println(“berheley”);} %>

29 JSP 基础 --- include 指令 include 指令 include 指令的作用是向当前页中插入一个静态文件的内容。 语法: 样例: The current date and time are 当 JSP 引擎把 JSP 文件转译成 java 文件时,会把当前 JSP 和被包含的 JSP 页 面合并成一个新的 JSP 页面。当被包含的文件的内容发生变化时,则必须要 重新将 JSP 页面转译成 java 文件才能看到更新后的内容。

30 JSP 基础 --- page 指令 page 指令 page 指令用于定义 JSP 文件中的全局属性。 语法: <%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType | text/html”] [ charset=ISO-8859-1] [ isErrorPage="true | false" ] %>

31 JSP 基础 --- page 指令 language="java" 声明脚本语言的种类,目前只能用 "java" 。 import="{package.class | package.* },... “ 需要导入的 Java 包的列表,这些包作用于程序段,表达式,以及声明。下面的 包在 JSP 编译时已经导入了,所以就不需要再指明了: java.lang.*/ javax.servlet.* /javax.servlet.jsp.*/javax.servlet.http.* errorPage="relativeURL" 设置处理异常事件的 JSP 文件。如果运行时有未能处理的异常发生,就跳转到这 个 JSP 。 isErrorPage="true | false" 表明当前的 JSP 页面是否作其他 JSP 页面的 errorPage 的 URL 目标。如果被设置 为 true, 那么就可以使用隐含的变量 exception 对象。该属性默认为 “false” 。

32 JSP 基础 --- page 指令 buffer="none | 8kb | sizekb” 指定到客户的输出流中缓存的模式。如果值为 “none” ,就不出 现任何缓存,所有的输出都由一个 PrintWriter 直接写到 ServletResponse 。如果指定 Buffer 值,那么输出就用不小于这个值 的缓冲区来进行缓冲。 autoFlash="true | false” 如果值为 “true” ,当缓冲区被填满时,到客户的输出缓冲区会自 动刷新。如果值为 “false”, 就会出现运行时异常,表示缓存溢出。默 认为 “true” 。

33 JSP 基础 --- page 指令 指令作用于整个 JSP 页面,同样包括静态的包含文 件。但是 指令不能作用于动态的包含文件,比如 。 可以在一个页面中用上多个 指令,但是其中的属 性只能用一次,不过也有例外,那就是 import 属性。因为 import 属性 和 Java 中的 import 语句类似 ( 参照 Java Language , import 语句引入得 是 Java 语言中的类 ) ,所以此属性就能多用几次。 无论把 “%@ page %> 指令放在 JSP 的文件的哪个地方,它的作用 范围都是整个 JSP 页面。不过,为了 JSP 程序的可读性,以及好的编 程习惯,最好还是把它放在 JSP 文件的顶部。

34 JSP 基础 --- taglib 指令 taglib 指令 这个指令允许页面使用用户自定义的标签。它也为标签库(一个压缩文 件)命名,标签在这个库中定义。 语法: 属性: –uri=“tagLibraryURI" Uniform Resource Identifier (URI ,统一资源标识符 ) ,标识标签库描述 符。一个标签库描述符用来维一地确定该定制标签集的名字,并告诉包容器 如何处理指定的标签。 –prefix="tagPrefix" 自定义标签的前缀字符。不能用 jsp, jspx, java, javax, servlet, sun, 和 sunw 做为你的前缀,这些已被 Sun 公司声明保留。 例子:

35 JSP 基础 --- 动作 这里只介绍 和 两个动作。

36 JSP 基础 --- 动作 例子: test

37 JSP 基础 --- 动作 告诉 JSP 页面动态包含一个文件,即 JSP 页面运行时才将文件加入。 与静态插入文件的 include 指令标签不同,当 JSP 引擎把 JSP 页面转译 成 java 文件时,不把 JSP 页面中动作指令 include 所包含的文件与原 JSP 页 面合并成一个新的 JSP 页面,而是告诉 java 解释器,这个文件在 JSP 运行 时( java 文件的字节码文件被加载执行)才包含进来。如果包含的是普 通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;如 果包含的是 JSP 文件, JSP 引擎就执行这个文件然后将执行的结果发送到 客户端,由客户端负责显示。 语法 :

38 JSP 基础 --- 内置对象 内置对象  request 封装了来自客户端的请求,它是 javax.servlet.ServletRequest 类的一个实例。 来自客户的请求经由 JSP 引擎处理后,由 request 对象进行封装。  response 它是 javax.servlet.ServletReponse 类的一个实例。它封装由 JSP 产生的响应, 并被发送到客户端以响应请求。它由 JSP 引擎生成并传递给 JSP 。  pageContext javax.servlet.jsp.PageContext ,作用域 page 。  session javax.servlet.http.HttpSession ,表示为发出请求的客户建立的会话,并只是 对这个 HTTP 请求才有效。

39 JSP 基础 --- 内置对象 内置对象  application javax.servlet.SservletContext , 通过调用 getServletConfig().getContext() 方法获得,作用域整个 web 应用程序运行期,表示 JSP 正在执行的上下文。  out javax.servlet.jsp.JspWriter , 代表输出流的对象,作用域 page 。  config javax.servlet.ServletConfig , 页面的 ServletConfig 对象,作用域 page 。  page java.lang.Object ,作用域 page 。

40 JSP 基础 --- 内置对象 内置对象  exception java.lang.Throwable, 作用域 page 。它是 java.lang.Throwable 类的一 个实例。它指的是运行时的异常,也就是被调用的错误页面中的结 果,并且它只在错误页面中才有(错误页面就是在页面指令中有 isErrorPage=true 属性的页面)。


Download ppt "第二讲 第二讲 Servlet&JSP 基础培训 博和利初级培训 — 开发技能. Web 编程概述 -- B/S DB Server Web Server 浏览器."

Similar presentations


Ads by Google