资源描述
单击此处编辑母版标题样式,第一级,第二级,*,哈尔滨理工大学软件学院,J2EE,课程,JavaServerPages,(JSP),几种服务器端脚本语言的简单介绍,PHP,与,ASP,,服务器每次运行都要动态解释;,而,JSP,,只要没被更新过,只是在第一次调用时被编译为,servlet,,以后的访问速度就要快的多。,Aspx,,模仿,JSP,的运行机制,也要在,dotNet,中被编译一次。,IIS,和,Apache,服务器要想识别,PHP,需要增加插件,2,JSP,文件结构及主要标签,.,其他,HTML,语言,其他,HTML,语言,3,JSP,示例(,Hello.jsp,),%,for(,int,i=0;i,你好,你好,你好,4,JSP,执行过程,*.,jsp,*.java,*.class,request,response,执行,jsp,parser,JSDK,servlet,servlet,分析器,5,JSP,执行过程,6,JSP,示例(,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 rnrn,);,JSP,文件,servlet,文件,7,JSP,示例(浏览结果),8,JSP,语法概述,JSP,原始代码中包含了,JSP,元素和,Template(,模板),data,两类,Template data,指的是,JSP,引擎不处理的部分,,即,标记,以外的部分,例如代码中的,HTML,的内容等,,,这些数据会直接传送到客户端的浏览器,JSP,元素则是指将由,JSP,引擎直接处理的部分,这一部分必须符合,JSP,语法,否则会导致编译错误。,9,jsp,例子(,hi.jsp,),Hi-JSP,实验,Template data,JSP,元素,10,JSP,语法,JSP,语法分为三种不同的类型,编译器指令,(,DIRECTIVE),例如:,脚本语法,(,SCRIPTING),动作语法,(,ACTION),例如:,,,11,脚本语法,脚本语法包括,“,HTML,注释”:,“隐藏注释”:,“声明”,“表达式”,“脚本段”,12,编译器指令,编译器指令包括“包含指令”,“页指令”和“,taglib,指令”,它们包含在“”卷标里。,两个主要的指令是,page,与,include。,13,动作语法,动作语法包括,:,14,HTML,注释,JSP,语法格式如下:,或,-,这种注释发送到客户端,但不直接显示,在源代码中可以查看到。,15,HTML,注释(,peixun2.1.jsp,),HTML,注释,未显示上一行的注释。,16,HTML,注释,17,HTML,注释(,peixun2.2.jsp),要多加练习,!-This page was loaded on -,在源文件中包括当前时间。,18,HTML,注释,19,IE,中的源程序有注释,20,隐藏注释,JSP,语法格式如下:,不发送到客户端。,21,隐藏注释(,peixun2.3.jsp),A Comment Test,A Test of Comments,22,隐藏注释,23,在,IE,中查看源代码,24,声明,JSP,语法格式如下:,或,25,声明(,test2.4.jsp),test2.4.jsp,26,表达式,用于在页面上输出信息,语法格式如下:,或,27,表达式(,peixun2.4.jsp),test,28,表达式,a=,b=,c=,29,peixun2.4.jsp,执行结果,30,脚本段,JSP,语法格式如下:,或,31,脚本段(,peixun2.5.jsp),test,32,%,condition=1;,switch(condition),case 0:,out.println(You,must select condition 0!+);,break;,case 1:,out.println(You,must select condition 1!+);,33,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,34,脚本段执行结果,35,包含指令,include,指令:向当前页中插入一个静态文件的内容。,JSP,语法格式如下:,或,36,包含指令(,peixun2.6.jsp),test,The current date and time are,37,“,peixun2.6.1.jsp”,38,包含指令,39,Page,指令,“,Page,”,指令用于定义,JSP,文件中的全局属性。,JSP,语法格式如下:,41,Page,指令,属性:,1,language=java,声明脚本语言的种类,目前只能用,java。,2.import=package.class|package.*,.,需要导入的,Java,包的列表,这些包作用于程序段,表达式,以及声明。下面的包在,JSP,编译时已经导入了,所以就不需要再指明了:,java.lang.*,javax.servlet,.*,javax.servlet.jsp,.*,javax.servlet.http,.*,42,3,errorPage,=,relativeURL,设置处理异常事件的,JSP,文件。,4,isErrorPage,=true|false,设置此页是否为出错页,如果被设置为,true,你就能使用,exception,对象,43,page,指令详说,“”,指令作用于整个,JSP,页面,同样包括静态的包含文件。但是“”,指令不能作用于动态的包含文件,比如“,”。,可以在一个页面中用上多个“”,指令,但是其中的属性只能用一次,不过也有例外,那就是,import,属性。因为,import,属性和,Java,中的,import,语句类似(参照,Java Language,import,语句引入得是,Java,语言中的类),所以此属性就能多用几次。,无论把“”,指令放在,JSP,的文件的哪个地方,它的作用范围都是整个,JSP,页面。不过,为了,JSP,程序的可读性,以及好的编程习惯,最好还是把它放在,JSP,文件的顶部。,44,page,指令(,peixun2.7.jsp),test3,Test for using Page.,45,page,指令例子运行结果,46,taglib,指令,JSP,语法,用于引入定制标签库,47,taglib,指令,属性,1,uri,=,URIToTagLibrary,Uniform Resource Identifier(URI),根据标签的前缀对自定义的标签进行唯一的命名,,URI,可以是以下的内容:,Uniform Resource Locator(URL),由,RFC 2396,定义,可以从以下位置查看(,,www.hut.fi/u,/jkorpela/rfc/2396/full.html)。,Uniform Resource Name(URN),由,RFC 2396,定义,一个相对或绝对的路径,可以是标签库描述文件,48,2,prefix=,tagPrefix,表示标签在,JSP,中的名称。,在自定义标签之前的前缀,比如,在,中的,public,,如果这里不写,public,,那么这就是不合法的。请不要用,jsp,jspx,java,javax,servlet,sun,和,sunw,做为你的前缀,这些已被,Sun,公司声明保留。,49,Tablib,指令,test,50,JSP,用户自定义标签,这是用户自己定义的标签,可以简化,JSP,页面的开发和维护,JSP,在自定义标签中还提供了封装动态功能的机制,它是,JSP,语言的扩展,通常自定义标签都是以标签库的形式表现出来,包括标签和实现这些标签的对象,可以看作是通过标签处理器生成基于,XML,脚步的方法,当包括自定义标签的页面转换为,servlet,的时候,这个标签就被转换为标签处理器的对象上的操作,当这些,servlet,执行的时候,,web,容器就调用这些操作,标签就是很简单而且可以重用的代码结构,51,JSP,用户自定义标签的组成结构,JavaBean,:,这是可重用的代码部分,是标签库用来执行所分配任务的基础代码部分,标签处理器:标签库的核心,一个标签处理器一用它所需要的任何外部资源(,JavaBean,)并负责通过,PageContext,对象访问,JSP,页面的信息。,JSP,页面把页面上设置的标签属性和标签体中的内容都传递给标签处理器,当标签处理器完成其处理过程后,就把处理后的输出结果返回给,JSP,页面做进一步处理,52,JSP,用户自定义标签的组成结构,标签库描述符,TLD,文件:是一个,xml,文件,记录标签处理器的属性;位置等信息;,JSP,容器通过这个文件得知从哪里以及如何调用一个标签库,Web,站点的,web.xml,文件:它是,web,站点的配置文件。在这个文件中,定义了,web,站点中用到的自定义标签,以及用来描述每个自定义标签的,TLD,文件的位置信息,JSP,页面上的标签库声明:要在,JSP,页面中使用某个自定义标签,需要使用标签库声明命令,在页面上进行声明,53,例子:,c:xmlexample.xml,c:xmlexample.xsl,这个例子用自定义标签,装载,example.xml,并用,xsl,将,xml,文件的内容转换成某一个表现形式,54,自定义标签的开发过程,1.,建立标签处理器,(,即标签处理器程序的生命周期,),:,(1),扩展,javax.servlet.jsp.tagext,包中的,TagSupport,类或者,BodyTagSupport,类,他们提供了,javax.servlet.jsp.tagext.Tag,接口所需要的方法,(2),处理程序中包含的一个构造方法,当包含自定义标签的页面第一次加载的时候,该构造方法被用来启动标签处理程序,(3),为每个标签属性分别定义一个,getXxx,(),和,setXxx,(),方法,,JSp,容器使用这些方法向标签处理器程序传递参数,(4),创建标签处理方法,doStartTag,(),和,doEndTag,(),,分别标签开始结束的时候执行处理和输出动作。它们都会返回一个状态码,通知,JSP,容器对自定义的标签的处理结果以及整个,JSP,页面的运行状态。他们的返回值是,Tag,接口定义的静态常量,(5),为每个处理程序编写一个销毁方法,release(),在,JSp,页面结尾处被调用以释放系统资源,*以上个别方法可以根据实际应用的需要取舍*,55,自定义标签的开发过程,2.,编写标签描述文件,扩展名,.,tld,它通常存在,/WEB-INF/,目录下,56,自定义标签的开发过程,3.,编写,web.xml,配置文件,它不是必须的,但在大多数应用中,为了不直接使用,TLD,文件的实际目录,通过,web.xml,文件使用,URL,地址代替,TLD,的实际目录,这里是一个表达式或是一个字符串用于说明你将要定向的文件或,URL。,这个文件可以是,JSP,程序段,或者其它能够处理,request,对象的文件(如,asp,cgi,php,)。,60,2、,向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个,JSP,文件中使用多个“”;“name”,指定参数名,“,value”,指定参数值。,61,注意,“”,标签从一个,JSP,文件向另一个文件传递一个包含用户请求的,request,对象。“”,标签以后的代码,将不能执行。,62,例子,test,63,forwardTo.jsp,64,运行结果(,TOMCAT),65,包含一个静态或动态文件.,JSP,语法格式如下:,1,2,(“”,指可以有多个“”,标记。),66,的,属性,1,page=,relativeURL,|,参数为一相对路径,或者是代表相对路径的表达式。,2,flush=true,这里必须使用,flush=true,,不能使用,false,值。而缺省值为,false。,67,3、,“”,用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“”,来传递多个参数,68,例子,peixun.2.10.jsp,69,peixun2.10.1.jsp,%,String username;,username=,request.getParameter(User,);,out.println(Username,is+username+);,%,70,运行结果,TOMCAT),71,使用“,”,插入一个,applet,或,Bean,,必要的话还要下载一个,Java,插件用于执行它。,JSP,语法格式如下:,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,例子,Unable to load applet,77,创建一个,Bean,实例并指定它的名字和作用范围。,JSP,语法格式如下页所示:,78,|,other elements,79,属性以及用法,1,id=,beanInstanceName,在所定义的范围中确认,Bean,的变量,使之能在后面的程序中使用此变量名来分辨不同的,Bean,,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在,Java Language,规范已经写明。如果,Bean,已经在别的“,”,标记中创建,则当使用这个已经创建过,Bean,时,,id,的值必须与原来的那个,id,值一致;否则则意味着创建了同一个类的两个不同的对象。,80,2,scope=page|request|session|application,Bean,存在的范围以及,id,变量名的有效范围。缺省值是,page,,以下是详细说明:,page-,能在包含“”,元素的,JSP,文件以及此文件中的所有静态包含文件中使用这个,Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。,81,request-,在任何执行相同请求的,Jsp,文件中使用这个,Bean,,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用,Request,对象访问这个,Bean,比如,request.getAttribute(beanInstanceName,)。,session-,从创建,Bean,开始,就能在任何使用相同,session,的,jsp,文件中使用这个,Bean。,这个,Bean,存在于整个,Session,生存周期内,任何在分享此,Session,的,Jsp,文件都能使用同一,Bean。,注意在创建这个,Bean,的,Jsp,文件中“”,指令中必须指定“,session=true”。,82,application-,从创建,Bean,开始,就能在任何使用相同,application,的,Jsp,文件中使用,Bean。,这个,Bean,存在于整个,application,生存周期内,任何在分享此,application,的,Jsp,文件都能使用同一,Bean.,83,3,class=package.class,使用,new,关键字以及,class,构造器从一个,class,中实例化一个,bean。,这个,class,不能是抽象的,必须有一个公用的,没有参数的构造器。这个,package,的名字区别大小写。,4,type=package.class,如果这个,Bean,已经在指定的范围中存在,那么赋予这个,Bean,一个新的数据开库类型。如果使用,type,属性的同时没有使用,class,或,beanName,Bean,将不会被实例化。注意,package,和,class,的名称区分大小写。,84,5,beanName,=package.class|type=package.class,使用,java.beans.Beans.instantiate,方法来从一个,class,或串行化的模板中实例化一个,Bean,,同时指定,Bean,的类型。,Beans.instantiate,方法将检查此名称是否表示一个类或一个串行化模板。如果这个,Bean,是被串行化的,那么,Beans.instantiate,方法将通过使用一个类装载器读取串行化格式(类似,package.class.ser,)。,85,beanName,可以,是,package,和,class,,也可以是表达式,它的值会传给,Beans.instantiate,方法。,type,的值可以和,Bean,相同,也可以是它的基类,或者是它所实现的接口。,package,和,class,名字区分大小写。,86,JSP,语法格式如下:,属性:,1,name=,beanInstanceName,bean,的名字,由,指定。,2,property=,propertyName,所指定的,Bean,的属性名。,87,例子,/,声明引用的,bean,test,Calendar of,88,设置,Bean,的属性值.,JSP,语法格式如下:,89,属性,1,name=,beanInstanceName,表示已经在“”,中创建的,Bean,实例的名字。,2,property=*,储存用户在,jsp,输入的所有值,用于匹配,Bean,中的属性。,90,3,property=,propertyName,param,=,parameterName,用一个参数值来指定,Bean,中的一个属性值,一般情况下是从,request,对象中获得的。其中,property,指定,Bean,的属性名,,param,指定,request,中的参数名。,91,4,property=,propertyName,value=string|,使用指定的值来设定,Bean,属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成,Bean,属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。,如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“”,中同时使用,param,和,value,参数。,92,package,rmg,;,public class student,private long,classNo,;,private String name;,private,int,age;,private,boolean,sexy;,public student()/,构造函数,classNo,=970431;,name=,ZZZl,;,age=34;,sexy=true;,例:/建立类,rmg.student,93,public long,getClassNo,(),return,classNo,;,public void,setClassNo(long,no),this.classNo,=no;,public String,getName,(),return name;,public void,setName(String,name),this.name=name;,94,public,int,getAge,(),return age;,public void,setAge(int,age),this.age=age;,public,boolean,getSexy,(),return sexy;,public void,setSexy(boolean,sexy),this.sexy=sexy;,95,96,97,第一次运行结果,98,以后运行结果,第一行发生变化,99,测试,session,作用域,100,101,运行结果,102,JSP,内置对象,JSP,有以下九种内置对象,包括:,request,,请求对象,response,,响应对象,pageContext,,,页面上下文对象,session,,会话对象,application,,应用程序对象,out,,输出对象,config,,,配置对象,page,,页面对象,exception,,例外对象,103,重点介绍,request,,请求对象,session,,会话对象,application,,应用程序对象,104,综述,有几种对象看起来和,ASP,的内置对象差不多,功能也类似,这是因为这些内置对象的构建基础是标准化的,HTTP,协议。如果使用过,ASP,,又对,Java,有一定的了解的话,那么对这几种,JSP,内置对象的使用应该能迅速掌握。需要注意的问题是对象名的写法,包括这些对象方法的调用时也要书写正确,因为,Java,语言本身是大小写敏感的。,105,从本质上讲,,JSP,的这些内置对象其实都是由特定的,Java,类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的,Java,基础,可以参考相应的类说明,表3.1给出了他们的对应关系。更进一步的讲解将会在讲解,Servlet,的一章中展开,如果你的,Java,基础不太好,可以先熟悉在这一章里所介绍的各种方法的使用。,106,107,request,和,response,“,request”,对象代表的是来自客户端的请求,例如我们在,FORM,表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是,getParameter、getParameterNames,和,getParameterValues,,,通过调用这几个方法来获取请求对象中所包含的参数的值,“,response”,对象代表的是对客户端的响应,也就是说可以通过“,response”,对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“,out”,对象即可。,108,request,对象示例,姓名,109,request,对象示例(,Hello_req.jsp,你好,今天是,号,星期,110,request,对象示例(输出结果),你好,独孤求败,今天是,9号,星期1,111,pageContext,“,pageContext,”,对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括,findAttribute,getAttribute,getAttributesScope,getAttributeNamesInScope,一般情况下“,pageContext,”,对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理,112,session,对象,“,session,”,对象代表服务器与客户端所建立的会话,当需要在不同的,JSP,页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“,session,”,对象建立在,cookie,的基础上,所以使用时应注意判断一下客户端是否打开了,cookie,。,常用的方法包括,getId,、,getValue,、,getValueNames,和,putValue,等。,113,session,对象,概要,HTTP,是无状态(,stateless),协议;,Web Server,对每一个客户端请求都没有历史记忆;,Session,用来保存客户端状态信息;,由,Web Server,写入;,存于客户端;,客户端的每次访问都把上次的,session,记录传递给,Web Server;,Web Server,读取客户端提交的,session,来获取客户端的状态信息;,114,session,对象示例(,Form,表单,Logon_session.html),姓名,115,session,对象示例,Logon_session.jsp,你的名字,已经写入,session,check,116,session,对象示例,Check_session.jsp,),您还未登录,已经登录,117,application,对象,“,application”,对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有,getMimeType,和,getRealPath,等。,118,out,对象,“,out”,对象代表了向客户端发送数据的对象,与“,response”,对象不同,通过“,out”,对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“,out”,对象直接向客户端写一个由程序动态生成,HTML,文件。常用的方法除了,pirnt,和,println,之外,还包括,clear、clearBuffer、flush、getBufferSize,和,getRemaining,,,这是因为“,out”,对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。,119,config,、page、exception,对象,“,config,”,对象提供一些配置信息,常用的方法有,getInitParameter,和,getInitParameterNames,,,以获得,Servlet,初始化时的参数。,“,page”,对象代表了正在运行的由,JSP,文件产生的类对象,不建议一般读者使用。,“,exception”,对象则代表了,JSP,文件运行时所产生的例外对象,此对象不能在一般,JSP,文件中直接使用,而只能在使用了“”,的,JSP,文件中使用,120,request,请求对象,1,getAttribute,原型:,public java.lang.Object,getAttribute(java.lang.String,name),说明:以对象的形式返回特定名称的属性值。这个方法允许,Servlet,引擎给出一个客户请求的特定信息。,(,Servlet,为服务器端小程序,所有,JSP,页面都事先翻译成,Servlet,后才执行),121,request,请求对象,如果所给名称的属性不存在将返回空值。,属性名应该遵循和包命名方式同样的约定,不要采用如“,java.*”、“,javax,.*”,及 “,sun.*”.,这样的命名。,参数:,name,一个标示属性名的字符串,返回值:一个包含属性值的对象,当属性不存在是为空。,122,request,对象使用示例(,peixun2.11.jsp,),request,用户登录,用户名:&,nbsp; ,;,密码:,123,浏览器类型:IE&,nbsp; ,;,Netscape,资料选项:,标题,详细,124,Post.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,()+);,125,out.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,()+,);,%,126,运行结果,127,128,session,对象示例,session,请输入您的姓名:,129,post1.jsp,post.jsp,您的姓名是:,您最喜欢的娱乐是:,130,post11.jsp,post1.jsp,您的姓名是:,您喜欢的娱乐是:,131,运行结果,132,提交后,133,输入值,134,再次提交(保存名字),135,application,对象运行示例,application,%,out.println(Java,Servlet,API Version+,application.getMajorVersion,(),+.+,application.getMinorVersion,()+);,out.println(peixun2.13.jsps MIME type is:+application.getMimeType(peixun2.13.jsp),+);,out.println(URL,of peixun2.13.jsp is:+application.getResource(“/peixun2.13.jsp)+);,out.println(getServerInfo,()=+,application.getServerInfo,()+);,out.println(application.getRealPath,();,application.log(Add a Record to log_file);%,136,运行结果,137,application,对象实现网页计数器,网页计数器,您是第,位访问者!,138,运行结果(第一次访问,),139,刷新一次,140,exception,对象示例,Error page login,An error,occured,in the bean.Error Message is:,141,内置对象小结,全面介绍了,JSP,的几种内置对象。熟练使用这些内置对象是开发,JSP,应用程序的基本要求,尤其是对于,request,、,session,和,application,对象更是必须要掌握的。,会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。,142,JSP,与客户机的交互,从表单中获得参数,返回参数,表单的服务器端确认,143,从表单中获得参数,JSP,通过,request,内置对象获取表单信息,用不同的方法获取不同种类的信息,获取参数的主要方法:,getParameter,(),获取参数的值,getParameterNames,(),获取参数的名称,getParameterValues,(),获取多个值,144,getParameter,(),可以获得文本框、文本区域、单选、多选的值,表单中各元素,的,NAME,属性是它的唯一标识,用它获取参数。,参考,peixun2.11.jsp,及,post.jso,request.getParameter(User,);,145,向客户端输出,使用内置对象,out,out.println(content,),使用“=”,参看,peixun2.11.jsp,和,post.jsp,out.println,(,用户名:+,User+);,参看,peixun2.14.jsp,您是第,位访问者!,146,表单的服务器端确认,在客户端不能用,JSP,进行确认,分工:数据处理在服务器端,实效性:客户端得到服务器确认后表明数据已经到达服务器,客户端兼容性好,缺点:加大服务器负载和用户等待时间,147,服务器端确认方法,采用,Java,类对表单数据进行复杂的检查,采用,JSP,进行确认,148,服务器端确认的例子,服务器端确认,用户登录,用户名:&,nbsp; ,;,密码:,149,loginAction.jsp,确认,JSP,%,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+);,out.println,(,密码:+,pwd,+);,else,%,150,用户名不能为空,用户登录,用户名:,&,nbsp; ,;,密码:,input type=password name=,pwd,size=20 value=,151,运行结果(,TOMCAT),152,(未输入姓名,),直接提交,153,输入用户名,154,输入用户名后提交,155,JSP,的汉字问题的原理,客户端和服务器用,gb2312,HTTP,传输编码用,ISO8859_1,服务器需要指示客户端文档的编码方式,ISO8859_1,ISO8859_1,gb2312,gb2312,156,JSP,的汉字问题出现环节,客户端显示文档时的编码方式(由服务器中的,JSP、Servlet,指明),客户端发送汉字时自动转换为,iso8859_1,服务器中采用,gb2312,对汉字编码,接收到客户端汉字需要转换为,gb2312,服务器端将,JSP,转换为,Servlet,时自动将汉字转换为,iso8859_1,服务器端应该告诉客户端汉字的编码方式,157,JSP,汉字问题的范围,JSP,文件的汉字问题,表单处理的汉字问题,158,JSP,文件的汉字问题,JSP,中的汉字字符串在服务器端用,gb2312,在编译,为,Servlet
展开阅读全文