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

Slides:



Advertisements
Similar presentations
第 4 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 内置对象.
Advertisements

第 4 章 JSP 内置对象 本章主要内容:  内置对象的概念  内置对象的作用域和生命期  内置对象的作用和关系  内置对象的使用方法.
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
第六讲 JSP 指令. 动态网站建设与规划 主讲:徐洪章 QQ:
第二章 JSP 编译指令. 课程目标  JSP 编译指令  JSP 页面的表达式  JSP 页面的注释  JSP 页面的声明  Scriptlets.
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
第五章 JSP 的内置对象 西南科技大学网络教育系列课程 动态网页设计( JSP ). 动态网页设计( JSP ) 内置对象概述 特点 request :得到客户端的信息。 (HttpServletRequest) session :保存单个用户访问时的一些信息。
IBM WX-ETP © 2009 IBM Corporation review  JSP 1.What 2.Where 3.How 4. 与 的区别 5. 的作用是什么 6. 的作用是什么 1JSP
第十四讲 JSP ( Java Server Page )  JSP 基础  JSP 语法  示例  JSP 和 ASP 的比较  Servlet 和 JSP 的比较.
Java Web 开发 授课人:张鸽. 第三讲 JSP 内置对象  JSP 有以下九种内置对象,包括:  ·request ,请求对象  ·response ,响应对象  ·pageContext ,页面上下文对象  ·session ,会话对象  ·application ,应用程序对象.
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
JSP 基础编程( 1 ). HTTP 基础 HTTP 是简单的无状态的协议。 通常:一个客户开一个浏览器,上一个网站, 在该站上进行一些活动,向服务端发出请 求,服务端根据客户请求回应。
JSP页面的组成 JSP页面包括JSP元素、注释及HTML元素。 JSP指令:用于将消息传送到JSP引擎。
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
第15章 Java Web编程 Web编程是Java语言尤其擅长的一个方面。在Java语言整个体系结构中,提供了Servlet和JSP技术支持Web开发。Servlet和JSP是相辅相成的两种技术,具有相同的基本原理,又保持了各自的灵活性。本章包括以下知识点。 Sevlet技术的主要内容(包括运行、生命周期、请求和应答、Cookie、会话)
张孝祥IT课堂 -深入体验Java Web开发内幕
MVC Servlet与MVC设计模式.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
在PHP和MYSQL中实现完美的中文显示
移动开发的灵便迭代之道 黄凯.
Hello World 體驗實作第一個JSP程式.
第9章 过滤器和监听器技术 过滤器(Filter)和监听器(Listener)是两种特殊的Servlet技术。过滤器可以对用户的请求信息和响应信息进行过滤,常被用于权限检查和参数编码统一设置等。监听器可以用来对Web应用进行监听和控制的,增强Web应用的事件处理能力。 本章主要介绍过滤器和监听器的编程接口、基本结构、信息配置、部署和运行,最后通过案例说明过滤器和监听器的典型应用。
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
Hadoop I/O By ShiChaojie.
专题4:JSP脚本和指令.
Java Applet 介绍.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
SVN的基本概念 柳峰
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
第二讲 搭建Java Web开发环境 主讲人:孙娜
SOA – Experiment 3: Web Services Composition Challenge
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
任务1-3 使用Dreamweaver创建ASP网页
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
编程作业3:网页正文抽取 (10分).
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
JSP程序设计 第9章 Servlet简介.
第十二章 过滤器.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
Web安全基础教程
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
郑 昀 应用开发事业部 神州泰岳 SIP多方会话消息 之实例讲解 郑 昀 应用开发事业部 神州泰岳
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第4章 JSP动态网页设计基础 教学目标 教学重点 教学过程 2019年10月21日.
Presentation transcript:

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

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

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

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

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 { …… } }

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

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

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

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 文本 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ] [ isErrorPage="true | false" ] %>

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” 。

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

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

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

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

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

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

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 请求才有效。

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 。

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