中山大学网站开发与网页设计实用教程2012年下半年作业2.doc_第1页
中山大学网站开发与网页设计实用教程2012年下半年作业2.doc_第2页
中山大学网站开发与网页设计实用教程2012年下半年作业2.doc_第3页
中山大学网站开发与网页设计实用教程2012年下半年作业2.doc_第4页
中山大学网站开发与网页设计实用教程2012年下半年作业2.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、 动态网站特点答:动态网站特点网站的特点有以下4点:(1)动态网页以数据库技术为基础,可以大大降低网站维护的工作量;(2)采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等;(3)动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页;(4)动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。2、Active Server Pages 独具特点答:Active Server Pages 独具特点有以下9点(1)使用 VBScript 、 JScript 等简单易懂的脚本语言,结合 HTML 代码,即可快速地完成网站的应用程序。(2) 无须 compile 编译,容易编写,可在服务器端直接执行。(3) 使用普通的文本编辑器,如 Windows 的记事本,即可进行编辑设计。(4) 与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML 码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB 服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。(5)Active Server Pages 能与任何 ActiveX scripting 语言相容。除了可使用 VBScript 或 JScript 语言来设计外,还通过 plug-in 的方式,使用由第三方所提供的其他脚本语言,譬如 REXX 、 Perl 、 Tcl 等。脚本引擎是处理脚本程序的 COM(Component Object Model) 物件。(6)Active Server Pages 的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。(7)可使用服务器端的脚本来产生客户端的脚本。(8) 物件导向( Object-oriented )。(9)ActiveX Server Components(ActiveX 服务器元件 ) 具有无限可扩充性。可以使用 Visual Basic 、 Java 、 Visual C+ 、 COBOL 等编程语言来编写你所需要的 ActiveX Server Component 。3、FOR关键字Step什么作用?答:例如: 通过c:forEach就可以遍历listTest了。这是jsp中最普遍用到的循环遍历集合的方法。开发中一般会有很明确的分层,最常用的MVC模式就是提倡把架构分成ModelViewController三层,这样有利于项目的开发与维护,如果页面上嵌入过多的java代码会使得调试及后期维护花费的代价与日俱增,所以不提倡这样做。4,ASP对象Request主要属性和方法答:Request对象是ASP中最为常用的对象之一。它用来连接客户端的Web页(.HTML文件)和服务器端的Web页(.ASP文件),使它们之间可以进行数据交换。Request对象允许ASP查询有关与之交互的客户程序信息,它代表由客户程序发出的HTTP请求报文。Requset的属性方法如下:1TotalBytes属性Request对象只提供了一种TotalBytes属性。该属性用来获取客户端接收的所有数据的字节大小,而Counter是指定一个变量来接收客户端在请求中发送的总字节数。实际编程中该属性很少使用。TotalBytes引用的一般格式如下。Counter=Request.TotalBytes下面的ASP脚本用变量Counter获取Request数据集合中的字节数。%Dim bytecountbytecount=Request.TotalBytes%2BinaryRead方法Request对象只提供了一种方法,即BinaryRead方法。这种方法并不常用,它以二进制的方法来获取客户端传送的数据。Variant参数包含由该方法返回的无符号数的数组。Count参数在执行前,指定要从客户端读取的字节数。此方法返回后,将包含从客户机成功获取的字节数。其返回值为一个数组,该方法需要一个参数,即每次读取字节的大小。BinaryRead引用的一般格式如下。variant=Request.BinaryRead(count)下面的ASP脚本是用binread数组来存储,用BinaryRead方法读取的数据。%Dim binreadDim bytecountbytecount = Request.TotalBytesbinread = Request.BinaryRead(bytecount)%.1.2 读取HTTP查询字符串中的数据在网页中数据传递一个很重要的方式就是通过链接地址。如“/blog/ showlog.asp? cat_id=5&log_id=657”。当用户将这样的字符串作为链接地址发送到服务器时,服务器就会通过QueryString集合获取相关的值。1QueryString集合QueryString集合检索HTTP查询字符串中变量的值。HTTP查询字符串由问号后的值指定,几个不同的进程都可以生成查询字符串。variable在HTTP查询字符串中指定要检索的变量名。要在多个数据集合的一个中引用QueryString变量,请指定index的值。index参数可以是1到Request.QueryString (variable).Count中任意值。如果没有指定index的值,引用多个QueryString变量中的某个变量时,返回的数据是逗号分隔的字符串。在Request.QueryString中使用参数时,服务器分析发送给请求的参数,并返回指定的数据。如果应用程序需要未分析的QueryString数据,可以通过调用不带参数的Request.QueryString检索到这个数据。QueryString集合所对应的提交方式只能是Get方式,而不能使用Post方式来提交,所以用户在编写程序时一定要注意前后的对应关系。QueryString集合是在ServerVariables集合中QueryString变量的分析版本。它可以以名称检索QueryString变量。Request.QueryString(参数)的值是出现在QueryString中所有参数的值的数组。通过调用Request.QueryString(parameter).Count可以确定参数有多少个值。如果变量未关联多个数据集,则计数为1;如果找不到变量,计数为0。QueryString集合引用的一般格如下。Request.QueryString(variable)(index)|.Count2QueryString示例下面这个示例是QueryString最基本的使用方法,用来获取.HTML文件中以POST方式发送的数据。%Dim xingmingDim mimaxingming=Request.QueryString(xm)mima=Request.QueryString(mm)If xingming=yonghu then 判断用户名是否为“yonghu” If mima=xxxthen 判断密码是否为“xxx” Response.Write登录成功! 密码正确则“登录成功” Else Response.Write登录失败! 密码错误则“登录失败” End ifElse Response.Write用户名不存在! 用户名不正确则“用户名不存在”End if%3使用QueryString获取表单元素在上网的时候经常会遇到会员登录的界面,下面就来制作一个用户在客户端浏览器输入用户名及密码登录后,并提交到服务器端的Log.asp文件。浏览器页面的Log.htm详细代码如下:htmlheadmeta name=GENERATORcontent=Microsoft FrontPage 5.0meta name =ProgId content=FrontPage.Editor.Documentmeta http-equiv=Content-Type content=text/html;charset=gb2312title新建网页 /title/headbodyform ACTION=log.aspMETHOD=GETNAME=login用户名:input type=text name=nm size=20 br密码:nput type=password name=pwd size=20 brinput type=submit name=bt value=提交input type=reset name=bt value=重写/form/body/html图4-1 登录界面Log.htm文件显示界面如图4-1所示。当数据被提交到服务器端的log.asp文件时,在log.asp文件中使用Request对象获取到用户提交的数据,判断该用户是否合法,服务器端的Log.asp文件具体内容如下:%Dim UserNMDim PassWDUNM=Request.QueryString(nm)PWD= Request.QueryString(pwd)If UNM=user then 判断用户名是否为“user” If PWD=123then 判断密码是否为“123” Response.Write登录成功! 密码正确则“登录成功” Else Response.Write登录失败! 密码错误则“登录失败” End ifElse Response.Write用户名不存在! 用户名不正确则“用户名不存在”End if%在图4-1所示中,若在用户名中输入“user”,密码中输入“123”,就会调用log.asp文件,其显示结果如图4-2所示。图4-2 登录成功在log.htm文件中使用了Get方法,此时输入到表单的数据就要发送到URL字符串指定的HTTP服务器上,可以看到它是加在URL后面的,是通过一个“?”来隔开。ASP并不是在HTTP的Get中分析附加在URL后面的字符串,而是允许ASP开发人员把这种数据作为QueryString对象的集合来处理。4使用QueryString获取同名表单元素数值在hometown.htm文件中获取多个同名表单的返回值,文件内容如下:htmlheadmeta name=GENERATORcontent=Microsoft FrontPage 5.0meta name =ProgId content=FrontPage.Editor.Documentmeta http-equiv=Content-Type content=text/html;charset=gb2312title新建网页 /title/headbodyform ACTION=hometown.aspMETHOD=GETNAME=hometown请输入你所居住的城市:br城市1:input type=text name=city size=20 br城市2:input type=text name=city size=20 br城市3:input type=text name=city size=20 brinput type=submit name=bt value=提交查询/form/body/htmlhometown.htm文件的显示界面如图4-3所示。在图4-3所示中,若单击【提交查询】按钮,就可以把3个城市的名称提交到服务器。要想输出其中的每一个值,可以采用以下代码来解决。在hometown.asp文件中输出每一个城市的值,文件内容如下:%For each item In ResquestQuerystring(city)Response.Write item& 输出每个城市名并且换行next%注意:For each item In的用法,在ASP中它是最常见的显示集合所有内容的一种方法。在执行hometown.asp文件后的结果,如图4-4所示。图4-3 显示界面 图4-4 输出城市名5、session属性和方法答: Session一般在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。Session 中保存和检索的信息不能是基本数据类型如 int, double等,而必须是java的相应的对象,如Integer, Double. Httpsession具有如下API: getId此方法返回唯一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当作键名用。 GetCreationTime返回session被创建的时间。最小单位为千分之一秒。为得到一个对打印输出很有用的值,可将此值传给Date constructor 或者GregorianCalendar的方法setTimeInMillis. GetLastAccessedTime返回session最后被客户发送的时间。最小单位为千分之一秒。 GetMaxInactiveInterval返回总时间(秒),负值表示session永远不会超时。 getAttribute取一个session相联系的信息。(在jsp1.0中为 getValue) Integer item = (Integer) session.getAttrobute(item)/检索出session的值并转化为整型 setAttribute提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue) session.setAttribute(ItemValue, itemName);/ ItemValue 必须不是must简单类型 在应用中使用最多的是getAttribute和setAttribute.现以一个简单的例子来说明session的应用,test1.jsp(信息写入session),test2.jsp(从session读出信息)。 test1.jspHTMLHEADTITLE Document /TITLE/HEADBODY BGCOLOR=#FFFFFFsession.setAttribute(str,new String(“this is test”);/BODY/HTMLtest2.jspHTMLHEADTITLE New Document /TITLE/HEADBODY BGCOLOR=#FFFFFF%String ls_str=null;ls_str=(String)session.getAttribute(str);out.println(“从session里取出的值为:”+ls_str);%/BODY/HTML7,列举4个以上数据库(1)Javascript数据库(2)ASP数据库(3)Response数据库(4)session属性和方法8,SQL SERVER中,数据类型Char 与varchar区别答:sql server数据类型char和nchar,varchar和nvarchar,text和ntext的区别varchar和nvarchar的区别:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节(如varchar(6),当字段为qqq时,数据库实际占用空间为3个字节,而不是6个字节,但只允许存储6个字节,一般中文占两个字节)。nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。两字段分别有字段值:我和coffee那么varchar字段占22+6=10个字节的存储空间,而nvarchar字段占82=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarcharSQL Server中,varchar和nvarchar如何选择?varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操 作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为?)而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的多数情况下,在布署的时候也不会有问题但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了所有的varchar字段在存储中文的时候都会变成乱码(显示为?)而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar)对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别当然,使用nvarchar存储英文字符会增大一倍的存储空间但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的所以在Design的时候应该尽量使用nvarchar来存储数据只有在你确保该字段不会保存中文的时候,才采用varchar来存储1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。 2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。 3、TEXT。text存储可变长度的非Unicode数据,最大长度为231-1(2,147,483,647)个字符。 4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和 char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储 8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar9,存储过程定义和优点答:储过程是使用SQL语句和流程控制的语句编写的模块,存储过程经编译和优化后存储在数据库服务器端的数据库中,使用时调用即可。优点:1.提高运行速度。在运行存储过程前,数据库服务器对其进行语法和语义的分析,并给出优化执行方案。而调用存储过程时,其执行的SQL语句大部分准备工作都已经完成,所以存储过程就能以很快的速度执行,相比之下,交互执行的SQL语句是解释执行的,所以速度较慢。2.增强了功能和灵活性。存储过程可以用流程控制语句编写,具有很强的灵活性,能完成复杂是逻辑判断和逻辑运算。.可以降低网络的通讯量。存储过程存储在服务器端,执行全部的逻辑流程仅需要向服务器发送一次过程请求即可。.间接实现安全控制功能。例如,不允许某些用户直接在表和视图上进行查询,可以授权它们执行某个存储过程来完成允许范围内的信息查询。分类:用户定义的存储过程、扩展存储过程以及系统存储过程。(其中,用户定义的存储过程又分为Transaction-SQL和CLR两种类型。Transaction-SQL 存储过程是指保存的Transaction-SQL语句集合,可以接受和返回用户提供的参数。CLR存储过程是指对.Net Framework公共语言运行时(CLR)方法的引用,可以接受和返回用户提供的参数。他们在.Net Framework程序集中是作为类的公共静态方法实现的。)编写:(以例子说明)例1 传入一个参数username,判断用户是否存在-CREATE PROC IsExistUser(username varchar(20),IsExistTheUser varchar(25) OUTPUT-输出参数)asSELECT IsExistTheUser = count(username)FROM usersWHERE username = username GO例2 存储过程结合事务的一个例子:添加用户,涉及到两个表,一个用户资料表,一个密码表:增加用户-create procedure AddUser(username varchar(20),-用户名passwords varchar(18),-密码email varchar(100),-邮箱qq varchar(11),-QQ号码imageid int-头像)as- 设置NOCOUNT为ON,使不再返回统计信息(存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。)SET NOCOUNT ONDECLARE CurrentError intBEGIN TRANSACTION- 创建事务, 插入数据到2个表INSERT INTO users (username, email, qq, imageid)- 创建用户信息VALUES (username, email, qq, imageid)select CurrentError = ErrorIF CurrentError != 0BEGINGOTO ERROR_HANDLEREND- 创建用户密码INSERT INTO Signon (username, password)VALUES (username, passwords)select CurrentError = ErrorIF CurrentError != 0BEGINGOTO ERROR_HANDLEREND- 结束事务COMMIT TRANSACTION- 恢复NOCOUNT设置为OFFSET NOCOUNT OFF- 返回0表示成功,其他则为失败RETURN 0- 错误处理ERROR_HANDLER:ROLLBACK TRANSACTIONSET NOCOUNT OFFRETURN CurrentErrorGO10、ASP.NET特点答:ASP的全称是Active Server Pages,即活动服务器页面,为什么称之为活动服务器页面,这是因为以前的互联网全部是由静态的HTML页面组成,如果需要更新你的网站内容,你不得不制作大量的HTML页面。有了ASP以后,我们就能够根据不同的用户,在不同的时间向用户显示不同的内容。网站的内容更新也不再是一个乏味的重复过程,它开始变得简单而有趣。也因此在国内掀起了一股学习ASP的热潮。 但是由于ASP程序和网页的HTML混合在一起,这就使得程序看上去相当的杂乱。在现在的网站设计过程中,通常是由程序开发人员做后台的程序开发,前面有专业的美工设计页面,这样,在相互配合的过程中就会产生各种各样的问题。同时,ASP页面是有脚本语言解释执行的,使得其速度受到影响。受到脚本语言自身条件的限制,我们在编写ASP程序的时候不得不调用COM组件来完成一些功能。由于以上种种限制,微软推出了ASP.NET。 1.2 为什么要使用ASP.NET ASP.NET不仅仅只是ASP 3的一个简单升级,它更为我们提供了一个全新而强大的服务器控件结构。从外观上看,ASP.NET和ASP是相近的,但是从本质上是完全不同的。ASP.NET几乎全是基于组件和模块化,每一个页,对象,和HTML元素都是一个运行的组件对象。在开发语言上,ASP.NET抛弃了VBSCRIPT和JSCRIPT,而使用.NET Framework所支持的VB.NET,C#.NET等语言做为其开发语言,这些语言生成的网页在后台被转换成了类并编译成了一个DLL。由于ASP.NET是编译执行的,所以它比ASP拥有了更高的效率。13、如何理解JAVA跨平台答:它就是一个平台嘛,里面有C#,C语言等等很多语言在里面。虽然各种语言不同,但通过.Net的编译器,会把各种语言首先编译称微软的中间语言,然后再执行。 首先,我们编写的源程序(扩展名为.java),虚拟机通过JDK中的“javac.exe”此程序,就可以将我们的源程序转化为Java字解码程序(扩展名为.class)。 其次,转化为了自解码程序后,通过“java.exe”程序,可以将自解码程序在对应的操作系统下将Java自解码解释执行。通过操作系统,就实现了机器可识别的语言了。 值得注意的是,不是所有的系统都能运行Java的。因为如果此操作系统上,没有安装Java自解码程序,那么Java语言在这个平台上是运行不了的。12,Java虚拟机JVM有什么作用答:Java虚拟机什么是Java虚拟机Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。1.为什么要使用Java虚拟机Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。2.谁需要了解Java虚拟机Java虚拟机是Java语言底层实现的基础,对Java语言感兴趣的人都应对Java虚拟机有个大概的了解。这有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。3.Java虚拟机支持的数据类型Java虚拟机支持Java语言的基本数据类型如下:byte:/1字节有符号整数的补码 short:/2字节有符号整数的补码 int:/4字节有符号整数的补码 long:/8字节有符号整数的补码 float:/4字节IEEE754单精度浮点数 double:/8字节IEEE754双精度浮点数 char:/2字节无符号Unicode字符几乎所有的Java类型检查都是在编译时完成的。上面列出的原始数据类型的数据在Java执行时不需要用硬件标记。操作这些原始数据类型数据的字节码(指令)本身就已经指出了操作数的数据类型,例如iadd、ladd、fadd和dadd指令都是把两个数相加,其操作数类型别是int、long、float和double。虚拟机没有给boolean(布尔)类型设置单独的指令。boolean型的数据是由integer指令,包括integer返回来处理的。boolean型的数组则是用byte数组来处理的。虚拟机使用IEEE754格式的浮点数。不支持IEEE格式的较旧的计算机,在运行Java数值计算程序时,可能会非常慢。虚拟机支持的其它数据类型包括: object/对一个Javaobject(对象)的4字节引用 returnAddress/4字节,用于jsr/ret/jsr-w/ret-w指令 注:Java数组被当作object处理。虚拟机的规范对于object内部的结构没有任何特殊的要求。在Sun公司的实现中,对object的引用是一个句柄,其中包含一对指针:一个指针指向该object的方法表,另一个指向该object的数据。用Java虚拟机的字节码表示的程序应该遵守类型规定。Java虚拟机的实现应拒绝执行违反了类型规定的字节码程序。Java虚拟机由于字节码定义的限制似乎只能运行于32位地址空间的机器上。但是可以创建一个Java虚拟机,它自动地把字节码转换成64位的形式。从Java虚拟机支持的数据类型可以看出,Java对数据类型的内部格式进行了严格规定,这样使得各种Java虚拟机的实现对数据的解释是相同的,从而保证了Java的与平台无关性和可 移植性。Java虚拟机体系结构Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。1.Java指令集Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。 Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。虚拟机的内层循环的执行过程如下: do 取一个操作符字节; 根据操作符的值执行一个动作; while(程序未结束)由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率。指令中操作数的数量和大小是由操作符决定的。如果操作数比一个字节大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为:第一个字节*256+第二个字节字节码指令流一般只是字节对齐的。指令tableswitch和lookup是例外,在这两条指令内部要求强制的4字节边界对齐。2.寄存器Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。Java虚拟机的寄存器有四种: pc:Java程序计数器。 optop:指向操作数栈顶端的指针。 frame:指向当前执行方法的执行环境的指针。 vars:指向当前执行方法的局部变量区第一个变量的指针。Java虚拟机Java虚拟机是栈式的,它不定义或使用寄存器来传递或接受参数,其目的是为了保证指令集的简洁性和实现时的高效性(特别是对于寄存器数目不多的处理器)。 所有寄存器都是32位的。3.栈Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区。(1)局部变量区 每个Java方法使用一个固定大小的局部变量集。它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。长整数和双精度浮点数占据了两个局部变量的空间,却按照第一个局部变量的索引来寻址。(例如,一个具有索引n的局部变量,如果是一个双精度浮点数,那么它实际占据了索引n和n+1所代表的存储空间。)虚拟机规范并不要求在局部变量中的64位的值是64位对齐的。虚拟机提供了把局部变量中的值装载到操作数栈的指令,也提供了把操作数栈中的值写入局部变量的指令。(2)运行环境区 在运行环境中包含的信息用于动态链接,正常的方法返回以及异常传播。动态链接 运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法的class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号,并把变量访问翻译成与这些变量运行时的存储结构相应的偏移地址。动态链接方法和变量使得方法中使用的其它类的变化不会影响到本程序的代码。正常的方法返回如果当前方法正常地结束了,在执行了一条具有正确类型的返回指令时,调用的方法会得到一个返回值。执行环境在正常返回的情况下用于恢复调用者的寄存器,并把调用者的程序计数器增加一个恰当的数值,以

温馨提示

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

评论

0/150

提交评论