第十四讲 JSP ( Java Server Page ) JSP 基础 JSP 语法 示例 JSP 和 ASP 的比较 Servlet 和 JSP 的比较
利用 servlets ,可以方便地: 获取 显式数据( form data ) 获取隐藏数据( HTTP request headers ) 设置 状态代码 (HTTP status codes) 和响应头 (HTTP response headers) 使用 cookies 和 session 在不同的 servlet 之间共享数据 记住不同请求之间的数据 … 但是,利用 servlet 做以下事情却很痛苦: 使用 println 语句生成 HTML 文档 维护所生产的 HTML 文档 JSP ( Java Server Page ) —— 基础
JSP ( Java Server Page ) —— 基础 JSP (Java Server Pages) 是服务器端的脚本语言,是一种在 HTTP 页面中加 入 Java 语言而生成动态页面的技术:加入了新的标签( , … )。 JSP 是以 Java 和 Servlet 为基础开发而成的动态网页生成技术,它的底层实 现是 Java Servlet 。 JSP 页面由 HTML 代码和嵌入其中的 Java 代码所组成。服务器在页面被客 户端所请求以后对这些 Java 代码进行处理,然后将生成的 HTML 页面返回 给客户端的浏览器。 特点:面向对象、跨平台,和 Servlet 一样稳定,可以使用 Servlet 提供的 API ,克服了 Servlet 的缺点。 应用:一般和 JavaBeans 结合使用,从而将界面表现和业务逻辑分离。
JSP ( Java Server Page ) —— 基础 JSP 的地位
JSP ( Java Server Page ) —— 基础 JSP 的执行过程
JSP ( Java Server Page ) —— 基础
JSP ( Java Server Page ) —— 基础 JSP 文件结构
第一个 JSP 网页: simplejsp.jsp Hello, World JSP ( Java Server Page ) —— 基础 可以在 webapps/work 目标下看到中间结果。
JSP ( Java Server Page ) ——JSP 语法 JSP 的元素分为以下几类: HTML 的元素 注释:输出注释、隐藏注释 脚本元素:声明、表达式、脚本片断 指令: page 指令、 taglib 指令、 include 指令 动作: 、 、 、 …
JSP ( Java Server Page ) ——JSP 语法:注释 输出注释 语法 --> 其实就是 HTML 的注释,网页代码中会显 示出来,在里面还可以嵌入其他 JSP 元素。 例子 -->
隐藏注释( JSP 注释) 语法 完全被 JSP 编译器忽略,真正的注释,在客 户端不会显示出来。 例子 JSP ( Java Server Page ) ——JSP 语法:注释
声明 语法 声明变量和类,不产生任何输出,可以同 时初始化,以分号结尾。 例子 JSP ( Java Server Page ) ——JSP 语法:脚本元素
表达式 语法 将 Expression 的值强制转换成 String 类型, 然后输出到网页中。不能转换则报错。 例子 world! JSP ( Java Server Page ) ——JSP 语法:脚本元素
JSP ( Java Server Page ) ——JSP 语法:脚本元素 脚本片断 语法 Java 程序片断,也可以声明变量,但必须赋初值。 例子 <% for(int i=1; i<=3; i++){ out.print(“hello, world!”); } %>
JSP ( Java Server Page ) ——JSP 语法:指令 JSP 指令( Directives ) 代表向 JSP 容器传递信 息,它不会产生输出,常用的 JSP 指令包括: page 指令 taglib 指令 include 指令
JSP ( Java Server Page ) ——JSP 语法:指令 page 指令 语法 定义 JSP 文件的全局属性,主要的属性包括: language 、 import 、 buffer 、 isThreadSafe 、 isErrorPage 、 session 、 autoflush 、 errorPage 、 contentType 等 其位置可以在页面的任何位置,但推荐放在页首。 例子
JSP ( Java Server Page ) ——JSP 语法:指令 taglib 指令 语法 声明此 JSP 文件使用了自定义的标签,同时引用标签 库,也指定了他们的标签的前缀。 例子 < taglib uri = " prefix = "super" %>
include 指令 语法 包含并解析静态文件,它可以是 html 文件、 jsp 文件、文本文件,或者只是一段 Java 代码。 在翻译 JSP 时将指定的的文件插入当前页面。 例子 JSP ( Java Server Page ) ——JSP 语法:指令
JSP ( Java Server Page ) ——JSP 语法:动作 JSP 动作( Actions )是 JSP 中的具体操作,和脚本片断不 同的是, JSP 动作使用规定的标签和用法,将具体的编程细节 封装起来了。有些 JSP 功能既可以用脚本片断实现,也可以用 JSP 动作来实现。常用的 JSP 动作包括:
JSP ( Java Server Page ) ——JSP 语法:动作
JSP ( Java Server Page ) ——JSP 语法:动作 bean
JSP ( Java Server Page ) ——JSP 语法:动作
JSP ( Java Server Page ) ——JSP 语法:动作
JSP ( Java Server Page ) ——JSP 语法:动作
五、 该动作将静态、动态 Web 资源包含到当前 JSP 页面中来。对静态资源(如 HTML 和文本文件),该文件的内容被直接包括在 JSP 中;若是 Servlet 和 JSP 等动态资源,被包括的资源在处理完请求后将结果返回。在该动作之 后,容器继续执行 JSP 剩下的内容。 include 指令和 include 动作有所不同, 前者是在 JSP 被转换成 Servlet 时一起被转换,而后者则是在生成的 Servlet 中调用(或插入处理结果,或插入静态资源本身)。 语法 或者 { } JSP ( Java Server Page ) ——JSP 语法:动作
JSP ( Java Server Page ) ——JSP 语法:动作
JSP ( Java Server Page ) ——JSP 语法
JSP ( Java Server Page ) ——JSP 语法:缺省引入的包 下面这些包在 JSP 编译时已经导入了,所以在 JSP 文件 中无须再用 page 指令引入: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
JSP ( Java Server Page ) ——JSP 语法:内置对象
JSP ( Java Server Page ) ——JSP 语法:内置对象
JSP ( Java Server Page ) ——JSP 语法:内置对象
JSP ( Java Server Page ) ——JSP 语法 JSP 和 Servlet 的对应关系
JSP ( Java Server Page ) ——JSP 语法 Original JSP A Random Number Possible resulting servlet code public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println(" A Random Number "); out.println(Math.random());... }
Original JSP Possible resulting servlet code public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println(foo()); bar();... } JSP ( Java Server Page ) ——JSP 语法
Original JSP Some Heading <%! private String randomHeading() { return(" " + Math.random() + " "); } %> Possible resulting servlet code public class xxxx implements HttpJspPage { private String randomHeading() { return(" " + Math.random() + " "); } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println(" Some Heading "); out.println(randomHeading());... }
JSP ( Java Server Page ) ——JSP 示例 include 指令的使用 动作的使用(下节课) JSP 和 Servlet 的调用
相似: 都是运行于服务器端的脚本语言,两者都是动态网页生成技术。 这两项技术都使用 HTML 来决定网页的版面,都是在 HTML 代码中混合某种 程序代码,由语言引擎解释执行程序代码。 HTML 代码主要负责描述信息的 显示样式,而程序代码则用来描述处理逻辑。 不同: JSP 是由 Sun 推出的一项技术,是基于 Java Servlet 以及整个 Java 体系的 Web 开发 技术,利用这一技术可以建立先进、安全和跨平台的动态网站。 ASP 是 MS 公 司推出的技术,只能在 MS 的平台上运行,无法实现跨平台,也无安全性保障。 ASP 下的编程语言是 VBScript 之类的脚本语言,而 JSP 使用的是 Java 。 ASP 与 JSP 还有一个更为本质的区别:两种语言引擎用完全不同的方式处理 页面中嵌入的程序代码。在 ASP 下, VBScript 代码被 ASP 引擎解释执行;在 JSP 下,代码被编译成 Servlet 并由 Java 虚拟机执行,这种编译操作仅在对 JSP 页面的第一次请求时发生。 JSP ( Java Server Page ) ——JSP 和 ASP 的比较
JSP ( Java Server Page ) ——JSP 和 ASP 的比较
相似: 两者都是基于 Java 的技术,所以都继承了 Java 的所有特性(跨平台、多线 程、 OO ),都可以使用 Java 强大的 API 。 两者工作方式相似: JSP 代码先被 JSP 容器转换为 Servlet 代码再编译为类。 两者在 J2EE 体系结构中的工作层次相同,都负责与客户端的连接。 不同: Servlet 是一些运行于 Web 服务器端的 Java 小程序;而 JSP 是脚本,编写起来 更简单容易。 Servlet 主要用于从客户端接收请求信息,而 JSP 主要负责将服务器端信息 传送到客户端。 使用 JSP 的真正意义在于:可以将界面设计和业务逻辑设计分离。 使用 JSP 不需要进行太多的环境设置:环境变量、编译、特殊部署, … JSP ( Java Server Page ) ——Servlet 和 JSP 的比较
下一讲: Java Beans 基本概念和特点 Bean Develop Kit ( BDK ) 编写自己的 JavaBeans 与 JSP 一起使用: JDBCBean