350 likes | 533 Views
西南科技大学网络教育系列课程 动态网页设计( JSP ). 第四章 JSP 语法 ( 续 ). 内容提要. 理解服务器动作指令行 所有 HTML 文件可以在资源管理器中双击执行. 介绍 JSP 页面的结构. JSP 的编译指令、操作指令和代码. 但是 JSP 文件必须先放到 Web 服务器中,然后通过 HTTP 的方式访问。因为文件内所有 <%%> 内代码是被 Web 服务器解释执行的。. 理解服务器端执行. <%@ page language="java" contentType="text/html;charset=GBK"%>
E N D
西南科技大学网络教育系列课程 动态网页设计(JSP) 第四章 JSP语法 (续)
内容提要 • 理解服务器动作指令行 • 所有HTML文件可以在资源管理器中双击执行 • 介绍JSP页面的结构 • JSP的编译指令、操作指令和代码 • 但是JSP文件必须先放到Web服务器中,然后通过HTTP的方式访问。因为文件内所有<%%>内代码是被Web服务器解释执行的。
理解服务器端执行 <%@ page language="java" contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% Date dnow = new Date(); int dhours = dnow.getHours(); int dminutes = dnow.getMinutes(); int dseconds = dnow.getSeconds(); out.print("服务器时间:" + dhours + ":" + dminutes + ":" + dseconds); %> <SCRIPT LANGUAGE="JavaScript"> var dnow = new Date(); dhours = dnow.getHours(); dminutes = dnow.getMinutes(); dseconds = dnow.getSeconds(); document.write("<br>浏览器时间:" + dhours + ":" + dminutes + ":" + dseconds); </SCRIPT>
Java程序片 在Jsp中,在“<%”和 “%>”之间书写的程序代码为Java程序片 在程序片中声明的变量只在页面有效,是局部变量,不能共享。 但是,在“<%!”和 “%>”之间声明的变量可以在不同的客户间共享,有效范围是整个Jsp页面,声明周期是服务器关闭后变量才会被释放。 JSP表达式用来把Java数据直接插入到输出。其语法如下: <%= Java Expression %> 计算Java表达式得到的结果被转换成字符串,然后插入到页面。计算在运行时进行(页面被请求时),因此可以访问和请求有关的全部信息。例如,下面的代码显示页面被请求的日期/时间: Current time: <%= new java.util.Date() %>
Java程序片 在表达式中JSP应遵守以下规则: JSP表达式的内容必须是一个“完整”的Java表达式。 JSP表达式的内容必须是一个“单独的”Java表达式。 一定不能以分号结束一个Java表达式(与JSP声明不同)。 实例:simpleCounterApp1.jsp
注释 • JSP 注释语法格式如下: • <!-- comment [ <%= expression %> ] --> 或 • <!-- 注释 [<%= 表达式 %> ] --> • 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。 JSP 另外一种注释语法格式如下: <%-- 注释 --%> 不发送到客户端。
JSP页面结构 • 在一个JSP页面中,主要分为三种元素:编译指令、动作指令和JSP代码。 • 编译指令告诉JSP的解释引擎(比如:Tomcat),需要在编译时做什么动作,比如引入一个其它的类动作指令JSP页面的使用什么语言编码等。 • 动作指令(操作指令)则是在JSP页面被请求时,动态执行的,比如可以根据某个条件动态跳转到另外一个页面。 • JSP代码指的就是我们自己嵌入在JSP页面中的Java代码,这又分为两种:第一种是JSP页面中一些变量和方法的声明,在声明时,使用“<!%”和“%>”标记。另外一种,就是常用到的用“<%”和“%>”包含的JSP代码块
page指令 编译指令 • page指令是针对当前页面的指令。page指令由“<%@”和“%>”字符串构成的标记符来指定。在标记符中是代码体,包括指令的类型和值。 • 例如:<%@page import=“java.sql.*”%>指令告诉JSP容器将java.sql包中的所有类都引入当前的JSP页面。 • 常用的page指令标记有8个: • language、extends、import、errorPage、isErrorPage、contentType、isThreadSafe和session。
page指令 编译指令 • language设置JSP页面中用到的语言,默认值为“Java”,也是目前唯一有效的设定值。使用的语法是: • <%@ page language="java"%>。 • import设置目前JSP页面中要用到的Java类,这些Java类可能是Sun JDK中的类,也有可能是程序员自己定义的类。例如:<%@page import="java.sql.*,java.util.*"%>。 • 有些类在默认情况下已经被加入到当前JSP页面,而不需要特殊声明,包括四个类:java.lang.*;java.servlet.*;java.servlet.jsp.*和java.servlet.http.*。
page指令 编译指令 • extends设定目前JSP页面要继承的父类。一般情况下不需要进行设置。在默认情况下,JSP页面的默认父类是HttpJspBase。例如:当前JSP页面要继承mypackage包下的myclass类,相应的声明语句为:“<%@ page extends="mypackage.myclass"%>”。 • errorPage用来设定当JSP页面出现异常(Exception)时,所要转向的页面。如果没有设定,则JSP容器会用默认的当前网页来显示出错信息。例如: • “<%@page errorPage="/error/error_page.jsp"%>” • isErrorPage用来设定当前的JSP页面是否作为传回错误页面的网页,默认值是“false”。如果设定为“true”,则JSP容器会在当前的页面中生成一个exception对象。
使用errorPage指令捕获异常 <%@ page language="java" errorPage=“error.jsp" contentType="text/html;charset=GBK"%> <% int dividend = 0; int divisor = 0; int result = 0; try { result=dividend/divisor; } catch(ArithmeticException zz) { throw new ArithmeticException( "除数不能为零!" ); } %> <%@ page isErrorPage="true" contentType="text/html;charset=GBK"%> 当前页面是:errortest.jsp<br> <%out.print(exception.toString());%>
page指令 编译指令 • contentType这个属性用来设定传回网页的文件格式和编码方式,一般使用 “text/html;charset=GBK”。 • isThreadSafe定义JSP容器执行JSP程序的方式,默认值为“true”,代表JSP容器会以多线程方式运行JSP页面。当设定值为“false”时,JSP容器会以单线程方式运行JSP页面。 • session定义当前JSP页面中是否要用到session,默认值为“true”。
include指令 • include指令用来指定怎样把另一个文件包含到当前的JSP页面中,这个文件可以是普通的文本文件,也可以是一个JSP页面。例如:“<%@ include file = ”logo.htm“%>”。 • 采用include指令,可以实现JSP页面的模块化,使JSP的开发和维护变得非常简单。 • 实例:includeSample1.jsp
动作指令 • JSP编译指令是让JSP容器自动采取的动作,但对于Web开发人员,有些时候想要自己控制JSP页面的运行,这时可以采用JSP中的操作指令。 • JSP 标准动作 • <jsp: useBean> 标记 • <jsp: getProperty> 标记 • <jsp: setProperty> 标记 • <jsp: forward> 标记 • <jsp: include> 标记
动作指令 • JSP 动作的作用 • 实例化对象 • 与服务器端资源进行通信 • 提高组件的可重用性,增强应用的可维护性 • 使 JSP 页面可与 JavaBean 对象进行交互 • 通过标记库定义自定义标记
JSP标准动作 • JSP 动作的语法 • JSP 动作标记遵循 XML 语言的语法 • 具有一个名称 • 具有前缀 jsp: • 用一对尖括号(< 和 >)括起来 • 在尖括号内定义标记: • 起始标记 - 以元素的名称开头 • 结束标记 - 以正斜线开头,后面紧跟元素名称 • 空标记 - 以元素名称开头,以正斜线结束
jsp:include指令 • jsp:include标准动作用于在当前的JSP页面中加入静态和动态的资源。 • 语法格式为: • <jsp:include page=“test.htm”/> • jsp:include指令必须以“/”结束,功能和include指令大致相同。 区别: include(操作指令):编译时包括,形成一个整体 include(动作):运行时包括
jsp:forward指令 • jsp:forward动作指令用于把当前的JSP页面转发到另一个页面上。 • 基本语法为: • “<jsp:forward page=”test2.jsp“/>”, • 使用该功能时,浏览器的地址栏中地址不会发生任何变化。
jsp:param指令 • jsp:param操作指令以标记“<jsp:param>”开始,以“/>”结束比如:<jsp:param name=“oper” value=“add”/>。 • 可以将jsp:forward操作指令和jsp:param操作指令结合到一起来使用。 • 使用jsp:param操作指令可以在执行jsp动作指令forward操作动作时,追加参数.以动作指令字/值的方式进行传递。 • 实例:forwardExample1.jsp • paramExample1.jsp
<jsp:plugin> • JSP 语法格式如下: • <jsp:plugin • type="bean | applet" • code="classFileName" • codebase="classFileDirectoryName" 使用“<jsp:plugin>”插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。
<jsp:plugin> • [ <jsp:params> • [ <jsp:param name="parameterName" • value="{parameterValue | <%= expression %>}" /> ]+ • </jsp:params> ] • [ <jsp:fallback> text message for user </jsp:fallback> ] • </jsp:plugin> • 实例:appletExample1.jsp
JSP Bean标记 • 与JavaBean交互的三个标记 • <jsp:useBean> • <jsp:getProperty> • <jsp:setProperty>
<jsp:useBean> • 创建一个Bean实例并指定它的名字和作用范围。 • JSP 语法格式如下: <jsp:useBean id="bean name" scope="page | request | session | application" class="class name" /> 或者 <jsp:useBean id="bean name" scope="page | request | session | application" class="class name "> 初始化代码 </jsp:useBean>
属性以及用法 • 1.id="beanInstanceName" • 在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“<jsp:useBean>”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。
属性以及用法 • 2. • scope="page | request | session | application" bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: • page - 能在包含“<jsp:useBean>”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。
属性以及用法 • request - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)。 session - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“<% @ page %>”指令中必须指定session="true"。
属性以及用法 • application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.
属性以及用法 • 3.class="package.class" • 使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。
<jsp:getProperty> • JSP 语法格式如下: • <jsp:getProperty name="beanInstanceName" property="propertyName" /> • 属性: • 1.name="beanInstanceName" • bean的名字,由<jsp:useBean>指定。 • 2.property="propertyName" • 所指定的Bean的属性名。
<jsp:getProperty>例子 • <html> • //声明引用的bean • <jsp:useBean id="calendar" scope="page" class="employee.Calendar" /> • <head> • <title>test</title> • </head> • <body> • Calendar of <jsp:getProperty name="calendar" property="username" /> • </body> • </html>
<jsp:setProperty> • 设置Bean的属性值. • JSP 语法格式如下: • <jsp:setProperty • name="beanInstanceName" • { • property= "*" | • property="propertyName" [ param="parameterName" ] | • property="propertyName" value="{string | <%= expression %>}" • } • />
属性 • 1.name="beanInstanceName" • 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。 • 2.property="*" • 储存用户在jsp输入的所有值,用于匹配Bean中的属性。
属性 • 3.property="propertyName" [ param="parameterName" ] • 用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。
属性 • 4.property="propertyName" value="{string | <%= expression %>}" • 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。 • 如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用param和value参数 。
汉字问题两种解决方法 • 当利用request.getParameter得到Form种元素的时候,默认的情况字符编码为ISO-8859-1,这种编码不能正确的显示汉字。 目前有两种解决方法: 一种是在执行操作之前,设置request的编码格式,语法是:request.setCharacterEncoding(“GBK”); 另一种方法是转换字符编码 : <%String str=request.getParameter("boy"); byte b[]=str.getBytes("ISO-8859-1"); str=new String(b); %> 实例:chineseStringExample1.jsp