• 1. 第四章 JSP编程
  • 2. 本章主要内容JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象 表达式语言
  • 3. JSP工作原理√ JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象 表达式语言
  • 4. JSP工作原理JSP是一种实现普通静态HTML和动态HTML混合编码的技术。 JSP最终会被转换成标准的Servlet!!! JSP设计的目的在于简化表示层的表示。 JSP页面的其他成分主要有如下三种: 脚本元素 指令 动作
  • 5. <%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*“ %> ... 其他 HTML 语言 <% 符合JAVA 语法的 JAVA 语句 %> 其他 HTML 语言
  • 6. JSP示例(Hello.jsp)<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*"%> <% for ( int i=0; i<2; i++ ) { %> 你好
    <% } %> 你好
    你好
  • 7. JSP执行过程*.jsp*.java*.classrequestresponse执行jsp parserJSDKservletservlet 分析器
  • 8. JSP执行过程
  • 9. JSP示例(Hello_Date.jsp)<%@ page import="java.util.*" %> <%@ page contentType="text/html; charset=gb2312" %> 你好,今天是 <% Date today=new Date(); %> <%=today.getDate()%>号, 星期<%=today.getDay()%> import java.util.*; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut(); out.write(“\r\n\r\n\r\n \r\n你好,今天是\r\n"); Date today=new Date(); out.print(today.getDate()); out.write("号,星期"); out.print(today.getDay()); out.write(" \r\n \r\n\r\n "); JSP文件servlet文件
  • 10. JSP对应的Servlet的代码
  • 11. JSP语法概述JSP原始代码中包含了JSP元素和Template(模板) data两类 Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器 JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。
  • 12. jsp例子(hi.jsp) Hi-JSP实验   <% String Msg = "This is JSP test.";  out.print("Hello World!"); %>

    <%=Msg%>

    Template data JSP元素
  • 13. JSP语法JSP语法分为三种不同的类型 指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>脚本语法(SCRIPTING)动作语法(ACTION) 例如:
  • 14. JSP工作原理 JSP脚本元素√ JSP指令元素 JSP动作组件 JSP内置对象 表达式语言
  • 15. 脚本语法脚本语法包括 “HTML注释”: “隐藏注释”:<%-- comments --%> “声明” “表达式” “脚本段”
  • 16. HTML注释 JSP 语法格式如下: 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
  • 17. 隐藏注释 JSP 语法格式如下: <%-- 注释 --%>  不发送到客户端。
  • 18. 程序4-3:expression.jsp(添加注释后) <%@ page language="java" pageEncoding="GB2312" %> <%@ page contentType="text/html;charset=gb2312" %> JSP表达式 <% for(int i=1;i<=5;i++){%> >你好>
    <%}%> <%--客户端看不到的注释--%>
  • 19. 程序4-4:expression.jsp的客户端源代码 JSP表达式

    你好


    你好


    你好


    你好


    你好

  • 20. 1 输出表达式 <%=表达式%>输出表达式的计算结果。表达式中的变量必须是前面已声明过的变量 注意:%与=之间不能有空格且表达式后面不需要分号。
  • 21. 程序4-2:expression.jsp <%@ page language="java" pageEncoding="GB2312" %> <%@ page contentType="text/html;charset=gb2312" %> JSP表达式 <% for(int i=1;i<=5;i++){%> >你好>
    <%}%>
  • 22. (本页无文本内容)
  • 23. 声明JSP 语法格式如下: <%! declaration; [ declaration; ] ... %> 或 <%! 声明; [声明; ] ... %>
  • 24. 程序4-5:statement_vary.jsp <%@ page language="java" pageEncoding="GB2312" %> <%@ page contentType="text/html;charset=GB2312" %> 声明变量 <%i++; %>

    您是第 <%=i%>个访问本站的客户。

    <%!int i=0; %>
  • 25. 第1次请求页面运行结果
  • 26. 第2次请求页面运行结果
  • 27. 表达式用于在页面上输出信息,语法格式如下: <%= expression %> 或 <%= 表达式 %>
  • 28. 表达式<%@ page language="java" import="java.util.*" %> test
    <%! Date date=new Date(); %> <%! int a, b, c; %>
  • 29. <% a=12;b=a; c=a+b;%> <%=date.toString()%>  
    a=<%= a %>
    b=<%= b %>
    c=<%= c %>
  • 30. 执行结果
  • 31. 脚本段 JSP 语法格式如下: <% code fragment %> 或 <% 代码 %>
  • 32. 脚本段 (peixun2.5.jsp)<%@ page language="java" import="java.util.*" %> <%! int condition;%> test
  • 33. <% condition=1; switch(condition){ case 0: out.println("You must select condition 0!"+"
    "); break; case 1: out.println("You must select condition 1!"+"
    ");
  • 34. break; case 2: out.println("You must select condition 2!"+"
    "); break; default: out.println("Your select not in \"0,1,2\",select again!!"+"
    "); } %> 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b
  • 35. 脚本段执行结果
  • 36. JSP工作原理 JSP脚本元素 JSP指令元素√ JSP动作组件 JSP内置对象 表达式语言
  • 37. JSP指令是从JSP向Web容器发送的消息,它用来设置页面的全局属性,如输出内容类型等。 注意:指令的作用范围仅限于包含指令本身的JSP页面。 JSP的指令格式为: <%@ 指令名 属性="属性值"%>
  • 38. 编译器指令包括“包含指令”, “页指令”和“taglib指令” 它们包含在“<%@ %>”卷标里。 两个主要的指令是page与include。
  • 39. page指令用来定义整个JSP页面的全局属性。 合法的page 属性有: import、contentType、 isThreadSafe、session、buffer、autoflush 、extends、info、errorPage 、isErrorPage和language等。
  • 40. Page指令“Page”指令用于定义JSP文件中的全局属性。   JSP 语法格式如下: <%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ]          
  • 41. Page指令[ autoFlush="true | false" ]  [ isThreadSafe="true | false" ]  [ info="text" ]  [ errorPage="relativeURL" ] [ contentType="mimeType [;charset=characterSet]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %>  
  • 42. Page指令属性: 1.language="java" 声明脚本语言的种类,目前只能用"java" 。 2.import="{package.class | package.* },..." 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*   
  • 43. 3.errorPage="relativeURL" 设置处理异常事件的JSP文件。   4.isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象
  • 44. 程序4-9:testError.jsp <%@ page language="java" %> <%@ page contentType="text/html;charset=GB2312" %> <%@ page errorPage="error.jsp" %> 页面错误属性测试 <%!int[] a={1,2,3};%> <%=a[3]%>
  • 45. (本页无文本内容)
  • 46. 程序4-10: safe.jsp <%@ page contentType="text/html;charset=GB2312" %> <%! int number=0; void countPeople() { int i =0; double sum = 0.0; while (i++ < 200000000) { sum += i; } number++; } %> <% countPeople(); //在程序片中调用方法。 %>

    您是第 <%=number%>个访问本站的客户。

  • 47. (本页无文本内容)
  • 48. 最后,对于page指令,需要说明的是: <%@ page %>指令作用于整个JSP页面,同样包括静态的包含文件。但是<%@ page %>指令不能作用于动态的包含文件,比如 。 可以在一个页面中引用多个<%@ page %>指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入的是Java语言中的类),所以此属性就能多用几次。 无论把<%@ page %>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,及好的编程习惯,最好还是把它放在JSP文件的顶部。
  • 49. 程序4-8:jspSession.jsp <%@ page language="java" %> <%@ page session="false"%> <% if(session.getAttribute("name")==null) session.setAttribute("name","hyl"); %> <% out.println(session.getAttribute("name"));%>
  • 50. include指令 include指令向JSP页面内某处嵌入一个文件。这个文件可以是HTML文件、JSP文件或其他文本文件。 JSP 语法格式如下: <%@ include file="relativeURL" %> 或 <%@ include file="相对位置" %>说明:通过include指令包含的文件是由JSP分析的,并且这部分分析工作是在转换阶段(JSP文件被编译为Servlet时)进行的。
  • 51. 程序4-11:include.jsp <%@ page contentType="text/html;charset=GB2312" %>

    include 示例

    <%@ include file="copyright.html" %>

  • 52. 程序4-12:copyright.html Gantry HTML

    All the rights are reserved

  • 53. (本页无文本内容)
  • 54. JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件√ JSP内置对象 表达式语言
  • 55. JSP动作组件:JSP动作组件是一些XML语法格式的标记,被用来控制Web容器的行为。 常见的JSP动作组件共有以下几种: :在页面被请求的时候引入一个文件。 < jsp:param>:在动作组件中引入参数信息。 < jsp:forward>:把请求转到一个新的页面。 < jsp:setProperty>:设置JavaBean的属性。 < jsp:getProperty>:输出某个JavaBean的属性。 < jsp:useBean>:寻找或者实例化一个JavaBean。 JSP动作组件
  • 56. include动作组件 include动作组件把指定文件插入正在生成的页面。其语法如下: < jsp:include page=“文件名” flush=“true”/>。注意:include动作组件和include指令元素有很大的不同。 include动作组件在执行时才对包含的文件进行处理,因此JSP页面和它所包含的文件在逻辑上和语法上是独立的,如果对包含的文件进行了修改,那么运行时可以看到所包含文件修改后的结果。而静态的include指令包含的文件如果发生变化,必须重新将JSP页面转译成java文件,否则只能看到所包含的修改前的文件内容。JSP动作组件
  • 57. 程序4-13:includeaction.jsp <%@ page contentType="text/html;charset=GB2312" %>

    include 动作示例


  • 58. (本页无文本内容)
  • 59. JSP动作组件 forward动作组件 forword动作组件用于将浏览器显示的网页,导向至另一个HTML网页或JSP网页,客户端看到的地址是A页面的地址,而实际内容却是B页面的内容。其语法如下: 注意:在使用forward之前,不能有任何内容已经输出到客户端,否则会有意外抛出。
  • 60. 程序4-14:forward.jsp <%@page contentType="text/html;charset=GB2312"%> forward

    当前推荐图书清单: <% double i=Math.random(); if(i>0.5) { %> <% } else { %> <% } %>

  • 61. 程序4-15:catalog1.html forward 示例 当前推荐图书清单:
    • 国画
    • 梅次故事
    • 朝夕之间
  • 62. 程序4-16:catalog2.html forward 示例 当前推荐图书清单:
    • J2EE 编程技术
    • J2EE服务器端高级编程
    • JSP高级编程
  • 63. (本页无文本内容)
  • 64. 用于传递参数信息,必须配合< jsp:include>或< jsp:forward>动作组件一起使用。语法如下: < jsp:param name=参数名称 ,value=值 /> 当该组件与一起使用时,可以将param组件中的值传递到include动作组件要加载的文件中去。JSP动作组件
  • 65. 程序4-17:param1.jsp <%@ page contentType="text/html;charset=GB2312" %>

    加载文件效果: < jsp:include page="add.jsp"> < jsp:param name="start" value="0" /> < jsp:param name="end" value="100" />

  • 66. 程序4-18:add.jsp: <%@ page contentType="text/html;charset=GB2312" %> <% String start=request.getParameter("start"); //获取值。 String end=request.getParameter("end"); //获取值。 int s=Integer.parseInt(start); int e=Integer.parseInt(end); int sum=0; for(int i=s;i<=e;i++) { sum=sum+i; } %>

    从<%=start%>到<%=end%>的连续和是:
    <%=sum%>

  • 67. (本页无文本内容)
  • 68. 程序4-19:param2.jsp <%@ page contentType="text/html;charset=GB2312" %> 向jsp:forward传递参数示例:

    向jsp:forward传递参数示例:

  • 69. 程序4-20:welcome.jsp <%@ page contentType="text/html;charset=GB2312" %> <%request.setCharacterEncoding("gb2312");%> 欢迎您! <%= request.getParameter("name")%>
  • 70. (本页无文本内容)
  • 71. 使用“”插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。   JSP 语法格式如下:
  • 72. [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom | top | middle | left | right" ] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber | 1.1" ] [ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] >
  • 73. [ [ ]+   ]  [ text message for user ]
  • 74. 属性1.type="bean | applet" 将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。   2.code="classFileName" 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。  
  • 75. 3.codebase="classFileDirectoryName" 将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用的jsp文件的目录将会被使用。   4.name="instanceName" 这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。
  • 76. 程序4-21:Circle.java import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; public class Circle extends Applet { public void paint(Graphics g){ g.setColor(new Color(255,0,255)); g.fillArc(0,0,50,50,0,360); } }
  • 77. 程序4-22:plugin.jsp <%@ page contentType="text/html;charset=GB2312" %> Plugin tag OBJECT or EMBED not supported by browser.
  • 78. (本页无文本内容)
  • 79. JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象√ 表达式语言
  • 80. JSP内置对象JSP根据Servlet API 规范提供了某些内置对象,开发者不用事先声明就可以使用标准的变量来访问这些对象。 JSP供提供九种内置对象: Request Reponse Out Session application Config Pagecontext Page exception。
  • 81. 从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的Java基础,可以参考相应的类说明,表3.1给出了他们的对应关系。更进一步的讲解将会在讲解Servlet的一章中展开,如果你的Java基础不太好,可以先熟悉在这一章里所介绍的各种方法的使用。
  • 82. (本页无文本内容)
  • 83. request和response“request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值 “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。
  • 84. request请求对象1.getAttribute 原型:public java.lang.Object getAttribute(java.lang.String name) 说明:以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。 ( Servlet为服务器端小程序,所有JSP页面都事先翻译成Servlet后才执行)
  • 85. request请求对象 如果所给名称的属性不存在将返回空值。 属性名应该遵循和包命名方式同样的约定,不要采用如“java.*”、“ javax.*”及 “sun.*”.这样的命名。 参数:name 一个标示属性名的字符串 返回值:一个包含属性值的对象,当属性不存在是为空。
  • 86. 程序4-23:jspFunction.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.util.*" %>
    客户使用的协议是: <% String protocol=request.getProtocol(); out.println(protocol); %>
    获取接受客户提交信息的页面: <% String path=request.getServletPath(); out.println(path); %>
    接受客户提交信息的长度: <% int length=request.getContentLength(); out.println(length); %>
    客户提交信息的方式: <% String method=request.getMethod(); out.println(method); %>
    获取HTTP头文件中User-Agent的值:: <% String header1=request.getHeader("User-Agent"); out.println(header1); %>
    获取HTTP头文件中accept的值: <% String header2=request.getHeader("accept"); out.println(header2); %>
  • 87.
    获取HTTP头文件中Host的值: <% String header3=request.getHeader("Host"); out.println(header3); %>
    获取HTTP头文件中accept-encoding的值: <% String header4=request.getHeader("accept-encoding"); out.println(header4); %>
    获取客户的IP地址: <% String IP=request.getRemoteAddr(); out.println(IP); %>
    获取客户机的名称: <% String clientName=request.getRemoteHost(); out.println(clientName); %>
    获取服务器的名称: <% String serverName=request.getServerName(); out.println(serverName); %>
    获取服务器的端口号: <% int serverPort=request.getServerPort(); out.println(serverPort); %>
  • 88.
    获取客户端提交的所有参数的名字: <% Enumeration enum=request.getParameterNames(); while(enum.hasMoreElements()) {String s=(String)enum.nextElement(); out.println(s); } %>
    获取头名字的一个枚举: <% Enumeration enum_headed=request.getHeaderNames(); while(enum_headed.hasMoreElements()) {String s=(String)enum_headed.nextElement(); out.println(s); } %>
    获取头文件中指定头名字的全部值的一个枚举: <% Enumeration enum_headedValues=request.getHeaders("cookie"); while(enum_headedValues.hasMoreElements()) {String s=(String)enum_headedValues.nextElement(); out.println(s); } %>
  • 89. (本页无文本内容)
  • 90. 程序4-24:input.html
    姓名
    选出你喜欢吃的水果: 苹果 西瓜 桃子 葡萄
  • 91. (本页无文本内容)
  • 92. 程序4-25:getParam.jsp <%@ page contentType="text/html;gb2312" %> 你好, <%! String Name;%> <% Name=request.getParameter("UserName"); String stars=new String("你喜欢吃的水果有:"); String[] paramValues = request.getParameterValues("checkbox1"); for(int i=0;i <%=Name%>
    <%=stars%>
  • 93. (本页无文本内容)
  • 94. 程序4-26:select.jsp: <%@ page contentType="text/html;charset=GB2312" %>

    选择计算方式

    选择n的值:

  • 95. (本页无文本内容)
  • 96. 程序4-28:Attribute_send.jsp <%@ page language="java" %> <%@ page import="java.util.ArrayList" %> Lomboz JSP <% ArrayList ar= new ArrayList(); String he="hello"; ar.add(he); int m=3; ar.add(Integer.toString(m)); request.setAttribute("name","peter"); request.setAttribute("value",ar); %>

    Attribue传递参数示例

  • 97. 程序4-29:Attribute_receive.jsp <%@page contentType="text/html;charset=GB2312"%> <%@ page import="java.util.ArrayList" %> Lomboz JSP <% String name =(String)request.getAttribute("name"); java.util.ArrayList content=new ArrayList(); content =(java.util.ArrayList)request.getAttribute("value"); int m=0; String promt=""; if(content!=null){ String temp=(String)content.get(1); m=Integer.parseInt(temp); promt=(String)content.get(0); } for(int i=0;i <%=promt+" "+name%>
    <%}%>
  • 98. (本页无文本内容)
  • 99. 程序4-30:greeting.jsp <%@ page language="java" %> <%@ page import="java.util.*"%> Lomboz JSP <% Date today =new Date(); int h= today.getHours(); if(h<12)response.sendRedirect("morning.jsp"); else response.sendRedirect("afternoon.jsp"); %>
  • 100. 程序4-31:morning.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ page language="java" %> Lomboz JSP 早上好!
  • 101. 程序4-32:afternoon.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ page language="java" %> Lomboz JSP 下午好!
  • 102. pageContext “pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。
  • 103. session对象“session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
  • 104. session对象概要 HTTP是无状态(stateless)协议; Web Server 对每一个客户端请求都没有历史记忆; Session用来保存客户端状态信息; 由Web Server 写入; 存于客户端; 客户端的每次访问都把上次的session记录传递给Web Server; Web Server读取客户端提交的session来获取客户端的状态信息;
  • 105. application对象“application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
  • 106. out“out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
  • 107. config、 page、 exception“config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。 “page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。 “exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用
  • 108. 程序4-35:application.jsp <%@ page contentType="text/html;charset=gb2312"%> application对象示例 <% out.println("Java Servlet API Version "+application.getMajorVersion() +"."+ application.getMinorVersion()+"
    "); out.println("application.jsp's MIME type is:"+application.getMimeType("application.jsp") +"
    "); out.println("URL of 'application.jsp' is: "+ application.getResource("/application.jsp")+"
    "); out.println("getServerInfo()="+application.getServerInfo()+"
    "); out.println(application.getRealPath("application.jsp")); application.log("Add a Record to log_file"); %>
  • 109. (本页无文本内容)
  • 110. 程序4-36:counter.jsp <%@ page contentType="text/html;charset=gb2312"%> 网页计数器 <% if (application.getAttribute("counter")= =null) application.setAttribute("counter","1"); else{ String times=null; times=application.getAttribute("counter").toString(); int icount=0; icount=Integer.valueOf(times).intValue(); icount++; application.setAttribute("counter",Integer.toString(icount)); } %> 您是第<%=application.getAttribute("counter")%>位访问者!
  • 111. (本页无文本内容)
  • 112. 任何一个Java对象都有其作用域范围,JSP的内置对象也不例外。归纳起来,共有四种范围: (1)page。page范围内的对象仅在JSP页面范围内有效。超出JSP页面范围,则对象无法获取。 (2)request。客户向服务器发起的请求称为request(请求)。由于采用和response.sendRedirect()等重定位计数,客户端发起的request请求可以跨越若干个页面。因此定义为request范围的JSP内置对象可以在request范围内的若干个页面内有效。 (3)session。客户端与服务器的交互过程,称为session(会话)。在客户端与服务器的交互过程中,可以发起多次请求,一个session可以包含若干个request。定义为session范围的JSP内置对象可以跨越若干个request范围有效。 (4)application。部署在服务器上的Web应用程序与所有客户端的的交互过程,称为application。一个application可以包含若干个session。定义为application范围的JSP内置对象可以跨越若干个session范围有效。
  • 113. (本页无文本内容)
  • 114. JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象 表达式语言√
  • 115. 表达式语言(Expression Language,EL)。 与JSP脚本相比,EL提供了一种更加简化的方式来生成动态Web页面。
  • 116. EL的基本语法如下: ${expr} 其中,$为EL语法中的输出符号,expr 为EL有效表达式,它包含在一对括号内。EL有效表达式可以包含文字、操作符、变量(对象引用)和函数调用等。
  • 117. 内容类型合法取值Booleantrue 和 falseInteger与 Java 类似。可以包含任何正数或负数,例如 24、-45、567Floating Point与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567String任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。必须注意,如果在字符串两端使用双引号,则单引号不需要转义。NullnullEL有效表达式支持的内容类型
  • 118. 术语定义算术型+、-(二元)、*、/、div、%、mod、-(一元)逻辑型and、&&、or、||、!、not关系型==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。空空操作符是前缀操作,可用于确定值是否为空。条件型A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 EL有效表达式支持的操作符
  • 119. 程序4-40:el.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> EL有效表达式 ${true}
    ${23+15.28}
    ${12>10}
    ${(12>10)&&(a!=b)}
  • 120. (本页无文本内容)
  • 121. 说明: JSP2.0以后,EL可以应用在JSP页面的模版文本中,也可以作为JSP标记的动态属性。它唯一不能使用的场合就是JSP的脚本元素内部。
  • 122. 类别 标识符 描述 JSPpageContext JSP 页的上下文。作用域pageScope 与page作用域的属性的名称和值相关联的 Map 类 requestScope 与request作用域的属性的名称和值相关联的 Map 类 sessionScope 与session作用域的属性的名称和值相关联的 Map 类 applicationScope 与application作用域的属性的名称和值相关联的 Map 类 请求参数param 存储请求参数名称-值对的 Map 类。paramValues 将请求参数的所有值作为 String 数组存储的 Map 类 请求头header 按名称存储请求头部主要值的 Map 类 headerValues 将请求头部的所有值作为 String 数组存储的 Map 类 Cookiecookie 按名称存储请求附带的 cookie 的 Map 类 初始化参数initParam 按名称存储 Web 应用程序上下文初始化参数的 Map 类 EL支持的隐式对象
  • 123. 注意:不要将上述隐式对象与 JSP 内置对象混淆,其中只有一个对象pageContext是它们所共有的。 说明:尽管 JSP 和 EL 隐式对象中只有一个公共对象( pageContext ),但通过 EL 也可以访问其它 JSP 隐式对象。原因是 pageContext 拥有访问所有其它八个 JSP 隐式对象的功能。
  • 124. EL 提供了两种不同的存取器:点运算符( . )和方括号运算符( [] )。 点运算符通常用于访问对象的属性。 方括号运算符用来检索数组和集合的元素。
  • 125. 程序4-41:el2.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <% HashMap values = new HashMap(); values.put("money", "沪指今日大涨200点!"); values.put("热点", "嫦娥一号发回第一幅月球照片!"); values.put("奥运", "奥运会准备一切就绪!"); String newscolor="blue"; request.setAttribute("news",values); request.setAttribute("color",newscolor); %> EL表达式的存取符和隐含对象

    Hello ${param.name}!

    财经:${requestScope.news.money}
    热点:${requestScope.news.热点}
    奥运:${requestScope.news["奥运"]}
    其它:${requestScope.news.other}

  • 126. (本页无文本内容)