1 / 35

第四章 JSP 语法 ( 续 )

西南科技大学网络教育系列课程 动态网页设计( JSP ). 第四章 JSP 语法 ( 续 ). 内容提要. 理解服务器动作指令行 所有 HTML 文件可以在资源管理器中双击执行. 介绍 JSP 页面的结构. JSP 的编译指令、操作指令和代码. 但是 JSP 文件必须先放到 Web 服务器中,然后通过 HTTP 的方式访问。因为文件内所有 <%%> 内代码是被 Web 服务器解释执行的。. 理解服务器端执行. <%@ page language="java" contentType="text/html;charset=GBK"%>

yvonne
Télécharger la présentation

第四章 JSP 语法 ( 续 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 西南科技大学网络教育系列课程 动态网页设计(JSP) 第四章 JSP语法 (续)

  2. 内容提要 • 理解服务器动作指令行 • 所有HTML文件可以在资源管理器中双击执行 • 介绍JSP页面的结构 • JSP的编译指令、操作指令和代码 • 但是JSP文件必须先放到Web服务器中,然后通过HTTP的方式访问。因为文件内所有<%%>内代码是被Web服务器解释执行的。

  3. 理解服务器端执行 <%@ 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>

  4. Java程序片 在Jsp中,在“<%”和 “%>”之间书写的程序代码为Java程序片 在程序片中声明的变量只在页面有效,是局部变量,不能共享。 但是,在“<%!”和 “%>”之间声明的变量可以在不同的客户间共享,有效范围是整个Jsp页面,声明周期是服务器关闭后变量才会被释放。 JSP表达式用来把Java数据直接插入到输出。其语法如下: <%= Java Expression %> 计算Java表达式得到的结果被转换成字符串,然后插入到页面。计算在运行时进行(页面被请求时),因此可以访问和请求有关的全部信息。例如,下面的代码显示页面被请求的日期/时间: Current time: <%= new java.util.Date() %>

  5. Java程序片 在表达式中JSP应遵守以下规则: JSP表达式的内容必须是一个“完整”的Java表达式。 JSP表达式的内容必须是一个“单独的”Java表达式。 一定不能以分号结束一个Java表达式(与JSP声明不同)。 实例:simpleCounterApp1.jsp

  6. 注释 • JSP 注释语法格式如下: • <!-- comment [ <%= expression %> ] --> 或 • <!-- 注释 [<%= 表达式 %> ] --> • 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。 JSP 另外一种注释语法格式如下: <%-- 注释 --%> 不发送到客户端。

  7. JSP页面结构 • 在一个JSP页面中,主要分为三种元素:编译指令、动作指令和JSP代码。 • 编译指令告诉JSP的解释引擎(比如:Tomcat),需要在编译时做什么动作,比如引入一个其它的类动作指令JSP页面的使用什么语言编码等。 • 动作指令(操作指令)则是在JSP页面被请求时,动态执行的,比如可以根据某个条件动态跳转到另外一个页面。 • JSP代码指的就是我们自己嵌入在JSP页面中的Java代码,这又分为两种:第一种是JSP页面中一些变量和方法的声明,在声明时,使用“<!%”和“%>”标记。另外一种,就是常用到的用“<%”和“%>”包含的JSP代码块

  8. page指令 编译指令 • page指令是针对当前页面的指令。page指令由“<%@”和“%>”字符串构成的标记符来指定。在标记符中是代码体,包括指令的类型和值。 • 例如:<%@page import=“java.sql.*”%>指令告诉JSP容器将java.sql包中的所有类都引入当前的JSP页面。 • 常用的page指令标记有8个: • language、extends、import、errorPage、isErrorPage、contentType、isThreadSafe和session。

  9. 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.*。

  10. 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对象。

  11. 使用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());%>

  12. page指令 编译指令 • contentType这个属性用来设定传回网页的文件格式和编码方式,一般使用 “text/html;charset=GBK”。 • isThreadSafe定义JSP容器执行JSP程序的方式,默认值为“true”,代表JSP容器会以多线程方式运行JSP页面。当设定值为“false”时,JSP容器会以单线程方式运行JSP页面。 • session定义当前JSP页面中是否要用到session,默认值为“true”。

  13. include指令 • include指令用来指定怎样把另一个文件包含到当前的JSP页面中,这个文件可以是普通的文本文件,也可以是一个JSP页面。例如:“<%@ include file = ”logo.htm“%>”。 • 采用include指令,可以实现JSP页面的模块化,使JSP的开发和维护变得非常简单。 • 实例:includeSample1.jsp

  14. 动作指令 • JSP编译指令是让JSP容器自动采取的动作,但对于Web开发人员,有些时候想要自己控制JSP页面的运行,这时可以采用JSP中的操作指令。 • JSP 标准动作 • <jsp: useBean> 标记 • <jsp: getProperty> 标记 • <jsp: setProperty> 标记 • <jsp: forward> 标记 • <jsp: include> 标记

  15. 动作指令 • JSP 动作的作用 • 实例化对象 • 与服务器端资源进行通信 • 提高组件的可重用性,增强应用的可维护性 • 使 JSP 页面可与 JavaBean 对象进行交互 • 通过标记库定义自定义标记

  16. JSP标准动作 • JSP 动作的语法 • JSP 动作标记遵循 XML 语言的语法 • 具有一个名称 • 具有前缀 jsp: • 用一对尖括号(< 和 >)括起来 • 在尖括号内定义标记: • 起始标记 - 以元素的名称开头 • 结束标记 - 以正斜线开头,后面紧跟元素名称 • 空标记 - 以元素名称开头,以正斜线结束

  17. jsp:include指令 • jsp:include标准动作用于在当前的JSP页面中加入静态和动态的资源。 • 语法格式为: • <jsp:include page=“test.htm”/> • jsp:include指令必须以“/”结束,功能和include指令大致相同。 区别: include(操作指令):编译时包括,形成一个整体 include(动作):运行时包括

  18. jsp:forward指令 • jsp:forward动作指令用于把当前的JSP页面转发到另一个页面上。 • 基本语法为: • “<jsp:forward page=”test2.jsp“/>”, • 使用该功能时,浏览器的地址栏中地址不会发生任何变化。

  19. jsp:param指令 • jsp:param操作指令以标记“<jsp:param>”开始,以“/>”结束比如:<jsp:param name=“oper” value=“add”/>。 • 可以将jsp:forward操作指令和jsp:param操作指令结合到一起来使用。 • 使用jsp:param操作指令可以在执行jsp动作指令forward操作动作时,追加参数.以动作指令字/值的方式进行传递。 • 实例:forwardExample1.jsp • paramExample1.jsp

  20. <jsp:plugin> • JSP 语法格式如下: • <jsp:plugin • type="bean | applet" • code="classFileName" • codebase="classFileDirectoryName" 使用“<jsp:plugin>”插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。

  21. <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

  22. JSP Bean标记 • 与JavaBean交互的三个标记 • <jsp:useBean> • <jsp:getProperty> • <jsp:setProperty>

  23. <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>

  24. 属性以及用法 • 1.id="beanInstanceName" • 在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“<jsp:useBean>”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。

  25. 属性以及用法 • 2. • scope="page | request | session | application" bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: • page - 能在包含“<jsp:useBean>”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。

  26. 属性以及用法 • request - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)。 session - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“<% @ page %>”指令中必须指定session="true"。

  27. 属性以及用法 • application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.

  28. 属性以及用法 • 3.class="package.class" • 使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。

  29. <jsp:getProperty> • JSP 语法格式如下: • <jsp:getProperty name="beanInstanceName" property="propertyName" /> • 属性: • 1.name="beanInstanceName" • bean的名字,由<jsp:useBean>指定。 • 2.property="propertyName" • 所指定的Bean的属性名。

  30. <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>

  31. <jsp:setProperty> • 设置Bean的属性值. • JSP 语法格式如下: • <jsp:setProperty • name="beanInstanceName" • { • property= "*" | • property="propertyName" [ param="parameterName" ] | • property="propertyName" value="{string | <%= expression %>}" • } • />

  32. 属性 • 1.name="beanInstanceName" • 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。 • 2.property="*" • 储存用户在jsp输入的所有值,用于匹配Bean中的属性。

  33. 属性 • 3.property="propertyName" [ param="parameterName" ] • 用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。

  34. 属性 • 4.property="propertyName" value="{string | <%= expression %>}" • 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。 • 如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用param和value参数 。

  35. 汉字问题两种解决方法 • 当利用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

More Related