Presentation is loading. Please wait.

Presentation is loading. Please wait.

JavaServer Pages(JSP) 网页程序设计

Similar presentations


Presentation on theme: "JavaServer Pages(JSP) 网页程序设计"— Presentation transcript:

1 JavaServer Pages(JSP) 网页程序设计

2 第三讲 JSP语法及内置对象 3.1 Java基础知识 3.2 JSP语法 3.3 JSP内置对象 3.4 HTML表单

3 3.2 JSP语法 概述 基本语法

4 复习JSP的概念 Java Server Page Servlet简化设计,逻辑与界面设计分开,开发更方便;
HTML语法的 java 扩展,加入新的标签(<%, %>,…); 强大的组件(Java Bean)支持功能;

5 JSP文件结构及主要标签 <%@ page contentType="text/html;charset=gb2312" %>
page import="java.util.*“ %> ... <HTML> <BODY> 其他 HTML 语言 <% 符合JAVA 语法的 JAVA 语句 %> </BODY> </HTML>

6 JSP示例(Hello.jsp) <HTML> <BODY> 你好<br> </BODY>
page contentType="text/html;charset=gb2312" %> page import="java.util.*"%> <HTML> <BODY> <% for ( int i=0; i<2; i++ ) { %> 你好<br> } </BODY> </HTML>

7 JSP执行过程 servlet servlet 分析器 JSDK request jsp parser *.jsp *.java
*.class 执行 response

8 JSP 执行过程

9 JSP示例(Hello_Date.jsp)
page import="java.util.*" %> page contentType="text/html; charset=gb2312" %> <HTML> <BODY> 你好,今天是 <% Date today=new Date(); %> <%=today.getDate()%>号, 星期<%=today.getDay()%> </BODY> </HTML> import java.util.*; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut(); out.write(“\r\n\r\n<HTML>\r\n <BODY>\r\n你好,今天是\r\n"); Date today=new Date(); out.print(today.getDate()); out.write("号,星期"); out.print(today.getDay()); out.write(" \r\n </BODY>\r\n</HTML>\r\n "); servlet文件 JSP文件

10 JSP示例(浏览结果)

11 JSP语法概述 JSP原始代码中包含了JSP元素和Template(模板) data两类
Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器 JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。

12 jsp例子(hi.jsp) Template data JSP元素
<html> <head> <title>Hi-JSP实验</title> </head> <body>  <% String Msg = "This is JSP test.";  out.print("Hello World!"); %> <h2><%=Msg%></h2> </body> </html> Template data JSP元素

13 JSP语法 JSP语法分为三种不同的类型 编译器指令(DIRECTIVE) 例如: page import=“java.io.*” %> 脚本语法(SCRIPTING) 动作语法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>

14 脚本语法 脚本语法包括 “HTML注释”:<!— comments -->
“声明” “表达式” “脚本段”

15 编译器指令 编译器指令包括“包含指令”, “页指令”和“taglib指令” 它们包含在“<%@ %>”卷标里。
%>”卷标里。 两个主要的指令是page与include。

16 动作语法 动作语法包括<jsp:forward>,<jsp:include>,<jsp:plugin>, <jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>。

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

18 HTML注释(peixun2.1.jsp) <html> <head>
<title> HTML注释 </title> </head> <body> <!-- This file displays the user login screen --> 未显示上一行的注释。 </body> </html>

19 HTML注释

20 HTML注释(peixun2.2.jsp) <html> <head>
<title>要多加练习</title> </head> <body> <!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在源文件中包括当前时间。 </body> </html>

21 HTML注释

22 IE中的源程序有注释

23 隐藏注释 JSP 语法格式如下: <%-- 注释 --%>  不发送到客户端。

24 隐藏注释 (peixun2.3.jsp) <html> <head>
<title>A Comment Test</title> </head> <body> <h2>A Test of Comments</h2> <%-- This comment will not be visible in the page source --%> </body> </html>

25 隐藏注释

26 在IE中查看源代码

27 声明 JSP 语法格式如下: <%! declaration; [ declaration; ] ... %> 或
<%! 声明; [声明; ] ... %>

28 声明(test2.4.jsp) <%@ page language=”java” import=”java.util.*” %>
<html> <head> <title> test2.4.jsp </title> </head> <body> <%! int i = 0; %> <%! int a, b, c; %> <%! Date date; %> </body> </html>

29 表达式 用于在页面上输出信息,语法格式如下: <%= expression %> 或 <%= 表达式 %>

30 表达式(peixun2.4.jsp) <%@ page language="java"
import="java.util.*" %> <html> <head> <title> test </title> </head> <body> <center> <%! Date date=new Date(); %> <%! int a, b, c; %>

31 表达式 <% a=12;b=a; c=a+b;%> <font color="blue">
<%=date.toString()%> </font> <br> <b>a=<%= a %></b><br> <b>b=<%= b %></b><br> <b>c=<%= c %></b><br> </center> </body> </html>

32 peixun2.4.jsp执行结果

33 脚本段 JSP 语法格式如下: <% code fragment %> 或 <% 代码 %>

34 脚本段 (peixun2.5.jsp) <%! int condition;%> <html>
page language="java" import="java.util.*" %> <%! int condition;%> <html> <head> <title> test </title> </head> <body>

35 <% condition=1; switch(condition){ case 0: out.println("You must select condition 0!"+"<br>"); break; case 1: out.println("You must select condition 1!"+"<br>");

36 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b
break; case 2: out.println("You must select condition 2!"+"<br>"); default: out.println("Your select not in \"0,1,2\",select again!!"+"<br>"); } %> </body> </html> 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b

37 脚本段执行结果

38 包含指令 JSP 语法格式如下: <%@ include file="relativeURL" %> 或

39 包含指令(peixun2.6.jsp) <html> <head>
<title>test</title> </head> <body bgcolor="white"> <font color="blue"> The current date and time are include file=“peixun2.6.1.jsp" %> </font> </body> </html> 

40 “peixun2.6.1.jsp” <%@ page import="java.util.*" %>
<%=(new java.util.Date() ).toLocaleString() %>

41 包含指令

42 Page指令 “Page”指令用于定义JSP文件中的全局属性。 JSP 语法格式如下: <%@ page
JSP 语法格式如下: page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ]          

43 Page指令 [ autoFlush="true | false" ] [ isThreadSafe="true | false" ]
 [ info="text" ]  [ errorPage="relativeURL" ] [ contentType="mimeType [;charset=characterSet]" | "text/html ; charset=ISO " ] [ isErrorPage="true | false" ] %>

44 Page指令 属性: 1.language="java" 声明脚本语言的种类,目前只能用"java" 。
2.import="{package.class | package.* },..." 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*   

45 3.errorPage="relativeURL"
设置处理异常事件的JSP文件。 4.isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象

46 page指令详说 page page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>”。 page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。 page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。

47 page指令(peixun2.7.jsp) page import="java.util.*, java.lang.*" %> page buffer="24kb" autoFlush="false" %> page errorPage="error.jsp" %> <html> <head> <title>test3</title> </head> <body> Test for using 'Page'. </body> </html>

48 page指令例子运行结果

49 taglib指令 JSP语法 taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 用于引入定制标签库

50 taglib指令 属性 1.uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容: Uniform Resource Locator (URL), 由 RFC 2396 定义, 可以从以下位置查看 ( /jkorpela/rfc/2396/full.html)。  Uniform Resource Name (URN), 由 RFC 2396定义 一个相对或绝对的路径   可以是标签库描述文件

51 2.prefix="tagPrefix" 表示标签在JSP中的名称。
在自定义标签之前的前缀,比如,在<public:loop>中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀,这些已被Sun公司声明保留。

52 Tablib指令(peixun2.8.jsp) taglib uri=" prefix="public" %> <html> <head> <title>test</title> </head> <body> <public:loop> <%-- 执行代码 --%> </public:loop> </body> </html>

53 <jsp:forward> JSP 语法格式如下:
1.<jsp:forward page={"relativeURL" | "<%= expression %>"} /> 2.<jsp:forward page={"relativeURL" | "<%= expression %>"} > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param … />] </jsp:forward> (“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)

54 属性: 1、page="{relativeURL | <%= expression %>}"
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。 

55 2.<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”;“name”指定参数名,“value”指定参数值。

56 注意 “<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。

57 <jsp:forward>例子(peixun2.9.jsp)
page contentType="text/html;charset=gb2312" %> <html> <head> <title>test</title> </head> <body> <jsp:forward page="forwardTo.jsp"> <jsp:param name="userName" value="riso"/> </jsp:forward> </body> </html>

58 forwardTo.jsp <%@ page contentType="text/html;charset=gb2312" %>
String useName=request.getParameter("userName"); String outStr= "谢谢光临!"; outStr+=useName; out.println(outStr); %>

59 运行结果(TOMCAT)

60 <jsp:include> 包含一个静态或动态文件. JSP 语法格式如下:
1.<jsp:include page="{relativeURL | <%=expression%>}"   flush="true" /> 2.<jsp:include page="{relativeURL | <%=expression %>}"   flush="true" > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param …/>] </jsp:include> (“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)

61 <jsp:include>的属性
1.page="{relativeURL | <%=expression %>}" 参数为一相对路径,或者是代表相对路径的表达式。 2.flush="true" 这里必须使用flush="true",不能使用false值。而缺省值为false 。 

62 3.<jsp:param name="parameterName" value="{parameterValue | <%= expression %> }" />
“<jsp:param>”用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“<jsp:param>”来传递多个参数,

63 <jsp:include> 例子(peixun2.10.jsp)
<html> <head> <title>peixun.2.10.jsp</title> </head> <body> <jsp:include page="peixun jsp" flush="true" > <jsp:param name="User" value="HiFi King" /> </jsp:include> </body> </html>

64 peixun2.10.1.jsp <% String username;
username=request.getParameter("User"); out.println("Username is "+username+"<br>"); %>

65 <jsp:include>运行结果(TOMCAT)

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

67 [ 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" ] >

68 [ <jsp:params> [ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+  </jsp:params> ]  [ <jsp:fallback> text message for user </jsp:fallback> ] </jsp:plugin>

69 <jsp:plugin>属性
1.type="bean | applet" 将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。 2.code="classFileName" 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。

70 3.codebase="classFileDirectoryName"
将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的jsp文件的目录将会被使用。 4.name="instanceName" 这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。

71 <jsp:plugin>例子
<jsp:plugin type=applet code="MediaPlay.class" codebase="../classes">     <jsp:params>           <jsp:param name="way" value="Hall" />     </jsp:params>     <jsp:fallback>           <p>Unable to load applet</p>     </jsp:fallback> </jsp:plugin>

72 小结与习题 本局面集中介绍了JSP的各种语法,掌握这些语法使读者进行JSP开发的基本要求,于一般的网页开发不同,JSP对大小写是敏感的,这一点要注意,尤其是对曾使用过其他开发语言的读者。 与Bean相关的几种语法的使用将在“Bean的使用”一章中专门进行讲解,因此可对照学习。熟练使用这些语法是必须的,因此读者应该多加练习,观察不同用法所产生的效果上的差异。对于给出的例子最好是自己敲入文件并观察执行结果。 随后的几章将各有重点的讲述与语法相关的一些问题。 

73 习题 1.举例说明HTML注释与隐藏注释有何异同。 2.试写一个JSP文件,包含所有JSP语法元素
3.Scriptlet中应遵循什么样的语法规则? 4.<jsp:include>元素包含静态文件与包含动态文件处理上有何不同? 5.<jsp:forward>起到什么样的作用?使用时有哪些注意事项? 6.page指令能起到那些作用?有效范围有多大?

74 实践:练习JSP编程 1. HelloWorld.jsp 最简单的jsp程序 2. Scripting.jsp 程序片段
3. Declaration.jsp 变量的声明 4. Directive.jsp 和 Top.htm 和 Bottom.jsp Directives语法 5. Include.jsp 和 Date.jsp include指令 6. News.jsp 和 Item1.htm 和 Item2.htm 和 Item3.htm 和 Item4.htm <jsp:include >的使用 7. ForwardTest.jsp 和 morning.htm 和 afternoon.jsp <jsp:forward >的使用

75 3.3 JSP内置对象 JSP 有以下九种内置对象,包括: ·request,请求对象 ·response,响应对象
·pageContext,页面上下文对象 ·session,会话对象 ·application,应用程序对象 ·out,输出对象 ·config,配置对象 ·page,页面对象 ·exception,例外对象

76 重点介绍 request,请求对象 session,会话对象 application,应用程序对象

77 综述 有几种对象看起来和ASP的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的HTTP协议。如果使用过ASP,又对Java有一定的了解的话,那么对这几种JSP内置对象的使用应该能迅速掌握。需要注意的问题是对象名的写法,包括这些对象方法的调用时也要书写正确,因为Java语言本身是大小写敏感的。

78 从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的Java基础,可以参考相应的类说明,表3.1给出了他们的对应关系。更进一步的讲解将会在讲解Servlet的一章中展开,如果你的Java基础不太好,可以先熟悉在这一章里所介绍的各种方法的使用。

79

80 request和response “request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值 “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。

81 request对象示例 <html><body>
<form action="./Hello_req.jsp"> 姓名<input type="text" name="UserName"> <input type="submit" value="提交"> </form> </body></html>

82 request对象示例(Hello_req.jsp page contentType="text/html;gb2312" %> page import="java.util.*" %> <HTML> <BODY> 你好, <%! String Name;%> <% Name=request.getParameter("UserName"); %> <%=Name%>, 今天是 Date today=new Date(); <%=today.getDate()%>号,星期<%=today.getDay()%> </BODY> </HTML>

83 request对象示例(输出结果) <HTML> <BODY> 你好, 独孤求败, 今天是 9号,星期1

84 pageContext “pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

85 session对象 “session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

86 session对象 概要 HTTP是无状态(stateless)协议; Web Server 对每一个客户端请求都没有历史记忆;
存于客户端; 客户端的每次访问都把上次的session记录传递给Web Server; Web Server读取客户端提交的session来获取客户端的状态信息;

87 session对象示例(Form表单—Logon_session.html)
<html><body> <form action="./Logon_session.jsp"> 姓名<input type="text" name="UserName"> <input type="submit" value="提交"> </form> </body></html>

88 session对象示例Logon_session.jsp contentType="text/html;gb2312" %> import="java.util.*" %> <HTML> <BODY> <% String Name=request.getParameter("UserName"); session.putValue("LogName", Name); %> 你的名字"<%=Name%>"已经写入session <br> <a href='./check_session.jsp'>check</a> </BODY> </HTML>

89 session对象示例(Check_session.jsp)
contentType="text/html;gb2312" %> <HTML><BODY> <% String yourName=(String)session.getValue("LogName"); if (yourName= =null) { %>您还未登录 }else %> "<%=yourName%>"已经登录 } </BODY></HTML>

90 application对象 “application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

91 out “out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

92 config、 page、 exception
“config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。 “page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。 “exception” page isErrorPage="true "%>”的JSP文件中使用

93 request请求对象 1.getAttribute
原型:public java.lang.Object getAttribute(java.lang.String name) 说明:以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。 ( Servlet为服务器端小程序,所有JSP页面都事先翻译成Servlet后才执行)

94 request请求对象 如果所给名称的属性不存在将返回空值。
属性名应该遵循和包命名方式同样的约定,不要采用如“java.*”、“ javax.*”及 “sun.*”.这样的命名。 参数:name 一个标示属性名的字符串 返回值:一个包含属性值的对象,当属性不存在是为空。

95 request对象使用示例( peixun2.11.jsp )
page contentType="text/html;charset=gb2312" %> <html> <head> <title>request</title> </head> <body> <form method="POST" action="post.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="User" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br>

96 浏览器类型: <input type="radio" name="radio" value="ie" checked >IE   
<input type="radio" name="radio" value="ns">Netscape <br> 资料选项: <input type="checkbox" name="check1" value="ON" checked>标题 <input type="checkbox" name="check2" value="ON">详细 <input type="hidden" name="hidden" value="transPara"> </p><p align="center"> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> </body> </html>

97 Post.jsp代码 <%@ page contentType="text/html;charset=gb2312"%>
<head><title>test</title></head> <body> <% out.println("用户名:"+request.getParameter("User")+"<br>"); out.println("密码:"+request.getParameter("pwd")+"<br>"); out.println("浏览器:"+request.getParameter("radio")+"<br>"); out.println("标题:"+request.getParameter("check1")+"<br>"); out.println("详细:"+request.getParameter("check2")+"<br>"); out.println("隐含:"+request.getParameter("hidden")+"<br>"); out.println("getContentLength()="+request.getContentLength()+"<br>");

98 out. println("getContentType()="+request
out.println("getContentType()="+request.getContentType()+"<br>"); out.println("getRequestURI()="+request.getRequestURI()+"<br>"); out.println("getServerPort()="+request.getServerPort()+"<br>"); out.println("getServerName()="+request.getServerName()+"<br>"); out.println("getProtocol()="+request.getProtocol()+"<br>"); out.println("getRemoteAddr()="+request.getRemoteAddr()+"<br>"); out.println("getHeaderNames()="+request.getHeaderNames()+"<br>"); out.println("getMethod()="+request.getMethod()+"<br>"); out.println("getServletPath()="+request.getServletPath()+"<br>"); out.println("isRequestedSessionIdValid()="+request.isRequestedSessionIdValid()+ "<br>"); %> </body> </html>

99 运行结果

100

101 session对象示例 <%--session对象示例,peixun2.12.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>session</title></head> <body> <form method="post" action="post1.jsp"> 请输入您的姓名: <input type="text" name="username"> <input type="submit" value="submit"> </form > </body> </html>

102 post1.jsp <%@ page contentType="text/html;charset=gb2312"%>
<head><title>post.jsp</title></head> <body> page language="java" %> <%! String name=""; %> <p> <% name = request.getParameter("username"); //将username存入session session.putValue("username", name); %> 您的姓名是:<%=name%> <p><form method="post" action="post11.jsp"> 您最喜欢的娱乐是: <input type="text" name="amuse"> <input type="submit" value="submit"> </p> </form> </body> </html>

103 post11.jsp <%@ page contentType="text/html;charset=gb2312"%>
<head><title>post1.jsp</title></head> <body> page language="java"%> <%! String amuse=""; %> <% amuse=request.getParameter("amuse"); String user=(String)session.getValue("username"); %> 您的姓名是: <%=user%> 您喜欢的娱乐是: <%=amuse%> </body> </html>

104 运行结果

105 提交后

106 输入值

107 再次提交(保存名字)

108 application对象运行示例 <%--application对象示例,peixun2.13.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>application</title><head> <body> <% out.println("Java Servlet API Version "+application.getMajorVersion() +"."+application.getMinorVersion()+"<br>"); out.println("peixun2.13.jsp's MIME type is:"+application.getMimeType("peixun2.13.jsp") +"<br>"); out.println("URL of 'peixun2.13.jsp' is: "+application.getResource(“/peixun2.13.jsp")+"<br>"); out.println("getServerInfo()="+application.getServerInfo()+"<br>"); out.println(application.getRealPath(" ")); application.log("Add a Record to log_file"); %> </body> </html>

109 运行结果

110 application对象实现网页计数器
<%--用application对象实现网页计数器peixun2.14.jsp文件代码--%> page contentType="text/html;charset=gb2312"%> <html> <head><title>网页计数器</title><head> <body> <% if (application.getAttribute("counter")==null) application.setAttribute("counter","1"); else{ String strnum=null; strnum=application.getAttribute("counter").toString(); int icount=0; icount=Integer.valueOf(strnum).intValue(); icount++; application.setAttribute("counter",Integer.toString(icount)); } %> 您是第<%=application.getAttribute("counter")%>位访问者! </body> </html>

111 运行结果(第一次访问)

112 刷新一次

113 exception对象示例 <%--exception对象示例,ErrorPage.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> page isErrorPage="true" %> <html> <body bgcolor="#ffffc0"> <h1>Error page login</h1> <br>An error occured in the bean. Error Message is: <br> <%= exception.getMessage() %><br> <%= exception.toString()%><br> </body> </html>

114 内置对象小结 全面介绍了JSP的几种内置对象。熟练使用这些内置对象是开发JSP应用程序的基本要求,尤其是对于request、session和application对象更是必须要掌握的。 会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。

115 3.4 HTML表单 复习Web运行原理 HTML表单的概念 表单元素介绍 HTML表单的客户端确认 客户端表单确认实例

116 Web运行原理-1 客户端同Web服务器之间的协议为http HTTP为超文本传输协议 HTPP协议为“请求和响应”协议
客户端请求包括:请求行、头、信息体 客户端请求的方法 GET、POST、HEAD DELETE、TRACE、PUT 提交表单的方法: GET、POST

117 Web运行原理-2 服务器接收到请求后,返回HTTP响应 每个响应:状态行、头、信息体 常见状态 信息体用于浏览器显示
404 所请求的文件不存在 500 服务器程序出错 200 OK 成功 信息体用于浏览器显示

118 页面访问失败

119 HTML表单 表单是具有输入域、文本域的页面 用于客户端同服务器端交互 用户在客户端填写表单,然后“提交” 表单中的信息发送到服务器
服务器返回处理情况

120 HTML表单标记 表单主标记 表单中的标记 <form>是表单开始标记,</form>结束
<input> <select> </select> <option> <textarea> </textarea> <form>是表单开始标记,</form>结束

121 表单的例子(peixun2.15.jsp) <%--表单例子,peixun2.15.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>表单</title><head> <body> <form method="POST" action=""> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="User" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> </form> </body> </html>

122 运行结果

123 form标记 描述表单的特性,语法 method表单传输方法 action为表单处理方式,通常为一个URL enctype为编码方式
<form method="POST" action="“ enctype=“”> method表单传输方法 GET方法将表单信息在URL后传输 POST方法将表单信息作为信息体传输 action为表单处理方式,通常为一个URL enctype为编码方式

124 <input>标记 表单中输入信息的区域 属性 type 类型 name 名称 id 标识 maxlength 最大字符数
size 输入域宽度 value 域的初始值 button 按钮 用javascript响应

125 <input>的类型 text 文本 passwowrd 口令方式 checkbox 多选框 name相同
radio 单选按钮 name相同 image 图片 hidden 隐藏表单 发送数据 submit 提交按钮 向服务器提交表单 reset 复位按钮 将表单充置为初始状态

126 文本框:TEXTAREA 多行文本域:<textarea> </textarea> 参数 COLS:宽度
ROWS:高度 NAME:名称 <textarea NAME=“Computer” ROWS=6 COLS=64> CPU PIV 1500 Memory 512M </textarea>

127 下拉框:SELECT 定义列表框:<select> </select> 参数 每个项目用option标记
MULTIPLE 可同时选取多行 NAME 名称 SIZE 可见项目数 每个项目用option标记 属性SELECTED出现在option表示选中

128 select的例子 <select name="area" style="width"50" size="1">
<option value="北京" selected > 北京 </option> <option value="天津" > 天津 </option> <option value="上海" > 上海 </option> <option value="重庆" > 重庆 </option> </select>

129 表单提交 提交方式: 传输方法依据<form>中的method 传输编码依据<form>中的enctype
submit类型按钮提交表单 通过普通按钮的javascript函数 传输方法依据<form>中的method 推荐使用POST 传输编码依据<form>中的enctype 处理方式依据<form>中的action <input type="submit" value=" 提交">

130 表单清除 reset按钮重置表单为初始值 <input type="reset" value="全部重写"></p>

131 综合例子 <%--表单综合例子,peixun2.16.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>表单</title><head> <body> <form method="POST" action=""> <p align="center">用户注册 <p align="center"> 用户名:<input type="text" name="User" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> <p>你喜欢: <input type="checkbox" name="sports" value=football> 足球 <input type="checkbox" name="sports" value=bastketball> 篮球

132     
性别: <input type="radio" name="sexy" value=male> 男 <input type="radio" name="sexy" value=female> 女 <br><br> <p>你的计算机</p> <textarea NAME=“Computer” ROWS=6 COLS=64> CPU PIV 1500 Memory 512M </textarea><br><br> <p>你计算机的操作系统 <input type="image" name="os" src="images\TURBOLINUX6.GIF">

133     
你所在地: <select name="area" style="width"50" size="1"> <option value="北京" selected > 北京 </option> <option value="天津" > 天津 </option> <option value="上海" > 上海 </option> <option value="重庆" > 重庆 </option> </select> <br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> </body>

134 运行结果

135 表单的确认 客户端确认 减少服务器负载 缩短用户等待时间 兼容性难 服务器端确认 统一确认 兼容性强 服务器负载重

136 客户端确认 采用javascript进行确认 常用函数 isBetween isDate isTime isDigit isEmail
isEmpty isInt isReal

137 客户端确认例子 <%--客户端确认例子,peixun2.17.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>客户端确认</title><head> <body> <form method="POST" name="frm1" onsubmit="return checkform(this)"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form>

138 <SCRIPT language=JavaScript>
function checkform(frm){ var flag=true; if(frm.name.value=="") { alert("姓名不能为空,请输入值!"); frm.name.focus(); flag=false; } return flag; </SCRIPT> </body> </html>

139 运行结果

140 JSP与客户机的交互 从表单中获得参数 返回参数 表单的服务器端确认

141 从表单中获得参数 JSP通过request内置对象获取表单信息 用不同的方法获取不同种类的信息 获取参数的主要方法:
getParameter() 获取参数的值 getParameterNames() 获取参数的名称 getParameterValues() 获取多个值

142 getParameter() 可以获得文本框、文本区域、单选、多选的值 表单中各元素的NAME属性是它的唯一标识,用它获取参数。
参考peixun2.11.jsp及post.jso <input type="text" name="User" > request.getParameter("User");

143 向客户端输出 使用内置对象out 使用“=” 参看peixun2.11.jsp和post.jsp
out.println(content) 使用“=” <%= content% > 参看peixun2.11.jsp和post.jsp out.println("用户名:" +User+"<br>"); 参看peixun2.14.jsp 您是第<%=application.getAttribute("counter")%>位访问者!

144 表单的服务器端确认 在客户端不能用JSP进行确认 分工:数据处理在服务器端 实效性:客户端得到服务器确认后表明数据已经到达服务器
客户端兼容性好 缺点:加大服务器负载和用户等待时间

145 服务器端确认方法 采用Java类对表单数据进行复杂的检查 采用JSP进行确认

146 服务器端确认的例子 <%--服务器端确认例子,peixun2.18.jsp文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>服务器端确认</title><head> <body> <form method="POST" name="frm1" action="loginAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20">     密码:<input type="password" name="pwd" size="20"><br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> </body> </html>

147 loginAction.jsp <%--服务器端确认例子,loginAction.jsp确认表单文件代码--%>
page contentType="text/html;charset=gb2312"%> <html> <head><title>确认JSP</title></head> <body> <% String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); if((name!=null)&&(!name.equals(""))) { name=new String(name.getBytes("ISO8859_1"), "gb2312"); out.println("用户名:" +name+"<br>"); out.println("密码:"+pwd+"<br>"); } else{ %>

148 <p align="center">用户名不能为空</p><br><br>
<form method="POST" name="frm1" action="loginAction.jsp"> <p align="center">用户登录 <p align="center"> 用户名:<input type="text" name="name" size="20" value="<%=name%>">      密码:<input type="password" name="pwd" size="20" value="<%=pwd%>"><br> <br> <input type="submit" value=" 提交"> <input type="reset" value="全部重写"></p> </form> <%}%> </body> </html>

149 运行结果(TOMCAT)

150 (未输入姓名)直接提交

151 输入用户名

152 输入用户名后提交

153 2.4 实践:练习JSP编程 分析softshop的首页及用户认证 编写综合练习的首页、认证和注册页面 注意汉字问题

154 综合练习 页面设计: 综合练习:我的网上商店myshop,具有以下功能 建立web应用myshop,参考softshop目录结构
用户登录、注册 口令空转向loginError.jsp(采用<jsp:forward >) 建立web应用myshop,参考softshop目录结构 体会表单的两种发送方法 页面设计: 完成首页、用户登录、注册(index.jsp、login.jsp、registor.jsp) 首页index.jsp包括简介、商品分类、新注册用户、登录用户计数,按钮:用户登录、注册 用户计数采用application对象 login.jsp包括输入用户名、口令的表单,用户名是否为空由服务器端确认,口令是否为空由客户端确认,处理表单的jsp为check.jsp,当口令为空时转向显示错误页面,登录成功时显示用户名和口令(表单采用GET方法发送)

155 2.4 实践:练习JSP编程-综合练习 registor.jsp中录入用户信息,综合使用表单的功能:
form标记(表单采用POST方法发送) text:用户名、口令 radio按钮:性别 select:出生年月、所在地、行业 其中会使用到option标记 checkbox:选择兴趣 textarea:自我介绍 按钮:提交和重新输入 处理registor.jsp的jsp为record.jsp, record.jsp接收text、textarea、radio、select的数据,并显示出来(注意汉字问题)。 record.jsp中用session存储新注册的用户名。 record.jsp包含返回首页index.jsp的超链接 index.jsp中用session提取新注册用户并显示

156 谢谢


Download ppt "JavaServer Pages(JSP) 网页程序设计"

Similar presentations


Ads by Google