计算机网络原理课件_第1页
计算机网络原理课件_第2页
计算机网络原理课件_第3页
计算机网络原理课件_第4页
计算机网络原理课件_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

Web程序设计计算机网络原理、技术及应用Web程序设计计算机网络原理、技术及应用第1章Web基础第2章Web服务器的架设和管理第3章HTML和XML基础第4章网页设计与制作第5章客户端开发

第6章服务端开发目录第1章Web基础目录第6章服务端编程6.1B/S三层体系结构与Web服务器脚本程序

6.2Java程序设计基础6.3JavaBeans6.4JSP技术6.5JDBC与数据库编程6.6综合举例6.7Java开发工具简介第6章服务端编程6.1B/S三层体系结构与Web服6.1B/S三层体系结构与Web服务器脚本程序B/S三层体系结构脚本引擎与服务端脚本程序6.1B/S三层体系结构与Web服务器脚本程序B/S三层体B/S三层体系结构B/S三层体系结构浏览器层Web服务器层.数据库服务器层三层体系架构的特点瘦客户端应用突破局域网,分布到整个InternetB/S三层体系结构B/S三层体系结构服务端脚本程序什么是脚本引擎脚本引擎就是指脚本程序的运行环境,负责脚本程序的解释,来具体处理用相应脚本语言书写的脚本命令。例如:ASP结构的,IIS组件JSP机构的,Tomcat应用服务器服务端脚本程序界定符<%…%>服务端脚本程序什么是脚本引擎服务端脚本程序举例<%@pagecontentType="text/html;charset=gb2312"%><html><head><title>Hello,JSP</title><%!Stringdatestr="";%></head><body><%out.println("你好,JSP!");%><br><%java.text.DateFormatdf=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm");java.util.Datenowdate=newjava.util.Date();datestr=df.format(nowdate);datestr=datestr.substring(0,16);%>现在的时间是:<%=datestr%></body></html>服务端脚本程序举例<%@pagecontentType=6.2Java程序设计基础

Java程序设计语言类与对象接口包(package)Java基础类库JavaApplet客户端程序JavaServlet服务器程序6.2Java程序设计基础Java程序设计语言Java程序设计语言程序设计语言过程式,20世纪80年代以前Pascal,Fortran,C,etc面向对象,20世纪90年代以后C++JavaJava的特点Java技术编写一次,到处运行Java程序设计语言特点Java没有主函数和全局函数Java没有全局变量Java没有结构和联合Java用包(Package)来分解命名空间Java没有独立的头文件没有执针Java程序设计语言程序设计语言类与对象类与对象的概念类(class)是包含数据和处理这些数据的过程的数据结构。对象(object)是用类来声明的数据结构,如果将类比作数据类型,对象就是相应数据类型的变量。类与对象类与对象的概念类的定义[修饰符]class<类名>[extends<父类名>][implements<接口名列表>]{成员变量声明;成员函数定义;}abstract,抽象类,抽象类必须包含至少一个抽象成员函数。抽象类不能够创建对象,需要用其派生类创建。final,最终类,说明一个类不能再派生子类。public,能被其他类访问的公有类,在其它包(package)里要使用该类,需要先用import导入,否则只能在他定义的package里使用。synchronicable,表示所有类的成员函数都是同步的。类的定义[修饰符]class<类名>[extends成员变量定义的一般形式成员变量定义的一般形式[修饰符]<类型><成员变量列表>;访问级别声明符privatepublicprotectedfinal(最终,初始化后不能再改变其值的变量)volatile(多线程变量)。静态成员变量修饰符static,此变量称为类变量,不加static的变量称为对象变量。成员变量定义的一般形式成员变量定义的一般形式成员函数定义的一般形式成员变量定义的一般形式[修饰符]返回值类型<方法名>([形式参数列表])[throws异常列表]{//函数体(Java程序代码)}修饰符privatepublicprotectedabstract(抽象方法,无方法体)synchronized(线程同步的方法)native(本机方法)静态成员函数static来声明静态成员函数,表明此方法为类方法,无static修饰的方法为对象方法。成员函数定义的一般形式成员变量定义的一般形式构造函数概念构造函数(constructor)是一种特殊的成员函数,用来在内存中建立具体的对象。构造函数的名称和类名称相同,一个类可以拥有几个带有不同参数的构造函数。构造函数的激活(invoke)注意事项构造函数不能描述为const和volatile构造函数不能是static,因为构造函数需要初始化类的成员变量,但静态构造函数不能访问成员变量。构造函数不能被继承。构造函数不能有返回值,也不可以是void。定义一个类时,必须明确定义除缺省构造函数和拷贝构造函数以外的所有其它构造函数。构造函数概念创建对象创建对象对象变量=new类(参数)激活构造函数创建对象创建对象类的定义举例定义了一个三角形图形类CTriangle(文档名为exa01.java)classCTriangle{privatedoublea,b,c,t;publicdoubles=0;CTriangle(doublex,doubley,doublez){a=x;b=y;c=z;}//计算三角形的面积publicdoubleArea(){t=(a+b+c)/2;s=Math.sqrt(t*(t-a)*(t-b)*(t-c));returns;}publicvoidout1(){Area();System.out.println("Area="+s);}}classMyTest01{publicstaticvoidmain(String[]args){CTrianglemyobj=newCTriangle(10,20,15);myobj.out1();}}类的定义举例定义了一个三角形图形类CTriangle(文档名类的定义举例—运行在Dos提示符下,执行javacexa01.java命令,编译,生成每个类的.class文件执行javaMyTest01,运行上述程序类的定义举例—运行在Dos提示符下,执行javacexa0类的构造函数激活次序举例定义了三个类A、B、C,其中C中包含两个对象成员,来展示对象构造函数的激活次序,文档名为exa02.javaclassA{intx,y;A(inta,intb){x=a;y=b;}A()//默认构造函数{x=0;y=0;System.out.println("Aconstructor\n");}}classB{B(){System.out.println("Bconstructor\n");}}classC{publicAa=newA();publicBb=newB();C(){System.out.println("Cconstructor\n");}}classMyTest02{publicstaticvoidmain(String[]args){CmyObj=newC();}}类的构造函数激活次序举例定义了三个类A、B、C,其中C中包含类的构造函数激活次序举例—运行执行javaMyTest02,输出结果为:AconstructorBconstructorCconstructor上述输出结果表明,如果一个类含有成员对象,则在创建类的对象时,将先创建类的成员对象,最后才是类的对象本身。类的构造函数激活次序举例—运行执行javaMyTest02封装和抽象封装(Encapsulation)是指对象可以拥有私有元素,将内部细节隐藏起来的能力。封装将对象封闭起来,管理着对象的内部状态。抽象则和对象的外部状态紧密相关,它通常用来描述对象所表示的具体概念、对象所完成的任务以及处理对象的外部接口。抽象处理的是对象的可见外部特征。访问级别修饰符关键词public,类中所有public成员构成类的接口,它们是类的抽象性的表现。关键词private,类中的private成员只能被类的成员函数、友元类或外部友元函数访问。从而实现类的封装性。关键词protected,类的protected成员可以被类的派生类成员访问。封装和抽象封装(Encapsulation)是指对象可以拥有类成员访问规则类成员访问规则类成员访问规则类成员访问规则静态成员概念支持封装和抽象的另外机制还包括关键词static。当一个成员被说明成static时,则该成员在程序中只有一个拷贝存在,而不是在每个对象中都有一个拷贝。所有的对象共享类中的静态成员。在一些面向对象的程序设计语言中,静态成员被称为类变量,或类属变量。举例classCS{staticinta;intb,c,d;};CSobjs[3];静态成员概念类的继承性与派生类概念从现存的对象出发建立一种新的对象类型,使它继承原对象的特点和功能,这就是对象的继承性。继承是许多层次对象的自然描述。从现存类派生出新类时,现存类称为基类(baseclass),派生出的新类称为派生类。派生类可以对基类作如下变化增加新的成员变量增加新的成员函数重新定义已有的成员函数,即:子类可以对父类的方法覆盖(overriding)或重载(overloading)。类的继承性与派生类概念多态子类可以对父类的方法覆盖(overriding)所谓覆盖,是指在子类中定义了与父类中同名的函数,这时将根据当前的对象类型执行子类中的代码,即父类中的代码被覆盖。运行时多态重载(overloading)所谓方法重载是类中含有同名,但特征参数(参数数量,参数类型)不同的方法,编译时通过形式参数确定要调用的方法。编译时多态多态子类可以对父类的方法覆盖(overriding)改变现有成员函数的属性派生类不能删除基类的成员变量和成员函数,实际上派生类往往是基类的扩充,是一种具体化和完善的过程类的派生是一种演化过程,即通过扩展、更改和特殊化从一个已知类出发来建立一个新的类。已知基类A建立一个派生类B,一般形式为:classBextendsA{//派生类B的成员说明};读作“类B由A派生”,它告诉编译器类B是一种A,对基类A所作的修改和添加在括号内给出。改变现有成员函数的属性派生类不能删除基类的成员变量和成员函数调试Java程序每个java文件有且只能有一个公有类,即public类,文件名必须和这个公有类的类名大小写完全一样。在要运行的类中有且只能有一个publicstaticvoidmain(String[]args)方法,这个方法就是主程序。运行一个Java程序,应该是在java命令后跟包含main函数的类名,而不是Java程序的文件名,即java<包含main方法的java类>,类名后面不能有.class等扩展名。如果在编译或运行时出现问题,还可能是类的路径问题。我们来看一下Java程序的运行过程,首先通过javac命令,将Java程序编译生成.class文件,即虚拟机要执行的代码,称之为字节码(bytecode)。然后,通过java命令,即通过java虚拟机来解释运行class文件。虚拟机通过classloader来装载这些字节码,即通常意义上的类。问题是,classloader从哪里知道java本身的类库及用户自己的类在什么地方呢?要解决这个问题,通常是通过系统环境变量种的类路径(classpath)来设置的。调试Java程序每个java文件有且只能有一个公有类,即pu接口(interface)C++与多重继承Java没有多重继承,可以通过接口来实现相应的功能。接口(Interface)是一组没有给出实现细节的操作(方法)的集合接口(interface)C++与多重继承创建接口一般形式publicinterface<Interfacename>[extends<Superinterface列表>]{成员变量声明(常量);成员函数(方法)声明;}public指示了接口可以在任何的包中任何的类中使用。如果你没有指定接口为public,那么接口就只能在定义接口的包中的类中使用。常量声明在接口中的常量可以是public、static和final方法声明接口中的方法不需要给出具体的实现代码。因此,所有定义在接口中的方法可以隐含地为publicabstact方法创建接口一般形式接口和类接口的定义和类的定义类似,但是接口不是一个类,而是对符合接口要求的类的一套规范。接口说明了实现接口的类该做什么而不指定如何去做,一个类可以实现一个或多个接口。实现一个接口声明类需要实现的接口,声明一个类实现一个接口需要使用implements关键字。提供接口中的所有方法的定义。实现接口的类继承了定义在接口中的常量,这些类可以使用简单的名字来引用接口定一中的常量。接口和类接口的定义和类的定义类似,但是接口不是一个类,而是对包(package)什么是包?管理大型名字空间,避免名字冲突,引入包(Package)的概念Java中的包其实指的就是目录,它可以更好地管理Java类(Class)和接口(Interface)包(package)什么是包?定义包使用package语句可以将一个编译单元(源程序文件)定义成包。如果使用package语句,编译单元的第一行必须无空格,也无注释,格式如下:package<包名>;举例例如:有一个java文件,文件名为B.java,内容如下:packagehao.yy;publicclassB{B(intyy,intmm,intdd){System.out.println("Year:"+yy+"Month:"+mm+"Date"+dd);}}编译执行javac-dd:\B.java命令,其中参数-d<目录>为指定输出文件的目录。因此,上述编译命令执行后将在d:\目录下,创建一个d:\hao\yy文件夹,该文件夹中包含了编译后的类文件B.class。定义包使用package语句可以将一个编译单元(源程序文件)使用包中的类和接口使用import语句,导入类或接口,或包含它们的包。例如:importjava.util.*;或者:importjava.util.Date;importjava.text.SimpleDate;publicclassmydate{publicstaticvoidmain(String[]args){//CreateadateformatterthatcanparsedatesoftheformMM-dd-yyyy.SimpleDateFormatbartDateFormat=newSimpleDateFormat("MM-dd-yyyy");//Createastringcontainingatextdatetobeparsed.Stringdd="6-22-2008";Datedate=bartDateFormat.parse(dd);//Sendtheparseddateasalongvaluetothesystemoutput.System.out.println(date.getTime());}}在每个引用的类和接口前面给出它们所在的包的名字包名.类名obj=new包名.<类名|接口名>();使用包中的类和接口使用import语句,导入类或接口,或包含Java基础类库java.lang包java.util包java.awt包java.swing包java.io包java.applet包java.beans包包Java基础类库java.lang包JavaApplet客户端程序概念JavaApplet是指用Java编写的能够在Web页中运行的小应用程序在java.applet包中,定义了Applet类,它是所有Applet应用的基类,所有的Applet小应用程序都必须继承该类。功能被Flash代替JavaApplet客户端程序概念JavaServlet服务器程序概念Servlet是专门为在Web服务器机器上运行而设计的Java程序,相当于运行于服务端的applet,与CGI程序一样,用于充当连接前端Web请求与后端数据资源的中间层组件。编写Servlet非常麻烦,正在被JSP技术取代JavaServlet服务器程序概念6.3JavaBeans什么是JavaBeansJavaBean的属性、方法和事件6.3JavaBeans什么是JavaBeans什么是JavaBeansJavaBeans是符合一定规范的Java类这样的Java类将对应于一个独立的.java文件,在绝大多数情况下,他是一个public类型的类。JavaBeans是一种规范,一种在Java(包括JSP)中可重复使用的Java组件的技术规范。使用JavaBeans可以充分利用组件的可重复使用的特性并增加程序的可读性。什么是JavaBeansJavaBeans是符合一定规范的JJavaBean的属性JavaBean有四种类型的属性,分别是:单值属性、索引属性、关联属性和限制属性单值属性,定义一个包含一个值的数据成员,并为其定义一对设置(set)/获取(get)属性的方法,以便于外部与其发生联系。publicvoidset<PropertyName>(<PropertyType>propertyValue)//设置器public<PropertyType>get<PropertyName>()//获取器索引属性,类似于Java中的数组,包括若干个数据类型相同的元素,可以通过整数索引值访问其中的属性,因此称索引属性。关联属性,当修改这类属性时,将发送一个通知给其他元素(如:Applet、application或其他JavaBean),如果与该JavaBean中的某个属性相关联,就会注册该属性。外部部件称为监听器。限制属性,当需要修改一个限制属性值时,接受属性的外部部件首先要件检查这个属性的合理性再决定是否接受修改。JavaBean的属性JavaBean有四种类型的属性,分别JavaBean的方法JavaBean归根到底是一个Java类,所有的public方法都可以通过对象外部直接调用。JavaBean中常用的方法是单值属性设置器/获取器,set属性值get属性值。JavaBean的方法JavaBean归根到底是一个JavaJavaBean的事件JavaBean和其他软件组件交流信息的主要手段是发送和接受事件AWT事件模型一个事件源可以注册事件监听器对象,当事件源检测到某种事件发生时,将激活检测器对象中一个相应的事件处理方法。事件的监听原理是:首先事件源必须对需要发送的事件进行注册,然后注册事件监听器,并说明该事件源所发生的事件向什么组件发送,也就是说,在事件源组件中实现方法并在监听组件中注册该事件源。JavaBean的事件JavaBean和其他软件组件交流信息JavaBean应用举例一个NameCard的JavaBean代码如下(文件名NameCard.java):packagecards;publicclassNameCard{StringName,Address;publicNameCard(){this.Name="John";this.Address="No,Road,City,Country";}publicvoidsetName(StringmyName){this.Name=myName;}publicStringgetName(){return(this.Name);}publicvoidsetAddress(StringmyAddress){this.Address=myAddress;}publicStringgetAddress(){return(this.Address);}}JavaBean应用举例一个NameCard的JavaBeaJavaBean应用举例—编译与调试存储在Web应用特定的文件夹中,即Web应用根目录中“WEB-INF\classes\cards”下,用javacNameCard.java编译生成NameCard.class,该文件将存储在cards包中,即cards子文件夹中。当JavaBean完成后,为了测试JavaBean的功能,可以在bean类中临时增加main方法,借用main()方法来调试beanJavaBean的主要应用是将JavaBean应用于JSP页面中JavaBean应用举例—编译与调试存储在Web应用特定的文6.4JSP技术JSP的运行环境JSP的语法结构JSP中的数据类型及其转换JSP内置对象在JSP中使用JavaBeanJSP中的文件与文件夹操作JSP中的参数传递方法6.4JSP技术JSP的运行环境什么是JSP?什么是JSP?使用Servlet开发服务端中间层逻辑,实在是太复杂了。为此,Sun公司于1999年推出JSP(JavaServerPages)技术。JSP是一种Java平台技术,它是在传统的HTML文档(*.htm,*.html)中加入Java脚本程序(Scriptlet)和JSP标记来构成的,它包装了JavaServlet系统界面,用户可以在JSP页面上直接书写Java代码,这样就大大简化了Java和Servlet的使用难度。作为一种服务器脚本语言,JSP是在编译成Servlet后才能实际运行。当用户浏览.jsp网页时,首先在服务器端执行.jsp文档中服务端代码,然后把执行结果传送到客户端浏览器,基本上与浏览器无关。什么是JSP?什么是JSP?JSP的运行环境运行与开发环境安装Java环境安装JavaVM(JRE),Tomcat需要JavaVM的支持。安装Tomcat应用服务器。Apache服务器可以根据需要安装Apache服务器。JSP的运行环境运行与开发环境建立一个JSP程序的测试站点建立测试站点的主目录修改Tomcat的默认设置将Tomcat默认的Web服务将端口号为8080改为80。定义虚拟目录增加新Web应用的上下文<Contextpath="/myjsp"docBase="d:\MyJSP\"debug="0"reloadable="true"privileged="true"/>运行jsp程序/myjsp/1.jsp。建立一个JSP程序的测试站点建立测试站点的主目录JSP的语法结构JSP元素JSP文档是通过在HTML文档中加入Java脚本程序构成的。Java脚本程序代码用“<%”和“%>”标记括起来JSP元素的类型脚本元素规范JSP中所使用的Java代码指令元素针对JSP引擎控制转译后的Servlet的整个结构动作元素主要连接到用到的组件(如JavaBeans和Plugin),另外它还可以控制JSP引擎的行为。JSP的语法结构JSP元素JSP指令概念JSP指令是JSP的引擎。他们不直接产生任何可视的输出,只是指示引擎如何处理JSP页面中的内容。JSP指令由<%@…%>标记,一般形式是:<%@指令名属性1=“属性值”属性2=“属性值”...属性n=“属性值”%>控制JSP引擎的行为。主要的两种指令是page和includeJSP指令概念Page指令一般形式<%@page

[language="java"]

[extends="package.class"]

[import="{package.class|package.*},..."]

[session="true|false"]

[buffer="none|8kb]

[autoFlush="true|false"]

[isThreadSafe="true|false"]

[info="text"]

[errorPage="relativeURL"]

[contentType="mimeType[;charset=characterSet]"|

"text/html;charset=ISO-8859-1"]

[isErrorPage="true|false"]

%>

可选项language属性,所使用的脚本语言。例如,<%@pagelanguage=“Java”%>。import属性,脚本元素中使用的类,与Java中的import声明作用相同,应是类的全名,或者类所在的包。例如:<%@pageimport="java.util.Date"%><%@pageimport="java.io.*"%>(java.io包中的所有类在本页中都可以使用)Page指令一般形式Page指令(续1)可选项session属性,是否使用session对象。errorPage属性,设置异常处理网页。IsErrorPage属性,当前网页是否是另一个JSP网页的异常处理网页。contentType属性,输出到客户端的MIME类型和字符集。默认的字符集是ISO-8859-1。例如,使用中文字符集:<%@pagecontentType="gb2312"%>Page指令(续1)可选项Page指令举例可以在几乎所有的JSP页面顶部找到指令page,使用page指令(atpage)可以定义网页的处理方式,如到何处寻找Java类支持等。例如:<%@pageimport="java.util.Date"%><%@pageerrorPage="errorPage.jsp"%>(当出现错误时的错误处理网页)<%@pagesession="true"%>Page指令举例可以在几乎所有的JSP页面顶部找到指令paginclude指令概念在JSP网页中包含其他文件的指令,它是在JSP引擎将它转译成Servlet时产生作用的指令一般形式<%@includefile="插入文件的url"%>被包含进的文件必须符合JSP的语法,应是静态文本、指令元素、脚本元素和动作元素。include指令概念变量声明概念JSP的声明用于定义页面级的变量,如果代码太多的话,最好写入一个单独的Java类中。声明由<%!…%>定义。必须通过分号来结束变量声明,同时任何内容必须是有效的Java语句,例如:<%!inti=0;%>。注意,声明后面的分号不能省略。变量声明概念表达式概念表达式是常量、变量、函数、运算符、括号连接而成的式子。在程序设计中,通过表达式完成对数据的运算,以及为变量赋值。在JSP文档中,可以将表达式的结果直接输出到页面中。一般形式是:<%=表达式%>。举例<%=i%>(输出变量i的值)<%="Hello"%>(输出字符串常量)表达式概念代码段/脚本片段JSP代码段或脚本片段包含在“<%…%>”标记对内举例<%for(inti=1;i<=4;i++){%><h<%=i%>>你好</h<%=i%>><%}%>代码段/脚本片段JSP代码段或脚本片段包含在“<%…%>注释在文档中加入HTML注释,用户可以通过查看页面源代码来看到这些注释的内容。如果不想让用户看到注释内容,应将其嵌入到<%--…--%>标记对中,一般形式是:<%--注释内容--%>注释在文档中加入HTML注释,用户可以通过查看页面源代码来看举例编写一个jsp文档,显示网页的访问次数首先定义一个统计访问次数的文档,文档名为mycount.jsp<%!privateintaccessCount=0;%><tableborder="0"width="100%"height="60"bgcolor="#FFFF00"><tr><tdwidth="20%"height="53">主机名:<%=request.getRemoteHost()%></td><tdwidth="20%"height="53">访问次数:<%=++accessCount%></td><tdwidth="60%"height="53">当前时间:<%=newDate()%></td></tr></table>举例编写一个jsp文档,显示网页的访问次数举例(续)定义一个jsp页面,包含上述文件,输出一个随机数,mypage.jsp文档内容如下:<%@pageimport="java.util.*"%><html><head><title>JSP中的文件包含</title></head><body><%!RandomRdmNumber=newRandom();%><%@includefile="mycount.jsp"%><%out.println(RdmNumber.nextInt(100));//输出100以内的随机整数%></body></html>举例(续)定义一个jsp页面,包含上述文件,输出一个随机数,JSP中的数据类型及其转换整数类型和字符串类型的转换字符串类型和和日期型数据的转换字符串类型和字符串数组类型的转换数组类型和集合类JSP中的数据类型及其转换整数类型和字符串类型的转换整数类型和字符串类型的转换将字串String类型转换成整数int类型通过Integer类可以将字符串转化为某种进制的整数数据,一般形式是:inti=Integer.parseInt([String]);或inti=Integer.parseInt([String],[intradix]);或inti=Integer.valueOf(my_str).intValue();将整数int类型数据转换成字串String类型数据Strings=String.valueOf(i);或Strings=Integer.toString(i);或Strings=""+i;对于Double,Float,Long类型数据和字符串类型之间的转换方法大同小异longln=java.lang.Long.parseFloat(“123.5”);,或floatf=Float.valueOf("123.5").floatValue()。整数类型和字符串类型的转换将字串String类型转换成整数i字符串类型和和日期型数据的转换在数据库中,通常有Datetime类型的数据字段。在MySQL或MSSQL中,可以直接把字符串插入日期类型的列中,SQL会隐式做格式转换,将字符串类型转为日期类型。但是,字符串的格式必须是yyyy-mm-dd或yyyymmdd形式,例如:2008-12-10或20081210。字符串类型和和日期型数据的转换在数据库中,通常有Dateti字符串类型和字符串数组类型的转换在JSP页面中,一种常用的操作就是将一个字符串split成一个字符串数组,或者将一个字符串数组合并成一个字符串。例如,将string=“aa,bb,cc”转换成Vector数据类型,分别包含三个字符串元素“aa”、“bb”、“cc”。StringstrData="aa,bb,cc";Stringstrlist[]=newString[20];strlist=strData.split(",");字符串类型和字符串数组类型的转换在JSP页面中,一种常用的操数组类型和集合类数组类型使用数组避免了同步、额外的方法调用和不必要的重新分配空间所带来的消耗。Vector类当数组中元素的个数不确定时,可以使用java.util.Vector类Vector集合只能存放java.lang.object对象,不能用于存放基本类型数据ArrayList类ArrayList和Vector都是使用数组来控制集合中的对象,当从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素时,两者所花费的时间相同。Vector是同步的,它的一些方法保证了Vector中的对象是线程安全的。ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。数组类型和集合类数组类型JSP内置对象什么是内置对象内置对象是由开发环境所定义的具有特定功能的对象,在JSP脚本段中,用户可以直接使用。常用内置对象request对象response对象out对象session对象application对象config对象page对象exception对象JSP内置对象什么是内置对象request对象功能通过该对象可以获取客户端的输入信息。可以得到请求的参数、请求类型(GET、POST、HEAD等)以及HTTPheaders(cookies、referer等)等信息。这是一个javax.servlet.HttpServletRequest对象。常用的方法getCookie()、getHeaders()、getAttribute()、getMethod()、getParameter()和getParameterName()等例如:<%Stringname=request.getParameter("userName");out.println(name);%>request对象功能response对象功能向客户端返回请求。返回请求信息时,输出流要进行缓存。它是一个javax.servlet.HttpServletResponse对象。常用方法addCookie()、addHeader()、sendError()和sendRedirect()等response对象功能out对象功能将结果输出到客户端。常用方法print(),println(),newLine()例如:<%out.println("Hello");%>out对象功能session对象功能Session对象是JSP为每一个会话而建立的个人对象,可以存储及提供个别用户独享的永久或半永久信息。它是一个与request相关的javax.servlet.http.HttpServletSession对象。会话(session)是指一个用户和Web服务器之间的一次链接。当用户使用浏览器登录到Web服务器、并初次浏览一个JSP应用的某个网页开始、直到用户离开网站或超时未继续浏览该网站网页为止,之间的浏览操作算作一次会话(Session)。session对象功能application对象功能可存储并提供给一组JSP应用所有用户的共享信息,有效范围为构成该JSP应用的所有JSP页面。是一个javax.servlet.ServletContext对象会话(session)是指一个用户和Web服务器之间的一次链接。当用户使用浏览器登录到Web服务器、并初次浏览一个JSP应用的某个网页开始、直到用户离开网站或超时未继续浏览该网站网页为止,之间的浏览操作算作一次会话(Session)。application对象功能其他对象config对象用于传递在Servlet程序初始化时所需的信息。pageContext对象该对象提供了对页面上的所有对象以及命名空间的访问,用于管理网页属性。page对象当前页面,相当于Java中的this。exception对象错误处理对象,用于处理捕捉到的异常。其他对象config对象举例—用户登录页面编写一个jsp文档,完成一个登录界面,输入用户名和密码,如果输入guest则转移到一个默认的首页,如果不输入用户名,则重新回到该页,直到输入正确的用户名和密码,此时重定向到合法的网页。举例—用户登录页面编写一个jsp文档,完成一个登录界面,输入举例—用户登录页面(代码)<!--login.jsp--><html><head><title>login</title></head><body><%StringuserName=request.getParameter("userName");if(userName!=null){if(userName.equals("guest"))response.sendRedirect("/");elseresponse.sendRedirect("/");}%>举例—用户登录页面(代码)<!--login.jsp--举例—用户登录页面(代码)<tableborder="0"cellpadding="0"width="100%"height="100%"><tr><tdwidth="100%"> <tableborder=2cellspacing=0cellpadding=0width=300align=center> <formaction="login.jsp"method="GET"> <trheight=50> <tdalign=centerstyle="font-size:20;font-weight:bold;color:#000075">用户登录</td> </tr> <tr><tdstyle="font-size:16">用户名<inputtype=textname=userName></td></tr> <tr><tdstyle="font-size:16">密码<inputtype=textname=userPassword></td></tr> <tr><tdalign=center><inputtype="submit"value=登录></td></tr> </form> </table></td></tr></table></body></html>举例—用户登录页面(代码)<tableborder="0"举例—显示在线人数编写一个统计会话人数的java类,代码内容如下(文档名SessionCounter.java)packagepub;importjavax.servlet.*;importjavax.servlet.http.*;publicclassSessionCounterimplementsHttpSessionListener{privatestaticintactiveSessions=0;publicvoidsessionCreated(HttpSessionEventse){activeSessions++;}publicvoidsessionDestroyed(HttpSessionEventse){if(activeSessions>0)activeSessions--;}publicstaticintgetActiveSessions(){returnactiveSessions;}}举例—显示在线人数编写一个统计会话人数的java类,代码内容举例—显示在线人数(续1)编写调用该SessionCounter.java的jsp文档,文档名myonline.jsp,内容如下:<html><head><metahttp-equiv="refresh"content="60"></head><body><%@pageimport="pub.SessionCounter"%>在线人数:<%=SessionCounter.getActiveSessions()%></body></html>举例—显示在线人数(续1)编写调用该SessionCount举例—显示在线人数(续2)修改d:\MyJSP\WEB-INF\web.xml,在<web-app>…</web-app>内,添加如下内容:<!--Listeners--><listener><listener-class>pub.SessionCounter</listener-class></listener>举例—显示在线人数(续2)修改d:\MyJSP\WEB-IN在JSP中使用JavaBean使用JavaBean可以更好的将业务逻辑代码和JSP的HTML标记进行分离,便于系统的维护一般形式<jsp:useBeanid="实例名"class="包.类"scope="page|request|session|application"/>参数id指定一个JavaBean类的实例名,如果这个实例已经存在,将直接引用这个实例;如果这个实例不存在,将通过后面class参数中的定义新建一个类的实例。Class参数设置存储JavaBean的路径和类的名称,例如class=“cards.NameCard”,则表明要使用Web应用根目录中“WEB-INF\classes\cards”下的一个NameCard.class文件,其中cards是包名,NameCard为JavaBean对应的Java类名。Scope用于定义id这个实例存在的范围在JSP中使用JavaBean使用JavaBean举例--JavaBean应用举例一个NameCard的JavaBean代码如下(文件名NameCard.java):packagecards;publicclassNameCard{StringName,Address;publicNameCard()//默认构造函数{this.Name="John";this.Address="No,Road,City,Country";}publicvoidsetName(StringmyName){this.Name=myName;}publicStringgetName(){return(this.Name);}publicvoidsetAddress(StringmyAddress){this.Address=myAddress;}publicStringgetAddress(){return(this.Address);}}举例--JavaBean应用举例一个NameCard的Jav举例--JavaBean应用举例(续)使用JavaBean:<%@pagelanguage="java"%><jsp:useBeanid="mycard"class="cards.NameCard"scope="application"/><html><body><%mycard.setName("HaoXW");mycard.setAddress("No.27ShandaSouthernRoad,Jinan,China");%>姓名:<%=mycard.getName()%><br>地址:<%=mycard.getAddress()%><br></body></html>举例--JavaBean应用举例(续)使用JavaBean:JSP中的文件与文件夹操作在基于Web的作业管理系统中,在Web应用的根目录下,包含一个homeworkdata文件夹,该文件中包含了不同的子文件夹,每一个子文件夹对应一门课程,课程子文件夹中又包含不同的子文件夹,每个子文件夹对应一位任课教师,在每个任课教师子文件夹中,有一系列子文件夹,每个子文件夹保存一名同学的课程作业。JSP中的文件与文件夹操作在基于Web的作业管理系统中,在WJSP中的文件与文件夹操作--示例代码1<%@pagecontentType="text/html;charset=GBK"%><%@pageimport="java.sql.*"%><%@pageimport="java.io.*"%><jsp:useBeanid="workE"scope="page"class="pub.connedu"/><jsp:useBeanid="workhomework"scope="page"class="pub.connhomework"/><jsp:useBeanid="workc"scope="page"class="pub.ISOtoGb2312"/><%!ResultSetrs1=null,rs2=null;Stringcoursedm="dxjc";//课程代码Stringteacher_account="ll01",teacher_accountx="ll02";//教师帐号Stringstudentid="20080102016";//学生账号Stringpath1="",path2="";//文件(夹)物理绝对路径String[]temp=null;//存放当前目录中所有的文件和子目录的绝对路径名字的字符串String[]dlist=null,flist=null;//分别存放子文件夹和文件的集合%>JSP中的文件与文件夹操作--示例代码1<%@pagecJSP中的文件与文件夹操作--示例代码2<%path1=request.getRealPath("");//取Web应用的根目录path1+="\\homeworkdata\\"+coursedm;//将进行文件复制的目录path1+="\\"+teacher_accountx;path1+="\\"+studentid+"\\";Filed1=newFile(path1);//建立代表Sub目录的File对象,并得到它的一个引用

path2=request.getRealPath("");path2+="\\homeworkdata\\"+coursedm;//将path1目录下的所有文件复制到path2中path2+="\\"+teacher_account;//和path1不同的地方,即对应的教师子目录不同path2+="\\"+studentid+"\\";Filed2=newFile(path2);if(!d2.exists()){d2.mkdirs();//新建path2对应的子目录out.println("newafolder"+path2+"<br>");}JSP中的文件与文件夹操作--示例代码2<%JSP中的文件与文件夹操作--示例代码3//将path1目录下的所有文件复制到path2中FileoldFile,newFile,tempFile;if(d1.exists())//检查path1对应的子目录是否存在{temp=d1.l

温馨提示

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

评论

0/150

提交评论