400 likes | 563 Views
第十四讲 JSP ( Java Server Page ). JSP 基础 JSP 语法 示例 JSP 和 ASP 的比较 Servlet 和 JSP 的比较. JSP ( Java Server Page ) —— 基础. 利用 servlets ,可以方便地: 获取 显式数据( form data ) 获取隐藏数据( HTTP request headers ) 设置 状态代码 (HTTP status codes) 和响应头 (HTTP response headers) 使用 cookies 和 session
E N D
第十四讲 JSP(Java Server Page) • JSP基础 • JSP语法 • 示例 • JSP和ASP的比较 • Servlet和JSP的比较
JSP(Java Server Page) ——基础 • 利用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 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文件结构
JSP(Java Server Page) ——基础 • 第一个JSP网页:simplejsp.jsp <%@ page language="Java" %> <%@ page info="a hello world example" %> <html> <head><title>Hello, World</title></head> <body> <h1><%out.println(" Hello, World! ");%></h1> </body> </html> 可以在webapps/work目标下看到中间结果。
JSP(Java Server Page) ——JSP语法 JSP的元素分为以下几类: • HTML的元素 • 注释:输出注释、隐藏注释 • 脚本元素:声明、表达式、脚本片断 • 指令:page指令、taglib指令、include指令 • 动作:<jsp:useBean>、<jsp:forward>、<jsp:include>、…
JSP(Java Server Page) ——JSP语法:注释 输出注释 • 语法 <! -- Comments --> <! -- Comments…<%= expression %> --> 其实就是HTML的注释,网页代码中会显示出来,在里面还可以嵌入其他JSP元素。 • 例子 <! -- Now: <%=(new java.util.Date()) %> -->
JSP(Java Server Page) ——JSP语法:注释 隐藏注释(JSP注释) • 语法 <%-- Comments --%> <% // Comments %> <% /* Comments */%> 完全被JSP编译器忽略,真正的注释,在客户端不会显示出来。 • 例子 <%-- begin the class --%>
JSP(Java Server Page) ——JSP语法:脚本元素 声明 • 语法 <%! Declaration(s) %> 声明变量和类,不产生任何输出,可以同时初始化,以分号结尾。 • 例子 <%! int a, b, c; %> <%! int a, b, c; String myword=“hello”; %>
JSP(Java Server Page) ——JSP语法:脚本元素 表达式 • 语法 <%= Expression %> 将Expression的值强制转换成String类型,然后输出到网页中。不能转换则报错。 • 例子 <%= myword %> world! <%= new java.util.Date() %> <%= Math.random() %>
JSP(Java Server Page) ——JSP语法:脚本元素 脚本片断 • 语法 <% Scriptlets %> 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指令 • 语法 <%@ page attr = “value” %> 定义JSP文件的全局属性,主要的属性包括:language、import、buffer、isThreadSafe、isErrorPage、session、autoflush、errorPage、contentType等 其位置可以在页面的任何位置,但推荐放在页首。 • 例子 <%@ page contentType = “text/html;charset=gb2312” %>
JSP(Java Server Page) ——JSP语法:指令 taglib指令 • 语法 <%@ tagliburi = "TagLibrary" prefix = "mypfx" %> 声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。 • 例子 < %@ taglib uri = "http://www.mycorp.com/supertag" prefix = "super" %>
JSP(Java Server Page) ——JSP语法:指令 include指令 • 语法 <%@ includefile = “filename” %> 包含并解析静态文件,它可以是html文件、jsp文件、文本文件,或者只是一段Java代码。 在翻译JSP时将指定的的文件插入当前页面。 • 例子 < %@ include file = “header.htm” %>
JSP(Java Server Page) ——JSP语法:动作 • JSP动作(Actions)是JSP中的具体操作,和脚本片断不同的是,JSP动作使用规定的标签和用法,将具体的编程细节封装起来了。有些JSP功能既可以用脚本片断实现,也可以用JSP动作来实现。常用的JSP动作包括: • <jsp:useBean> • <jsp:getProperty> • <jsp:setProperty> • <jsp:forward> • <jsp:include> • <jsp:param>
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语法:动作
JSP(Java Server Page) ——JSP语法:动作 五、<jsp:include> • 该动作将静态、动态Web资源包含到当前JSP页面中来。对静态资源(如HTML和文本文件),该文件的内容被直接包括在JSP中;若是Servlet和JSP等动态资源,被包括的资源在处理完请求后将结果返回。在该动作之后,容器继续执行JSP剩下的内容。 include指令和include动作有所不同,前者是在JSP被转换成Servlet时一起被转换,而后者则是在生成的Servlet中调用(或插入处理结果,或插入静态资源本身)。 • 语法 <jsp:include page=“URL” flush=“true” /> 或者 <jsp:include page=“URL” flush=“true” > {<jsp:param…/>} </jsp:include>
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.* • <%@page import = “java.lang.*” %>
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 <H1>A Random Number</H1> <%= Math.random() %> • 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("<H1>A Random Number</H1>"); out.println(Math.random()); ... }
JSP(Java Server Page) ——JSP语法 • Original JSP <%= foo() %> <% bar(); %> • 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(); ... }
Original JSP <H1>Some Heading</H1> <%! private String randomHeading() { return("<H2>" + Math.random() + "</H2>"); } %> <%= randomHeading() %> • Possible resulting servlet code public class xxxx implements HttpJspPage { private String randomHeading() { return("<H2>" + Math.random() + "</H2>"); } 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("<H1>Some Heading</H1>"); out.println(randomHeading()); ... }
JSP(Java Server Page) ——JSP示例 • include指令的使用 • <jsp:useBean>动作的使用(下节课) • JSP和Servlet的调用
JSP(Java Server Page) ——JSP和ASP的比较 相似: • 都是运行于服务器端的脚本语言,两者都是动态网页生成技术。 • 这两项技术都使用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) ——Servlet和JSP的比较 相似: • 两者都是基于Java的技术,所以都继承了Java的所有特性(跨平台、多线程、OO ),都可以使用Java强大的API。 • 两者工作方式相似:JSP代码先被JSP容器转换为Servlet代码再编译为类。 • 两者在J2EE体系结构中的工作层次相同,都负责与客户端的连接。 不同: • Servlet是一些运行于Web服务器端的Java小程序;而JSP是脚本,编写起来更简单容易。 • Servlet主要用于从客户端接收请求信息,而JSP主要负责将服务器端信息传送到客户端。 • 使用JSP的真正意义在于:可以将界面设计和业务逻辑设计分离。 • 使用JSP不需要进行太多的环境设置:环境变量、编译、特殊部署,…
下一讲:Java Beans • 基本概念和特点 • Bean Develop Kit(BDK) • 编写自己的JavaBeans • 与JSP一起使用:JDBCBean