内容讲义讲稿_第1页
内容讲义讲稿_第2页
内容讲义讲稿_第3页
内容讲义讲稿_第4页
内容讲义讲稿_第5页
已阅读5页,还剩911页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章JSP简 什么是 JSP页 JSP的运行原 安装配置JSP运行环 JSP页面的测 JSP与JavaServlet的关 第2章JSP语 JSP页面的基本结 变量和方法的 变 方 Java程序 表达 JSP中的注 JSP指令page指 include指令JSP动作include动作param动作forward动作plugin动作useBean动作第3章JSP内置对 request对 获取客户提交的信 处理汉字信 常用方法举 用户获取HTML表单提交的数 表 response对 动态响应contentType属 response的HTTP文件 response重定 response的状态 session对 session对象的 session对象与URL重 session对象的常用方法 计数 application对 application对象的常用方 用application制作留言 out对 第4章JSP中的文件操 File 获取文件的属 创 删除文件 使用字节流读写文 FileInputStream和FileOutputStream BufferedInputStream和BufferedOutputStream类.使用字符流读写文 FileReader和FileWriter BufferedReader和BufferedWriter 回压字符 数据 对象 RandomAccessFile 文件上 文件分页文 标准化考 第5章JSP中使用数据 数据 JDBC-ODBC桥接 查询记 顺序查 游动查 随机查 参数查 排序查 分析结果集查 使用统配符查 更新记 添加记 删除记 分页显示记 连接数据库的其它方 连接Oracle数据 连接MySql数据 查询Excel电子表 使用同步连 网上投 成绩录入查询系 第6章JSP与 编写javabeans和使用 编写 使用 beans的存 获取和修改beans的属 getProperty动作setProperty动作beans的辅助 带包名的 JSP与beans结合的简单例 三角形 计数器 购物车 读文件 写文件 查询数据库 猜数字 标准化考试 日期 分页显示记录 第7章基于会员制的网络交 系统设 数据库设计及连 页面管 各个页面的设 会员会员登 浏览会 查找会 留言 查看公共留 查看私人留 修改修改个人信 第8章网 系统设 数据库设计及连 页面管 各个页面的设 用户用户登 用户订 查看订 修改订 浏览书 修改修改个人信 第9章Java SERVLET工作原 Servlet的生命周 init方法 service方 destroy方 编译和安装 简单的servlet例 编译 存放servlet 运行 带包名的 通过JSP页面调用 通过表单向servlet提交数 通过超 SERVLET的共享变 HttpServlet doGet方法和doPost方 处理HTTP请求头及表单信 设置响应的HTTP 用SERVLET读写文 文件的内 写文 用SERVLET数据 数据库记录查 使用共享连 会话管 获取用户的会 购物 猜数 第1JSP什么JP是Javaeverages的缩写,是由un公司倡导、许多公司参与,于1999年推出的一种页技术标准。JP是基于Javaevlet以及整个Java体系的Web进站,这术还在不断的更新和优化中。你可能对的ASActveeverages)比较熟悉,ASP也是一个Web服务器端的开发技术,可以开发出动态的、高性能的Web服务应用程序。JP和ASP技术非常相似,ASP的编程语言是VBcipt和Javacipt,JSP使用的是JavaASP相比,JSP以JavaAP的级执行的缺点。我们相信JSP会逐渐成为ntenet上的主流开需要强调的一点要想真正地掌握JSP技术必须有较好的语言基础,以及HTML语言方面的知识。JSP页面在传统的HTML页面文件中加入java程序片和JSP就构了一个JSP页面文件,简单JSP页面除了普通的HTML标记符外,再使用标记符号“<%”,“”加入Java程序片。一个JSP页面文件的扩展名是jsp,文件的名字必须符合标识符规定,需要注意的是,JSP技术基于Java语言,名字区分大小写。为了明显地区分普通的HTML标记Java程序片段以JSP标签,我们用大写字母书写普通的HTML标记符号。下面的例子1是一个简单的JSP例子1(效果如图1.1所示<%@pagecontentType="text/html;charset=GB2312"<BODY<FONT<P>这是一个简JSP<%inti,sum=0;{} 1100的连续和<%=sum用浏览器该JSP页面的效果如图1.1所示1.1简单jsp页JSP的运行原理当服务器上的一个JSPJSP引擎首先将JSP页面文件转译成一个java文件,再将这个java文件编这个JSP页面再次被请求执行时,JSP引擎将直接执行这个字节码文件来响应客户,这也是JSP比ASP速度快的一个原因。而JP页面JSP页面中普HTML标记符号(页面的静态部分)交执行“<%”和“%>”之间的java程序片(JSP页面中的动态部,当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程而不是启动一个这些线程由JSP引擎服务器来管理,与传统的CGI为每个客户启动一个进程相比较,效率要高的下面是JSP引擎生成的Example1_1.jspjava文件,我引擎交给客户端负责显示的内容做了(***)注释packageorg.apache.jsp;importjavax.servlet.*;importjavax.servlet.jsp.*;importpublicclassfirst1$jspextends{static}publicfirst1$jsp()}privatestaticboolean_jspx_inited= org.apache.jasper.runtime.JspException{} throwsjava.io.IOException,{JspFactory_jspxFactory=null;PageContextpageContext=null;HttpSessionsession=null;ServletContextapplication=null;ServletConfigconfig=null;JspWriterout=null;Objectpage=this; try{if(_jspx_inited=={synchronized(this)if(_jspx_inited==false)_jspx_inited=}}}_jspxFactory=JspFactory.getDefaultFactory();pageContext=_jspxFactory.getPageContext(this,request,response,"",true,8192,application=pageContext.getServletContext();config=pageContext.getServletConfig();session=pageContext.getSession();out=(***)out.wie"n<HTM>\n<BODY>\n<>这是一个简单的JP页面\n"inti,{}(*** 1到100的连续和是: out.print(sum }catch(Throwablet)if(out!=null&&out.getBufferSize()!=0) }finally }}}下面是客户端浏览器查看到的 的源代码<BODY<FONT<P>这是一个简单的 页 1100的连续和安装JSP运行环自从JP发布以后,出现了各式各样的JP引擎。1999年10月un公司将Javaeverage1.1代码交给Apache组织,Apache组织对JSP进行了实用研究,并将这个服务器项目称为Tomcat,从此,著名的Web服务器Apache开始支持JSP。这样,Jakarta—Tomcat就诞生了(Jakarta是JP项目的最初名称。目前,Tomcat能和大部分主流服务器一起高效率的工作。我们重点讲述Window98/Window2000操作系统下Tomcat服务器的安装Tomcat之前,必须首先安装JDK,这里我们安装sun公司JDK1.3。假设JDK的安 是C:\Jdk1.3然后,解压缩文件:jakarta-tomcat-4.0.zip,该文件可从sun公司的:h 或到。假设解压缩文件到:D:\Tomcat。这时我们得到如下的结构:9图1.2Tomcat引 在启动Tomcat服务器之前,还需要进行几个环境变量的设置。 window2000,用鼠标“我的电脑弹出菜单,然”框该变量名:JAVA_HOME,变量值:C:\jdk1.3变量名TOMCAT_HOME变量值D:\tomcat\Jakatatomcat-4.0变量名:CLASSPATH,变量值:C:\jdk1.3\jre\lib\rt.jar;.;变量名:PATH,变如果曾经设置过环境变量:CLASSPATHPATH,可点击该变量对于Win9x,用记事本编辑Autoexec.bat文件,将如下的设置语 现在,就可以启动Tomcat服务器了。执行startup.bat1.3Tomcat服务器启动后的窗在浏览器的地址栏中键入:,会出现如 所示的Tomcat测试页1.4Tomcat测试注:Tomcat服务器内置web服务如果Tomcat不能启动请首先检查环境变量的设置是否正确,对于Win9x,如果出现“outofenvironmentspace”的错误提示,就需要修改MS-DOS属性,将属性中内存的初始环境更改为4096注:8080是Tomcat服务器的默认端。我们可以通过修Tomcat\Jakarta-tomcat-4.0\conf文件下的主配置文件server.xml,更改端。用记事本打开server.xml文件,找到出<!--Defineanon-SSLHTTP/1.1Connectoron8080-- enableLookups="true"redirectPort="8443" 的部分将其中的port=“8080”更改为新的端即可比如将更改为9080注:Tomcat\Jakarta-tomcat-4.0\binshutdown.bat关闭Tomcat器JSP用记事本或更好的文本编辑器,编辑如下的JSP源文件:Example1_2.jsp2(效果如图1.5所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.util.*"<P>现在的时间是 Datedate=new将JSP文件命名为Example1_2.jsp,保存到入:对JSP页面进试,出现如图1.5图 JSP页面测这时,如果你查Tomcat\Jakarta-tomcat-4.0\webapps\work,可以在localhost的一个根文件下找到JSP引擎生Example1_2.jsp的java文件和编译后的字节码文件,如图1.6所示。1.6JSP页面的Java文件和字节码文件所在注:Tomcat服务器的Web服务的 tomct\Jkara-tmca-4.\weapp\oo另外webaps还有几个web务 :examples、tomcat-docs、webdav如果将JSP文件保存到webdav中,应当在在浏览器器的地址栏中输入:。注:我们也可以建立新的web服务假设要D:\testc:\redsun为服务,并让用户分别使用/test和/moon虚拟。首先用记事本打开主配置文件<!--TomcatRootContext--<!-<Contextpath=""docBase="ROOT"--<!--TomcatExamplesContext-- (在这里加入您的Web服 的部分。然后在</Context> </Host>之间加入 主配置文件server.xml修改后,必须重新启动Tomcat引擎。这样就可以JSP页面存放D:\testc:\redsun用户可以通过虚拟test或moonJSP页面,比如,在浏览器地址栏中键入:。当客户过上面Web服务的JSP页面后,服务器的tomcat\jakart-tomcat-4.0\work出现moontest目录存放了JSP应的Java件和Java件的字节码文件JSP与JavaServletJavaevlet是Java语言的一部分,提供了用于服务器编程的APIJavaServlet编写的Java程序称为一个servletservlet通过HTML与客户交互信息。sevlet的最大缺点是不能有效的管理页面的逻辑部分和页面的输出部分,导致sevlet代码非常用servlet来管理变成一件很的事情。为了克服servlet的缺点,SUN公司用JavaevletJavaeverageJP提供了servlet的几乎所有好处,当一个客户请求一个JP页面时,JSP引擎根据JP页面生成一个Java文件,即一个sevletJSP支持javabeans这一特点,可以有效地管理页面的逻辑部分和页面的输出部分(见第6章。另外,JP也可以和sevlet有效地结合,分离页面的逻辑部分和页面的输出部分(见第9章)第2章JSPJSP页面的基本结构在传统的HTML页面文件中加入java程序片和JSP就构成了一个JSP页面文件。一个JSP页面可由5种元素组合而成:(1)普通的HTML标记 :如,指令、动作(3)变量和方法的(4)Java程序片(5)Java表达式我们称(3(4(5)形成的部分为JSP的部分当服务器上的一个jsp页面被第一次请求执行时,服务器上的JSP引擎首先将JSP页面文件转译成一个java文件,再将这个java文件JSP页面中普通的HTML标记符号,交给客户的浏览器执JSP、数据和方法、Java程序片由服务器负责执行将需要显示的结果发送给客户的浏览Java表达式由服务器负责计算,并将结果转化为字符串,然在下面的例子1中,客户通过表单向服务器提交三角形三边的长边长度返回给客户。为了讲解方便,下面的JSP文件加入了行号,它们并不是JP源文件的组成部分。2.1计算三角形面在下面的Example2_1.jsp(1(2)行是JSP指令(3)至(10)行是HTML标记,其中(7)到(10)行 表单,客户通过该表单向服务器提交数)3行数据部,该分的据个JP(14)至(42)行是Java程序片,该程序片负责计算面积并将结果返回给客户该程序片内的变量只在该程序片(4547例子1(效果如图2.1所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.util.*"<BODYBGCOLOR=cyan><FONT <P>请输入三角形的三个边的长度,输入的数字用逗号分<FORMaction="Example2_1.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%!doublea[]=newString <%intbooleanStringdoubledoublea[]=newString try{ result=Math.sqrt(p*(p-a[0])*(p-a[1])*(p- out.print("面积 {answer="您输入的三边不能构成一个 <P>您输入的三边变量和方法的在“<%!”和“%>”标记符号之间变量和方法变之间放置Java的变量语句变量的类型可以是Java语言允许的任何数据类型,这些变量称为JSP页面的成员变量。如,<%! a,b=10,Datedate;“<!”和“>”之间的变量在整个JP页面内都有效,因为JP引擎将JP页面转译成Java文件时,将这些变量作为类的成求一个JP页面时,JSP引擎为每个客户启动一个线程,这些线程由JP引擎服务器来管理,这些线程共享JP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。下面的例子2利用成员变量被所有用户共享这一性质,实现了一2.2简单的计数例子2(效果如图2.2所示<%@pagecontentType="text/html;charset=GB2312"<BODYBGCOLOR=cyan><FONT<%!int<P>个本站的客户在处理多线程问题时,须注意这样一个问题:当两个或多个线程同时同一个共享的变量并且一个线程需要修改这个变量时,我们应对这样的问题作出处理,否则可能发生。在上面的例子2中,可能发生两个客户同时请求Exampe2_2.jsp页面。在Java入一个synchronized块,或将修改该变量的方法用synchonized来修饰。这样,当一个客户用synchonized块或synchonized方法操作一<%@pagecontentType="text/html;charset=GB2312"<%!Integernumber=new}<P>您是第个本站的客户2.2.2方在“<%!”和“%>”之间方法,该方法在整个JSP页面有效,但是该方法内定义的变量只在该方法内有效。这些方法将在Java程用完毕即可释放所占的内存。当多个客户同时请求一个JSP页面时,他<%@pagecontentType="text/html;charset=GB2312"<%!intsynchronizedvoid{} //在程序片中调用方<P><P>个本站的客户在上面的例子4中,如果Tomcat服务器重新启动就会刷新计数器,因此计数又从0开始。在下面的例子5中,我们使用Java的输入输出流技术,将计数保存到文件。当客户该JSP页面时,就去这个文件,将服务器重新启动之前的计数读入,并在此基础1,重新启动,就将计数增1,并创建一个文件,然后将计数写入到这个文件(有关文件和输入输出流技术可参见第4章。2.3用文件保存计例子5(效果如图2.3所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<BODYBGCOLOR=cyan><FONT<%!int countPeople()//计算次数的同步方{{ } { }catch(IOException}catch(IOException{}} }catch(IOExceptione){}}}<P><P>个本站的客户数学上有一个计算的公式:/4=1-1/3+1/5-1/7+1/9-1/11……。下面的例子 中利用成员变量被所有客户共享这一特性实现客帮助计算的值,即每当客户Example2_6.jsp都参与了一次的图2.4利用页面次数计算的例子6(效果如图2.4所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONTlongnumber=0;synchronizedvoid帮助 i=-}帮助计算<P>您是第<%=number%>个<P>目前PI的计算结果 可以在“<%!”和“%>”之间一个类,该类在JSP页面内有效,即在JSP页面的Java程序片部分可以使用该类创建对象。在下面的7中,我们定义了一Circle类,该类的对象负责求圆的面积和周2.5JSP页面中使用自定义的例子7(效果如图2.5所示<%@pagecontentType="text/html;charset=GB2312"<P>请输入圆的半<FORMaction="Example2_7.jsp"method=get<INPUT <INPUTTYPE="submit"value="送出"<%!publicclass{doubleCircle(double}double求面积{return}double求周长{return}} doubler;}}Circlecircle=new //创建对<P>圆的面积是<%=circle.求面积<P>圆的周长是<%=circle.求周长Java序可以在“<%”和“%>”之间插入Java程序片。一个JSP页面可JSP中的变量称做JSP页面的局部变量它们在JSP页面内的所有JP引擎将JSP页面转译成Java文件时,将各个程序片的这些变量作为类中某个方法的JSP当多个客户请求一个JSPJSP引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP页面局部变量操作的结果,不会影响到其它客户的这个局部变量。下面例子8中的程序片负责计算1到100的连续例子8(效果如图2.6所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONTlongcontinueSum(int{intfor(int{}

2.6使用程序片计算连续}<P>1100的连续和<%longsum;下面的例子9将例子8中的程序片分割成几部2.7程序片分例子9(效果如图2.7所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FontlongcontinueSum(int{intfor(int{}}<P>了一个long型变量<%long<P>然后调用方法<%<P>将调用方法continueSum得到的值显示到<P>1101的连续和是<%= <%<P>您计算的项数超过100项了<P>您计算的项数没有超过100}下面例子10的程序片负责服务器上的一个文件并将文件的图2.8使用程序片文例子10(效果如图2.8所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<BODYbgcolor=cyan><FONT FileReaderin=newFileReader(f);Strings=null;{}}catch(IOException{out.print("文件不存在表达,下面的例子11计算表达式的例子11(效果如图2.9所示<%@pagecontentType="text/html;charset=GB2312" bgcolor=cyan><FONT<P>Sin(0.9)3<p>3的平方 72 <P>5的平等

2.9计算表达式的<P>99大于100吗?回JSP中的注释注释可以增强JSP文件的可读性,并易于JSP文件的。JSPHTML注释:在标记符号“<!--”和“-->”之间加入注释内容<!- 注释内 --JSP引擎把HTML注释交给客户,因此客户通过浏览器查看的源文件时,能够看到HTML 注释:在标记符号“<%--”和“--%>”之间加入注释内容<%- 注释内容JSP引擎忽略JSP注释,即在编译JSP页面时忽略JSP注释例子<%@pagecontentType="text/html;charset=GB2312"<P>请输入三角形的三个边a,b,c的长度<!--以下是HTML表单,向服务器发送三角形的三个边的长--<FORMaction="Example2_12.jsp"method=post<P>请输入三角形边a的长度<INPUTtype="text"<P>请输入三角形边b的长度<INPUTtype="text"<P>请输入三角形边c的长度<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%--获取客户提交的数据<%Stringstring_a=request.getParameter("a"),doublea=0,b=0,c=0;<%--判断字符串是否是空对象,如果是空对象就初始化<%}<%--求出边长,并计算面积<%try{a=Double.valueOf(string_a).doubleValue();{doubledoublemianji=Math.sqrt(p*(p-a)*(p-b)*(p-c));}{out.print("<BR>"+"您输入的三边不个三角形}} {out.print("<BR>"+"请输入数字字符}JSPpagepage指令用来定义整个JSPpage指令定义JSP页面的contentType属性的值是"txthmchaet=B31"<%@pagecontentType="text/html;charset=GB2312"page指令的格式<%@page 属性1=“属性1的值” 属性2=“属性2的 属性值总是用单引号或引号双号括起来 import="java.util.*"%>如果为一个属性指定几个值话,这些值用逗号分割。page指令只能给import属性指定多个值;其它属性只能指定一个值。例如<%@ import="java.util.*","java.io.*" "java.awt.*"当你为import指定多个属性值时,JSP引擎把JSP页面转译java文件中会有如下的importimportjava.util.*;importjava.io.*;importjava.awt.*;在一个JSPpage指令来指定属性及其值。需要注意的是:可以使用多个page指令给属性ipot几个值,但其它属性只能使用一次page指令指定该属性一个值。如,<%@<%@import="java.util.*"<%@import="java.util.*","java.awt.*"注:下列用法<%@pagecontentType="text/html;charset=GB2312"<%@pagecontentType="text/html;charset=GB2312"尽管指定的属性值相同,也不允许2次使用PagecontentType属注:page指令的作用对整个页面有效,与其书写的位置无关,习惯把page指令写在JSP页面的最前language定义JSP页面使用的语言,该属性的值目前只能取"java"。为language属性指定值的格式:<%@ language="java"page指令指定该属性的值的话,那么,JSP页面默认有page指<%@ language="java"import该属性的作用是为JSP页面引入Java包中的类这样就可以在JSP页面的程序片部分变量及函数部分表达式部分使用包中的类。可以为该属性指定多个值,该属性的值可以是Java某包中<%@ import="java.io.*","java.util.Date"JSP页面import属性已经有如下 java.lang.*" "javax.servlet.*"、"javax.servlet.jsp.*""javax.servlet.http.*"contentType属性定义JSP页面响应的MIME(MultipurposeInternetMailExtention)类型和JSP页面字符的编码。属性值的一般形式是“MIME类型”或“MIME类型;charset=编码”,如:<%@pagecontentType="text/html;charset=GB2312"session属性用于设置是否需要使用内置的 对象session的属性值可以是truefalsesessio属性默认的属性truebuffer属性内置输出流对象out负责将服务器的某些信息或运行结果发送到客户端显示,buffer属性用来out设置的缓冲区的大小或不使用buffer属性可以取值“none”,设置out不使用缓冲区。Buffer属性的默认值是8kb。例如:<%@pagebuffer=“24kb”auotFlush指定 的缓冲区被填满时,缓冲区是否自动刷新auotFlush可以取值true或false。auotFlush属性的默认值是true。当auotFlush属性取值false时,如果out的缓冲区填满时,就会出现缓存溢出异常buffer的值是“none”时,auotFlush的值就不能设置成false。isThreadSafe用来设置JSP页面是否可多线程isThreadSafe的属性值truefalseisThreadSafe属性值设置为true时,JSP页面能同时响应多个客户的请isThreadSafe属性值设false时,JSP页面同一时刻只能处理响应一个客户的请求,其他客户需排队等待。isThreadSafe属性的默认值是属性该属性为 页面准备一个字符串属性值是某个字符串例如<%@pageinfo=“wearestudents”可以在 页面中使用方法获取info属性的属性注:JSP转译成Java件时,转译成的类是的一个子类,所以在JSP页面中可以使用Servlet类的方法:getServletInfo()下面的例子13使用getServletInfo()方法获info的属性例子13(效果如图2.10所示<%@pagecontentType="text/html;charset=GB2312"<%@pageinfo="我!" bgcolor=cyan><FONTS<P>谁呀 Strings=getServletInfo();include

2.10获取info如果需要在JSP页面内某处整体嵌入一个文件,就可以考虑使用这个指令。该指令语法如下:<%@includefile=文件的名字该指令的作用是在 页面出现该指令的位置处,静态插。一个文件入的文件必须是可和可使用的即该文件必须和当前JSP页面在同一Web服务 中所谓静态插入就是当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java类文件。因此,插入文件后,必须保证新合并成的JSP页面符合JSP语则即能够成为一个JSP页面文件。比如,如果一个JSP页面使用include指令插入另一个JSP文件,被插入的这个JSP页面中有一个设置页面contentType属性的page指。<%@pagecontentType="text/html;charset=GB2312"而当前JSP页面已经page指令设置contentType的属性那么新合JSP页面就出现了语法错误,当转译合并的JSP页面到Java文件时就会失败。“下面的14在JSP页面静态插入一个文本文件:o.txt,该文本文件的内容是:好,很高兴认识呀文本文件必须和当前JSP页面在同一Web服务中。“例子14(效果如图2.11所示<%@pagecontentType="text/html;charset=GB2312"<BODY 图2.11使用include指 <%@include o.txt"Example2_14.jspJSPExample2_14_1.jsp<%@pagecontentType="text/html;charset=GB2312"好,很高兴认识呀注:在Example2_14.jsp被转译成Java文件如果你对插入的文件o.txt进行了修改,那么必须要重新将转译成java文件(重新保存页面,然后再该页面即可),否则只能看到修改前的o.txt的内容。下面的例子15JSP页面Example2_15.jsp中静态插入一个文件:Computer.jsp<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"请输入数字字符}图2.12使用include指令静态嵌入JSP文例子15(效果如图2.12所示<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>请输入一个正数,点击按钮求这个数的平<%@include注:Example2_15.jsp同于下JSP件:Example2_15_1.jsp<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>请输入一个正数,点击按钮求这个数的平<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"请输入数字字符}JSP动作是一种特殊的,它影响 运行时的功能includeinclude动作<jsp:includepage=“文件的名字或<jsp:includepage=“文件的名字该动作告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态插入文件的include指令不同,当JSP引擎把JSP页面转Java文件时,不把JSP页面中动作include所包含的文件JSP页面合并一个JSP页面,而是Java解释器这个文件在JSP运行(Java文件的字节码文件被加载执行)送到客户端,由客户端负责显示;如果包含的文件是jsp文件,JSP负责显示这些结果。注:include动作与静态插入文件的include指令有很大的不同,动作是在执行时才对包含的文件进行处理,因此JSP,进行了修改,那么运行时看到所包含文件修改后的结果,而静态include指令包含的文件如果发生了变化须要重新将JSP页面转译成java文件(可将该JSP页面重新保存,然后再,就可产生新的转译Java文件,注:书写include动作:<jsp:includepage…../>时要注意:“jspinclude”三者之间不要有空格。图2.13用include动 下面的例子16动态包含两个文件:image.html和 把Example2_16.jsp 页面保存到Tomcat\Jakarta-tomcat-4.0\webapps\root,在root下又新建立了一个文件夹Myfile,o.txt存放在MyFile文件夹中im图2.13用include动 <H4>你好,祝学习进<BR>学习JSP要有Java语言的基<BR>要认真学习JSP的基本语<image例子16(效果如图2.13所示<%@pagecontentType="text/html;charset=GB2312"<BODYBGCOLOR=Cyan><FONT<P>加载的文<jsp:include <P>加载的图<jsp:include由于动作指令include是动态地包含一个文件因此客户可以通过HTML表单提交需要包含的文件的名字。在下面的例子17中,我们用Java 语言中的File 类列出了Tomcat\Jakarta-tomcat-4.0\webapps\root\Myfile下的所有的jsp文件,客户通过表单,图2.14使用include动作加载JSP文例子17(效果如图2.14所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<%!classFileJSPimplements{Stringstr=null;} booleanaccept(Filedir,String{return}}<BODYbgcolor=cyan><FONT<P>下面列出了服务器上的一些jsp FileJSPfile_jsp=newFileJSP("jsp");Stringfile_name[]=dir.list(file_jsp);for(int}<P>请输入一个jsp文件的名字,加载jsp文件<FORMaction="Example2_17.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%String <P>加载的效<jsp:includepage="<%=fileName param动作param以“名字—值”对的形式为其它提供附加信息,这个与jsp:include、jsp:forward、jsp:plugin一起使用。param动作 name=“名字 value=“指定给param的值当该与jsp:include一起使用时,可以将param中的值传递到include指令要加载的文件中去因此include动作如果结合param可以在加载文件的过程中向该文件提供信息下面例子18动态包含文件:tom.jsp,当该文件被加载时获取param中computer的值(获取computer的值由JSP的内置对象request调用getParameter方法完成)。<%@pagecontentType="text/html;charset=GB2312" intn=Integer.parseInt(str);intfor(int{}从1到<%=n%>的连续和例子18(效果如图2.15所示<%@pagecontentType="text/html;charset=GB2312"图2.15用param传递参数<P>加载文件效<jsp:include<jsp:paramname="computer"value="300"forwardforwar指令<jsp:forwardpage="要转向的页面"或<jsp:forwardpage="要转向的页面"该指令的作用是:从该指令处停止当前页面的继续执行,而转向其它的一个JSP页面。假设Example2_11.jsp 存放在Example2_2在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/下。下面的在下面的JSP页面中,首先随机获取一个数,如果该数大于图2.16Example2_19.jsp运行几次后,随机出现的两种运行效果。例子19(效果如图2.16所示<%@pagecontentType="text/html;charset=GB2312"{m<jsp:forwardm

2.16使用forward指令进行页面转}{<jsp:forwardpage="Example2_2.jsp"} 这句话和下面的表达式的值能输该指令也可以结合paam指令,向要转到的页面传送信息。下面的Example2_2.jsp页面转到come.jsp,并向转到的come.jsp页面传递一个数值,如图2.17所示。<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONT<%Stringstr=request.getParameter("number");doublen=Double.parseDouble(str);<P>您传过来的数值是图图2.17用 例子20(效果如图2.17所示<%@pagecontentType="text/html;charset=GB2312"<%double<jsp:forwardpage="come.jsp"<jsp:paramname="number"value="<%=i%>"plugin在页面中使用普通的HTML标记<apple….></apple>可以让客户运行一个javaapplet小应用程序但并不是所有的客户的浏览器都支持javaapple小程序,如果你的小应用程序使用了JDK1.2以后的类,那么,目前的IE5.5并不支持这Java小应用程序。而使用plugin动作可以保证客户能执行你的小应用程序。该动作指示JSP页面加载javaplugin,该插件由客户负责下载,并使用该插件来运行Javaapplet。Plugin动作<jsp:plugintype="applet"code="小应用程序的字节码文件"jreversion="java虚拟机版本号"width小程序宽度值"height="小程序高度值"提示信息:用来提示用户的浏览器是否支持插件假设有javaapplet小程序,主类字节码文件是:B.class,该文件存放在Root下。含有plugin的JSP文件Example2_21.jsp也存放在Root下<%@pagecontentType="text/html;charset=GB2312" width="200"height="260">PlugintagOBJECTorEMBEDnotsupportedby当客户上述JSP页面时将导致登录sun公司的Javaplugin,出现客户选择是否插件的界面,如图2.18所示。图2.18客户选择是否插件的界选择“是再选择同意,出现插件的界面,如 所示用户插件完毕后,接受协就可以根据向导一步一地安装插件了,如图2.20所示。2.20安装插件界安装完毕后,小应用程序就开始用java的虚拟机(不再使用浏览器自带的虚拟机)加载执行javaapplet小应用程序了,如图2.21所示(以后客户再带有plugin的JSP页就能直接执行该页面中包含的javaapplet小应用程序了。2.21用插件运行的javaapplet效上面JSP页面中包含的java小应用程序是完全用javaswing编的,使用表格JTable组件技术,来计算2阶行列式的小程序。如果不使用插件,目前的浏览器,比如IE5.5,都无法运行。以下是javaapplet小应用程序的源代码:B.java,该代码摘自《Java2实用》(等编写。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassBextendsJAppletimplements JPanelp1,p2;Objectname[]={"1列","2列"};JButtonbutton;JTextFieldtext;publicvoid a=newbutton=newJButton("确定");text=newJTextField(8);p1=newJPanel();p2=newJPanel();p1.setLayout(newGridLayout(2,1));p1.add(newLabel("输入2阶行列式的元素"));p1.add(newLabel("输入或修改用鼠标点击每使table=newJTable(a,name);}publicvoidactionPerformed(ActionEvent{doubled[][]=newdouble[2][2];doubleresult;for(int{for(int}}}}}注:JSP页面javaapplet小程序不在同一文件下,plugin中应增加codebase选项,小程序所在的位置。比如,如果上述例子的B.class存放在Root的Myfile文件下。那么,Plugin标<jsp:plugintype="applet"code="B.class"codebase="/Myfile"jreversion="1.2"width="300"height="260">PlugintagOBJECTorEMBEDnotsupportedby注:另外,在plugin中还可以增加如下的选项,以便控javaappletaligin:取值是“bottom“topmiddle”、”或“right页面的左面,页面的其它部分在右面。Hspace:指定javaapplet与左右对比如文字图象等之间的距Vspace:指定javaapplet与<jsp:plugintype="applet" vspace="60">PlugintagOBJECTorEMBEDnotsupportedbyuseBean该用来创建并使用一个javabeans,是非常重要的一个动作,在第6章详细讨论。Sun公司的倡导是:用HTML完成JSP页面的静态 完成动态部分,实现真正意义上的静态和动态分割第3JSP有些对象不用就可以在 页面的部分使用这就是的内置对JSP的内置对象有:resquest、response、sessionapplicationout。以下一一介绍esponse和equest对象是JP的内置对象较重要的两个,这两个前,要先对HTTP协议WodWideWb底层协议作简单介绍。WordWideWeb是怎样运行的呢?在浏览器上键入一个正确的网址后,若一切顺利,网页就出现了。例如,在浏览器输入栏中键入 ,Yahoo的主页就出现在浏览器窗口这背使用浏览器从获取HTML页面时,实际在使用HypertextTransferProtocol(HTTP)。HTTP协议规定了信息在Internet上的传输从获取页面时,浏览器在上打开了一个对网络服务器的连接,并发出请求。服务器收到请求后回应,所以HTTP协议被称作“请求和响应”协议浏览器请求有某种结构,HTTP请求包括一个请求行、头域和可 o.htm这是对: 上页面o.htm的HTTP请求的子。首行是请求行,规定了请求的方法、请求的资源及使用的HTTP上例中,请求的方法是“T”方法,此方法获取特定的资源。上例中GET方法用来获取名为.htm的网页其它请求方法包括OST,HAD,DET,TRACE及PUT方法等。此例中的第二行是头(header。Host头规定了上文件的Internet地址。此例中,主机是 HTP内容HTML表单上Submit键时,该表单ACTION=“POST”或ACTION=“GET”特征,输入表单的内容都被发送到服务器上。该表单内容POST方法或GET方法在请求的信服务器在收到请求时,返回HTTP响应。响应也有某种结构,每HTTPJP协议、状态代码及文本信息。例如,若服务器请求出错,则状态行返回错误及对错误的描述,比如HTT/1.1404ObjectNotFond200OK”的状态行。requestHTTP通信协议是客户与服务器之间一种提交(请求)信息与响应信息(request/respone)的通信协议。在JSP中,内置对象request封客户通常使用HTML表单向服务器的某个JSP页面提交信单 method=get| “提交信息的目的地页面提其中<Form>是表单method取值get或postGet方法和post方法的主要区别是:使get方法提交的信息会在提交的过程中显示在浏览器的地址栏中,而post方法提交的信息不会显示在地址栏中。提交包括:通过文本框、列表、文本区等,例如:<FORMaction="tom.jsp"method=“post”<INPUTtype="text"name="boy"value=“ok”<INPUTTYPE="submit"value="送出"name=该表单使用post方法向页面to.jsp提交信息,提交信息的ok按钮向服务器的JSP页面tom.jsp提交信息。request对象可以getParameter(Strings)方法获取该表单通过text提交的信息,比如:获取客户提交的信息request向tree.jsp提交信息:Iamastudent。tree.jsp通过request对象获取表单提交的信息:包括text的值以及按钮的值。在本章中所涉及到JSP页面都保存Web服务的根:Root中,即D:tomcat/jakarta-tomcat-4.0/webapps/Root中。例子1(如图3.1所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<FORMaction="tree.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="Enter"<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<P>获取文本框提交的<%String<P>获取按钮的名<%String 3.1提交信息与获取信在下面的例子2中,Example3_2.jsp通过表单向自己提交一个正数,然后计算这个数的平3.2计算数的例子2(如图3.2所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONT action="Example3_2.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="Enter"<%StringtextContent=request.getParameter("girl");doublenumber=0,r=0;}try{number=Double.parseDouble(textContent);{r=Math.sqrt(number);out.print("<BR>"+String.valueOf(number)}{out.print("<BR>"+"请输入一个正数}} {out.print("<BR>"+"请输入数字字符}注:使用request对象获取信息时要格外在上面的例子中StringtextContent那么,JSP引擎在运行这个JSP页面生成的字节码文件时,会使用了空对象,因为在这个字节码被执行时(客户请求页面时,客户可能还没有提交数据,textContent还没有被创建。如果你使用了空对象,即还没有创建对象,就使用了该对象,Java示出现了NullPointerException异常,当然如果你不使用空对象就不会出现异常。我们可以象上述例子为了避免在运行时Java认为我们StringtextContent=request.getParameter("girl");}处理汉字信息当用request对象获取客户提交的汉字字符时,会出现乱码问题,的字符串用ISO-8859-1进行编码存放到一个字节数组中,String str=newString(b);正确的显示。下面的例3对例1按上述办法做了改动,并将按钮上的字变成汉语,在文本框里输入:“苹果:apple:125$”,然后提交给3(如图3.3示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<FORMaction="tree.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="提交"<%@pagecontentType="text/html;charset=GB2312"<P>获取文本框提交的<%StringtextContent=request.getParameter("boy"); textContent=newString(b);<P>获取按钮的名<%StringbuttonName=request.getParameter("submit"); buttonName=newString(c);3.3提交和获取含有汉字的信常用方法举例当客户一个页面时,会提交一个HTTP请求给服务器的引擎,这个请求包括一个请求行、 头和信息体,如下列host:localhost:8080accept-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论