资源预览内容
第1页 / 共185页
第2页 / 共185页
第3页 / 共185页
第4页 / 共185页
第5页 / 共185页
第6页 / 共185页
第7页 / 共185页
第8页 / 共185页
第9页 / 共185页
第10页 / 共185页
亲,该文档总共185页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
JavaServer Pages(JSP)网页程序设计网页程序设计 第三讲JSP语法及内置对象n n3.1 3.1 Java基础知识n n3.2JSP语法n n3.3JSP内置对象n n3.4HTML表单n n3.5JSP与客户机的交互n n3.6 3.6 实践:练习实践:练习JSPJSP编程编程23.2JSP语法n n概述n n基本语法3复习JSP的概念nJavaServerPagenServlet简化设计,逻辑与界面设计分开,开发更方便;nHTML语法的java扩展,加入新的标签(,);n强大的组件(JavaBean)支持功能;4JSP文件结构及主要标签. 其他 HTML 语言 其他 HTML 语言 5JSP示例(Hello.jsp) % for ( int i=0; i 你好 你好 你好 6JSP执行过程n*.jsp*.java*.classrequestresponse执行jsp parserJSDKservletservlet分析器7JSPn执行过程8JSP示例(Hello_Date.jsp) 你好,今天是 号, 星期 import java.util.*;response.setContentType(text/html; charset=gb2312);out = pageContext.getOut();out.write(“rnrnrn rn你好,今天是rn); Date today=new Date();out.print(today.getDate();out.write(号,星期);out.print(today.getDay();out.write( rn rn rn );JSP文件servlet文件9JSP示例(浏览结果)10JSP语法概述nJSP原始代码中包含了JSP元素和Template(模板)data两类nTemplatedata指的是JSP引擎不处理的部分,即标记以外的部分,例如代码中的HTML的内容等,这些数据会直接传送到客户端的浏览器nJSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。 11jsp例子(hi.jsp)nHi-JSP实验Template dataJSP元素12JSP语法(JSP编译指令编译指令)n编译指令的英文原话是“directive”,原意是“指示、命令”的意思。在一些java技术书籍中将其称翻译为“伪指令”,也有将其翻译为“编译指令”的,我个人更习惯叫编译指令。只要知道都是指的“directive”就OK了。nJSP的编译指令是通知JSP引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。编译器指令(DIRECTIVE) 例如: 脚本语法(SCRIPTING)动作语法(ACTION) 例如: 13脚本语法n脚本语法包括n“HTML注释”:n“隐藏注释”:n“声明”n“表达式”n“脚本段”14编译器指令n编译器指令包括“包含指令”,“页指令”和“taglib指令”n它们包含在“”卷标里。n两个主要的指令是page与include。15动作语法n动作语法包括n,n,n,n,n,n。16隐藏注释nJSP语法格式如下:n不发送到客户端。17隐藏注释(peixun2.3.jsp)ACommentTestATestofComments18隐藏注释19在IE中查看源代码20声明nJSP语法格式如下:n或n注意:注意: 在在声声明明的的变变量量在在servlet中中将将被被转转换换成成成成员员变变量量!而而在在代代码码段段中中声声明明的的变量是局部变量!变量是局部变量!21声明(test2.4.jsp)test2.4.jsp22表达式n用于在页面上输出信息,语法格式如下:n或nn注意1.如果表达式是调用一个方法,那么这个方法如果表达式是调用一个方法,那么这个方法 必须要有返回值,而不应是必须要有返回值,而不应是void。 2. 在方法的后面不能有分号;例如在方法的后面不能有分号;例如 这是不允许的。这是不允许的。23表达式(peixun2.4.jsp)test24表达式a=b=c=25peixun2.4.jsp执行结果26脚本段nJSP语法格式如下:n或n27脚本段(peixun2.5.jsp)test28%condition=1;switch(condition)case0:out.println(Youmustselectcondition0!+);break;case1:out.println(Youmustselectcondition1!+);29break;case2:out.println(Youmustselectcondition2!+);break;default:out.println(Yourselectnotin0,1,2,selectagain!+);%转义符:双引号“,单引号,反斜杠,回车r,换行n,制表符t,退格b30脚本段执行结果31 include包含指令ninclude指令:向当前页中插入一个静态文件的内容。nJSP 语法格式如下:n 或n32包含指令(peixun2.6.jsp) test The current date and time are 33“peixun2.6.1.jsp” 34包含指令35Page指令n“Page”指令用于定义JSP文件中的全局属性。JSP 语法格式如下: 37Page指令n属性:1language=java 声明脚本语言的种类,目前只能用java 。2.import=package.class | package.* ,. 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* 38Page指令3errorPage=relativeURL 设置处理异常事件的JSP文件。 4isErrorPage=true | false 设置此页是否为出错页,如果被设置为true,你就能使用exception对象39page指令详说n“”指令作用于整个JSP页面,同样包括静态的包含文件。但是“”指令不能作用于动态的包含文件,比如 “”。n可以在一个页面中用上多个“”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。n无论把“”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。40page指令(peixun2.7.jsp) test3Test for using Page.41page指令例子运行结果42taglib指令nJSP语法 n用于引入定制标签库43taglib指令n属性n1uri=URIToTagLibrary nUniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:nUniform Resource Locator (URL), 由 RFC 2396 定义, 可 以 从 以 下 位 置 查 看 (http:/www.hut.fi/u /jkorpela/rfc/2396/full.html)。nUniform Resource Name (URN), 由 RFC 2396定义 n一个相对或绝对的路径 n可以是标签库描述文件44n2prefix=tagPrefix n表示标签在JSP中的名称。n在 自 定 义 标 签 之 前 的 前 缀 , 比 如 , 在中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做为你的前缀,这些已被Sun公司声明保留。45Tablib指令(peixun2.8.jsp) test 46 nJSP 语法格式如下:1jsp:forward page=relativeURL | / 2jsp:forward page=relativeURL | jsp:param name=parameterName value=parameterValue | / (“”指可以有多个“”标记。)47属性:n1、page=relativeURL | n这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。48n2jsp:param name=parameterName value=parameterValue | /n向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“”;“name”指定参数名,“value”指定参数值。49注意n“”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“”标签以后的代码,将不能执行。50例子(peixun2.9.jsp)test51forwardTo.jsp52运行结果(TOMCAT)53n包含一个静态或动态文件. nJSP 语法格式如下:1jsp:include page=relativeURL | flush=true / 2jsp:include page=relativeURL | flush=true jsp:param name=parameterName value=parameterValue | / (“”指可以有多个“”标记。) 54的属性1page=relativeURL | 参数为一相对路径,或者是代表相对路径的表达式。2flush=true 这里必须使用flush=true,不能使用false值。而缺省值为false 。553 jsp:param name=parameterName value=parameterValue | /“”用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“”来传递多个参数,56例子(peixun2.10.jsp)peixun.2.10.jsp 57peixun2.10.1.jsp%String username;username=request.getParameter(User);out.println(Username is +username+);%58运行结果(TOMCAT)59n使用“”插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。nnJSP 语法格式如下: 61 jsp:param name=parameterName value=parameterValue | / + text message for user 62属性1type=bean | applet 将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。2code=classFileName 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。63n3codebase=classFileDirectoryName n将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用的jsp文件的目录将会被使用。nn4name=instanceName n这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。64例子 Unable to load applet 65n创建一个Bean实例并指定它的名字和作用范围。 nJSP 语法格式如下:jsp:useBean id=beanInstanceName scope=page | request | session | application package.class | 66type=package.class | package.class type=package.class | beanName=package.class | type=package.class / | other elements 67属性以及用法n1id=beanInstanceNamen在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的 脚 本 语 言 的 规 定 , 这 个 规 定 在 Java Language 规范已经写明。如果Bean已经在别的“”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。68n2scope=page | request | session | application nBean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: npage - 能在包含“”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 69nrequest - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对 象 访 问 这 个 Bean,比 如request.getAttribute(beanInstanceName)。 nsession - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“”指令中必须指定“session=true”。 70napplication - 从创建Bean开始,就能在任何使用相同application的Jsp文件中 使 用 Bean。 这 个 Bean存 在 于 整 个application生存周期内,任何在分享此application的 Jsp文 件 都 能 使 用 同 一Bean. 71n3package.class n使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。 n4type=package.class n如果这个Bean已经在指定的范围中存在,那么赋予这个Bean一个的数据开库类型 。如果使用type属性的同时没有使用class或beanName,Bean将不会被实例化。注意package和class的名称区分大小写。72n5 beanName=package.class | type=package.class n使用java.beans.Beans.instantiate方法来从一个class或串行化的模板中实例化一个Bean,同时指定Bean的类型。 Beans.instantiate方法将检查此名称是否表示一个类或一个串行化模板。如果这个Bean是被串行化的,那么Beans.instantiate方法将通过使用一个类装载器读取串行化格式(类似package.class.ser)。73nbeanName可以是package和class,也可以 是 表 达 式 , 它 的 值 会 传 给Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基类,或者是它所实现的接口。 package和 class 名字区分大小写。74nJSP 语法格式如下: 属性:1name=beanInstanceName bean的名字,由指定。2property=propertyName 所指定的Bean的属性名。75 例子/声明引用的声明引用的beanbean /test Calendar of 76n设置Bean的属性值. nJSP 语法格式如下:jsp:setProperty name=beanInstanceName property= * | property=propertyName param=parameterName | property=propertyName value=string | / 77属性n1name=beanInstanceName n表示已经在“”中创建的Bean实例的名字。n2property=* n储存用户在jsp输入的所有值,用于匹配Bean中的属性。78n3property=propertyName param=parameterName n用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。79n4property=propertyName value=string | n使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。 n如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“”中同时使用param和value参数 。80packagermg;publicclassstudentprivatelongclassNo;privateStringname;privateintage;privatebooleansexy;publicstudent()/构造函数classNo=970431;name=ZZZl;age=34;sexy=true;例:/建立类rmg.student81publiclonggetClassNo()returnclassNo;publicvoidsetClassNo(longno)this.classNo=no;publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;82publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicbooleangetSexy()returnsexy;publicvoidsetSexy(booleansexy)this.sexy=sexy;83 8485第一次运行结果86以后运行结果第一行发生变化87测试session作用域8889运行结果90小结与习题n本局面集中介绍了JSP的各种语法,掌握这些语法使读者进行JSP开发的基本要求,于一般的网页开发不同,JSP对大小写是敏感的,这一点要注意,尤其是对曾使用过其他开发语言的读者。n与Bean相关的几种语法的使用将在“Bean的使用”一章中专门进行讲解,因此可对照学习。熟练使用这些语法是必须的,因此读者应该多加练习,观察不同用法所产生的效果上的差异。对于给出的例子最好是自己敲入文件并观察执行结果。n随后的几章将各有重点的讲述与语法相关的一些问题。91习题n1举例说明HTML注释与隐藏注释有何异同。n2试写一个JSP文件,包含所有JSP语法元素n3Scriptlet中应遵循什么样的语法规则?n4元素包含静态文件与包含动态文件处理上有何不同?n5起到什么样的作用?使用时有哪些注意事项?n6page指令能起到那些作用?有效范围有多大?92实践:练习实践:练习JSPJSP编程编程1.1.HelloWorld.jspHelloWorld.jsp最简单的最简单的jspjsp程序程序2.2.Scripting.jspScripting.jsp程序片段程序片段3.3.Declaration.jspDeclaration.jsp变量的声明变量的声明4.4.Directive.jspDirective.jsp 和和 Top.htmTop.htm 和和 Bottom.jspBottom.jspDirectivesDirectives语法语法5.5.Include.jspInclude.jsp 和和 Date.jspDate.jspincludeinclude指令指令6.6.News.jspNews.jsp 和和 Item1.htmItem1.htm和和 Item2.htmItem2.htm和和 Item3.htmItem3.htm和和 Item4.htmItem4.htm的使用的使用7.7.ForwardTest.jspForwardTest.jsp 和和 morning.htmmorning.htm 和和 afternoon.jspafternoon.jsp的使用的使用933.3JSP内置对象nJSP有以下九种内置对象,包括:nrequest,请求对象nresponse,响应对象npageContext,页面上下文对象nsession,会话对象napplication,应用程序对象nout,输出对象nconfig,配置对象npage,页面对象nexception,例外对象94重点介绍nrequest,请求对象nsession,会话对象napplication,应用程序对象95综述n有几种对象看起来和ASP的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的HTTP协议。如果使用过ASP,又对Java有一定的了解的话,那么对这几种JSP内置对象的使用应该能迅速掌握。需要注意的问题是对象名的写法,包括这些对象方法的调用时也要书写正确,因为Java语言本身是大小写敏感的。96n从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的Java基础,可以参考相应的类说明,表3.1给出了他们的对应关系。更进一步的讲解将会在讲解Servlet的一章中展开,如果你的Java基础不太好,可以先熟悉在这一章里所介绍的各种方法的使用。9798request和responsen“request”对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值n“response”对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out”对象即可。99request对象示例 姓名 100request对象示例(Hello_req.jsp 你好, , 今天是 号,星期 101request对象示例(输出结果) 你好,独孤求败, 今天是 9号,星期1 102pageContextn“pageContext”对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属 性 , 常 用 的 方 法 包 括 findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope, 一 般 情 况 下“pageContext”对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。n103session对象n“session”对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session”对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、getValueNames和putValue等。104session对象n概要nHTTP是无状态(stateless)协议;nWebServer对每一个客户端请求都没有历史记忆;nSession用来保存客户端状态信息;n由WebServer写入;n存于客户端;n客户端的每次访问都把上次的session记录传递给WebServer;nWebServer读取客户端提交的session来获取客户端的状态信息;105session对象示例(Form表单Logon_session.html) 姓名 106session对象示例Logon_session.jsp 你的名字已经写入session check 107session对象示例(Check_session.jsp) 您还未登录 已经登录 108application对象n“application”对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。109outn“out”对象代表了向客户端发送数据的对象,与“response”对象不同,通过“out”对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out”对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out”对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。110config、page、exceptionn“config”对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。n“page”对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。n“exception”对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“”的JSP文件中使用111request请求对象n1getAttributen原型:publicjava.lang.ObjectgetAttribute(java.lang.Stringname)n说明:以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。(Servlet为服务器端小程序,所有JSP页面都事先翻译成Servlet后才执行)112request请求对象n如果所给名称的属性不存在将返回空值。n属性名应该遵循和包命名方式同样的约定,不要采用如“java.*”、“javax.*”及“sun.*”.这样的命名。n参数:name一个标示属性名的字符串n返回值:一个包含属性值的对象,当属性不存在是为空。113request对象使用示例(peixun2.11.jsp)request用户登录用户名: 密码:114浏览器类型:IE Netscape资料选项:标题详细115Post.jsp代码test%out.println(用户名:+request.getParameter(User)+);out.println(密码:+request.getParameter(pwd)+);out.println(浏览器:+request.getParameter(radio)+);out.println(标题:+request.getParameter(check1)+);out.println(详细:+request.getParameter(check2)+);out.println(隐含:+request.getParameter(hidden)+);out.println(getContentLength()=+request.getContentLength()+);116out.println(getContentType()=+request.getContentType()+);out.println(getRequestURI()=+request.getRequestURI()+);out.println(getServerPort()=+request.getServerPort()+);out.println(getServerName()=+request.getServerName()+);out.println(getProtocol()=+request.getProtocol()+);out.println(getRemoteAddr()=+request.getRemoteAddr()+);out.println(getHeaderNames()=+request.getHeaderNames()+);out.println(getMethod()=+request.getMethod()+);out.println(getServletPath()=+request.getServletPath()+);out.println(isRequestedSessionIdValid()=+request.isRequestedSessionIdValid()+);%117运行结果118119session对象示例session请输入您的姓名:120post1.jsppost.jsp您的姓名是:您最喜欢的娱乐是:121post11.jsppost1.jsp您的姓名是:您喜欢的娱乐是:122运行结果123提交后124输入值125再次提交(保存名字)126application对象运行示例application%out.println(JavaServletAPIVersion+application.getMajorVersion()+.+application.getMinorVersion()+);out.println(peixun2.13.jspsMIMEtypeis:+application.getMimeType(peixun2.13.jsp)+);out.println(URLofpeixun2.13.jspis:+application.getResource(“/peixun2.13.jsp)+);out.println(getServerInfo()=+application.getServerInfo()+);out.println(application.getRealPath();application.log(AddaRecordtolog_file);%127运行结果128application对象实现网页计数器网页计数器您是第位访问者!129运行结果(第一次访问)130刷新一次131exception对象示例ErrorpageloginAnerroroccuredinthebean.ErrorMessageis:132内置对象小结n全面介绍了JSP的几种内置对象。熟练使用这些内置对象是开发JSP应用程序的基本要求,尤其是对于request、session和application对象更是必须要掌握的。n会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。1333.4HTML表单n n复习Web运行原理n nHTML表单的概念n n表单元素介绍n nHTML表单的客户端确认n n客户端表单确认实例134Web运行原理1n客户端同Web服务器之间的协议为httpnHTTP为超文本传输协议nHTPP协议为“请求和响应”协议n客户端请求包括:请求行、头、信息体n客户端请求的方法nGET、POST、HEADnDELETE、TRACE、PUTn提交表单的方法:GET、POST135Web运行原理2n服务器接收到请求后,返回HTTP响应n每个响应:状态行、头、信息体n常见状态n404所请求的文件不存在n500服务器程序出错n200OK成功n信息体用于浏览器显示136页面访问失败137HTML表单n表单是具有输入域、文本域的页面n用于客户端同服务器端交互n用户在客户端填写表单,然后“提交”n表单中的信息发送到服务器n服务器返回处理情况138HTML表单标记n表单主标记nn表单中的标记nnnnn是表单开始标记,结束139表单的例子(peixun2.15.jsp)表单用户登录用户名: 密码:140运行结果141form标记n描述表单的特性,语法nmethod表单传输方法nGET方法将表单信息在URL后传输nPOST方法将表单信息作为信息体传输naction为表单处理方式,通常为一个URLnenctype为编码方式142标记n表单中输入信息的区域n属性ntype类型nname名称nid标识nmaxlength最大字符数nsize输入域宽度nvalue域的初始值nbutton按钮用javascript响应143的类型ntext文本npasswowrd口令方式ncheckbox多选框name相同nradio单选按钮name相同nimage图片nhidden隐藏表单发送数据nsubmit提交按钮向服务器提交表单nreset复位按钮将表单充置为初始状态144文本框:TEXTAREAn多行文本域:n参数nCOLS:宽度nROWS:高度nNAME:名称CPUPIV1500Memory512M145下拉框:SELECTn定义列表框:n参数nMULTIPLE可同时选取多行nNAME名称nSIZE可见项目数n每个项目用option标记n属性SELECTED出现在option表示选中146select的例子北京天津上海重庆147表单提交n提交方式:nsubmit类型按钮提交表单n通过普通按钮的javascript函数n传输方法依据中的methodn推荐使用POSTn传输编码依据中的enctypen处理方式依据中的action148表单清除nreset按钮重置表单为初始值149综合例子表单用户注册用户名: 密码:你喜欢:足球篮球150 性别:男女你的计算机CPUPIV1500Memory512M你计算机的操作系统151 你所在地:北京天津上海重庆152运行结果153表单的确认n客户端确认n减少服务器负载n缩短用户等待时间n兼容性难n服务器端确认n统一确认n兼容性强n服务器负载重154客户端确认n采用javascript进行确认n常用函数nisBetweennisDatenisTimenisDigitnisEmailnisEmptynisIntnisReal155客户端确认例子客户端确认用户登录用户名: 密码:156functioncheckform(frm)varflag=true;if(frm.name.value=)alert(姓名不能为空,请输入值!);frm.name.focus();flag=false;returnflag;157运行结果1582.3.4JSP与客户机的交互n n从表单中获得参数n n返回参数n n表单的服务器端确认159从表单中获得参数n nJSP通过request内置对象获取表单信息n n用不同的方法获取不同种类的信息n n获取参数的主要方法:n ngetParametergetParameter()()获取参数的值获取参数的值n ngetParameterNamesgetParameterNames()()获取参数的名称获取参数的名称n ngetParameterValuesgetParameterValues()()获取多个值获取多个值160getParameter()n可以获得文本框、文本区域、单选、多选的值n表单中各元素的NAME属性是它的唯一标识,用它获取参数。n参考peixun2.11.jsp及post.jsorequest.getParameter(User);161向客户端输出n使用内置对象outout.println(content)n使用“=”n参看peixun2.11.jsp和post.jspout.println(用户名:+User+);n参看peixun2.14.jsp您是第位访问者!162表单的服务器端确认n在客户端不能用JSP进行确认n分工:数据处理在服务器端n实效性:客户端得到服务器确认后表明数据已经到达服务器n客户端兼容性好n缺点:加大服务器负载和用户等待时间163服务器端确认方法n采用Java类对表单数据进行复杂的检查n采用JSP进行确认164服务器端确认的例子服务器端确认用户登录用户名: 密码:165loginAction.jsp确认JSP%Stringname=request.getParameter(name);Stringpwd=request.getParameter(pwd);if(name!=null)&(!name.equals()name=newString(name.getBytes(ISO8859_1),gb2312);out.println(用户名:+name+);out.println(密码:+pwd+);else%166用户名不能为空用户登录用户名:inputtype=textname=namesize=20value= 密码:inputtype=passwordname=pwdsize=20value=167运行结果(TOMCAT)168(未输入姓名)直接提交169输入用户名170输入用户名后提交171JSP的汉字问题的原理n客户端和服务器用gb2312nHTTP传输编码用ISO8859_1n服务器需要指示客户端文档的编码方式ISO8859_1ISO8859_1gb2312gb2312172JSP的汉字问题出现环节n客户端显示文档时的编码方式(由服务器中的JSP、Servlet指明)n客户端发送汉字时自动转换为iso8859_1n服务器中采用gb2312对汉字编码,接收到客户端汉字需要转换为gb2312n服务器端将JSP转换为Servlet时自动将汉字转换为iso8859_1n服务器端应该告诉客户端汉字的编码方式173JSP汉字问题的范围nJSP文件的汉字问题n表单处理的汉字问题nServlet的汉字问题(以后讲解)nJDBC的汉字问题(以后讲解)174JSP文件的汉字问题nJSP中的汉字字符串在服务器端用gb2312n在编译为Servlet时自动转换为iso8859_1n汉字在传输中是正确的n在没有特别指示下,浏览器中无法正确显示n在HTML中指示浏览器文档的编码(myJSPindex.html)nn在JSP中指示JSP引擎文档的编码nn每个要显示汉字的JSP文档都应该包含该语句175JSP文件的汉字问题(JSPhanzi.jsp)JSP中的汉字问题 JSP中的汉字问题 你好176JSP中增加编码指示后JSP中的汉字问题 JSP中的汉字问题 你好177表单处理中的汉字问题n表单处理涉及到客户端和服务器的完整交互过程n在客户端和服务器是gb2312,传输用ISO8859_1n在服务器端接收到客户端数据时需要转换为gb2312后进行处理,方法name=newString(name.getBytes(ISO8859_1),gb2312);n服务器端指示客户端汉字的显示编码178表单处理的汉字问题(hanzi.jsp)表单处理的汉字问题用户登录用户名:表单处理的汉字问题 用户登录 用户名: 179处理过程表单中汉字的处理%Stringname=request.getParameter(name);/name=newString(name.getBytes(ISO8859_1),gb2312);out.println(用户名:+name+);%表单中汉字的处理 用户名:?180处理过程(修改后)表单中汉字的处理%Stringname=request.getParameter(name);name=newString(name.getBytes(ISO8859_1),gb2312);out.println(用户名:+name+);%表单中汉字的处理 用户名:测试1812.4 2.4 实践:练习实践:练习JSPJSP编程编程n分析softshop的首页及用户认证n编写综合练习的首页、认证和注册页面n注意汉字问题182综合练习综合练习 综合练习:我的网上商店综合练习:我的网上商店myshopmyshop,具有以下功能具有以下功能n n用户登录、注册用户登录、注册n n口令空转向口令空转向loginError.jsploginError.jsp(采用采用 )n n建立建立webweb应用应用myshopmyshop,参考参考softshopsoftshop目录结构目录结构n n体会表单的两种发送方法体会表单的两种发送方法页面设计:页面设计:n n完完 成成 首首 页页 、 用用 户户 登登 录录 、 注注 册册 ( index.jspindex.jsp、 login.jsplogin.jsp、registor.jspregistor.jsp)n n首首页页index.jspindex.jsp包包括括简简介介、商商品品分分类类、新新注注册册用用户户、登登录录用用户户计计数数,按钮:用户登录、注册按钮:用户登录、注册n n用户计数采用用户计数采用applicationapplication对象对象n nlogin.jsplogin.jsp包包括括输输入入用用户户名名、口口令令的的表表单单,用用户户名名是是否否为为空空由由服服务务器器端端确确认认,口口令令是是否否为为空空由由客客户户端端确确认认,处处理理表表单单的的jspjsp为为check.jspcheck.jsp,当当口口令令为为空空时时转转向向显显示示错错误误页页面面,登登录录成成功功时时显显示示用用户名和口令户名和口令(表单采用表单采用GETGET方法发送)方法发送)1832.4 2.4 实践:练习实践:练习JSPJSP编程编程综合练习综合练习n nregistor.jspregistor.jsp中录入用户信息,综合使用表单的功能:中录入用户信息,综合使用表单的功能:formform标记标记(表单采用表单采用POSTPOST方法发送)方法发送)texttext:用户名、口令用户名、口令radioradio按钮:性别按钮:性别selectselect:出生年月、所在地、行业出生年月、所在地、行业其中会使用到其中会使用到optionoption标记标记checkboxcheckbox:选择兴趣选择兴趣textareatextarea:自我介绍自我介绍按钮:提交和重新输入按钮:提交和重新输入n n处处理理registor.jspregistor.jsp的的jspjsp为为record.jsprecord.jsp, record.jsprecord.jsp接接收收texttext、textareatextarea、radioradio、selectselect的数据,并显示出来(注意汉字问题)。的数据,并显示出来(注意汉字问题)。n nrecord.jsprecord.jsp中用中用sessionsession存储新注册的用户名。存储新注册的用户名。n nrecord.jsprecord.jsp包含返回首页包含返回首页index.jspindex.jsp的超链接的超链接n nindex.jspindex.jsp中用中用sessionsession提取新注册用户并显示提取新注册用户并显示184谢谢谢谢185
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号