《JavaWeb应用开发基础教程课件教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案》由会员分享,可在线阅读,更多相关《JavaWeb应用开发基础教程课件教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案(249页珍藏版)》请在金锄头文库上搜索。
1、Java Web应用开发基础教程Java Web编程简介C/S和B/S网站和系统静态Web和动态Web核心是有没有数据库JavaWeb工作原理客户端和Web服务器建立连接;客户端发送HTTP请求;服务器端接收客户端的HTTP请求,生成HTTP响应回发;服务器端关闭连接,客户端解析响应,恢复页面。Java Web相关技术面向对象软件工程软件项目管理HTML+JavaScriptJDBC+Servlet+JSP+JavaBean+XML数据库(数据库设计+MySQL实现)设计模式(MVC)环境搭建需要的软件运行环境:JDK+MySQL+Tomcat辅助工具:EclipseJ2ee+UltraEdi
2、t+Visio+Navicat注意事项环境搭建是一个费时的过程却意义重大操作系统和软件版本的不同会有一定的区别其它的辅助软件可自行考虑安装面向对象编程基础OOP的三个主要概念:封装、继承、多态面向过程的程序设计语言当中:程序=算法+数据结构面向对象的程序设计语言当中:程序=对象+消息对象:属性+方法的软件组合,是类的一个实例。封装继承多态Thanks for your attention!Java Web应用开发基础教程MYSQL及及JDBC初步初步第第3章章关系型数据库管理系统RDBMS:RelationalDatabaseManagementSystems,通过数据、关系和对数据的约束三者
3、组成的数据模型来存放和管理数据,以行和列的形式存储数据。MySQL:MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。MySQL被广泛地应用在Internet上的中小型网站中。特点是:体积小、速度快、总体拥有成本低,且开放源码。MySQL初步安装MySQL数据库启动MySQL数据库MySQL数据库的使用MySQL常用命令JDBC概述及基本原理JDBC(JavaDatabaseConnectivity)是一种用于执行SQL语句的JavaAPI。它由一组用Java编程语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Jav
4、aAPI来编写数据库应用程序。JDBC的使用包括注册驱动程序获取数据库连接发送SQL语句处理结果连接工具类连接数据库的代码在一个项目中是需要经常被使用的,在开发一个大型项目时,会有相当一部分类需要与数据库进行连接,一旦某个连接参数发生变化,代码更改的工作量将十分巨大,工具类的出现可以较好地解决这个问题。JDBC2.0最新版的JDBC2.0API被划分为两部分:JDBC2.0核心APIJDBC2.0标准扩展API。java.sql包:JDBC2.0的核心API。javax.sql包:JDBC2.0的标准扩展API,其中增加了一些数据访问和数据源访问的重大功能,其中有一些是主要用来做企业计算的。J
5、DBC2.0核心APIJDBC核心API2.0在以下几个方面做了比较大的改进:修改了ResultSet接口的方法,支持可以滚动的记录集和Java语言来更新记录集。新的Statement接口支持批操作(BatchUpdate)。支持最新的SQL3数据类型,特别是对BLOB、CLOB等类型的数据提供了很好的支持。JDBC2.0核心API新的SQL语句接口(Statement接口)Statement接口PreparesStatement接口(继承Statement接口)以上两个接口分别由Connection接口的createStatement()方法和prepareStatement()方法创建。J
6、DBC2.0核心API创建Statement的方法publicStatementcreateStatement()publicStatementcreateStatement(intresuleSetType,intresultSetConcurrency)resuleSetType:返回ResultSet的类型,如是否允许数据库游标前后移动,是否对数据库更新操作敏感等。resultSetConcurrency:返回的ResultSet的协同模式,如允许更新记录集的数据或者仅仅只读不能更新等。JDBC2.0核心APIClass.forName(“com.mysql.jdbc.Driver);C
7、onnectionconn=DriverManager.getConnection(“);Statementstmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);上面的代码创建了一个SQL语句接口(Statement)的实例对象,该实例对象允许它执行SQL语句所返回的记录集中的数据库游标前后移动,允许更新记录集中的数据。JDBC2.0核心APIPrepareStatement接口表示预编译的SQL语句的对象。SQL语句被预编译并且存储在PreparedStatement对象中。然
8、后可以使用此对象高效地多次执行该语句。PrepareStatement中的SQL语句往往是不完整的,带有多个问号以表示缺省参数,可以相应的setter方法(seInt、setString等等)指定与输入参数的已定义SQL类型兼容的类型。JDBC2.0核心APIClass.forName(“com.mysql.jdbc.Driver);Connectionconn=DriverManager.getConnection(“);PrepareStatementprepstat=conn.prepareStatement(insertintotable(name,age)values(?,?);pr
9、epstat.setString(1,“zhangsan);prepstat.setInt(2,30);prepstat.executeUpdate();上面的代码是PrepareStatement使用的例子JDBC2.0核心APIStatement、PreparedStatement和CallableStatement接口都支持数据库批操作。Statement接口中有如下方法:publicvoidaddBatch(Stringsql);将SQL语句添加到SQL语句块中publicvoidclearBatch();将SQL语句块中的所有SQL语句全部删除publicintexecuteBatc
10、h();将SQL语句块发送到数据库服务器去并执行,它返回的结果是一个整型数组。JDBC2.0核心API使用JDBCAPI执行数据库批操作的方法是:1)创建Statement接口的实例对象2)调用addBatch()方法往SQL语句块中添加若干个SQL语句3)使用executeBatch()方法完成数据库批操作JDBC2.0核心API在PreparedStatement接口实现数据库批操作的方法是1)创建PreparedStatement接口的实例对象2)使用PreparedStatement接口中定义的setXXX()方法设定SQL语句参数的值3)使用addBatch()方法添加批处理语句到语
11、句块4)使用executeBatch()方法执行批处理语句JDBC2.0核心APIDatabaseMetaData接口:用于获取有关数据库的信息,如数据库中所有的表名、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动程序名等。DatabaseMetaData对象是通过Connection接口的getMetaData()方法创建的。ResultSetMetaData接口:用于获取结果集的结构,如结果集中列的类型和属性信息。JDBC2.0核心API新的记录集接口(ResultSet接口)1、新定义了若干个常数用于指定游标移动的方向publicstaticfinalintFETCH_FORW
12、ARD;publicstaticfinalintFETCH_REVERSE;publicstaticfinalintFETCH_UNKNOWN;publicstaticfinalintTYPE_FORWARD_ONLY;publicstaticfinalintTYPE_SCROLL_INSENSITIVE;publicstaticfinalintTYPE_SCROLL_SENSITIVE;publicstaticfinalintCONCUR_READ_ONLY;publicstaticfinalintCONCUR_UPDATABLE;JDBC2.0核心APIFETCH_FORWORD:指定处理
13、记录集中行的顺序是由前到后,即从第一行开始处理一直到最后一行。FETCH_REVERSE:指定处理记录集中行的顺序是由后到前,即从最后一行开始处理一直到第一行。FETCH_UNKNOWN:不指定处理记录集中行的顺序,而由JDBC驱动程序和数据库系统决定。TYPE_FORWARD_ONLY:指定数据库游标的移动方向是向前,不允许向后移动,即只能使用ResultSet接口的next()方法而不能使用previous()方法,否则会产生错误。JDBC2.0核心APITYPE_SCROLL_INSENSITIVE:指定数据库游标可以在记录集中前后移动,并且当前数据库用户获取的记录集对其他用户的操作不敏
14、感。TYPE_SCROLL_SENSITIVE:指定数据库游标可以在记录集中前后移动并且当前数据库用户获取的记录集对其他用户的操作敏感。JDBC2.0核心APICONCUR_READ_ONLY:该常数的作用是指定当前记录集的协作方式(concurrencymode)为只读。一旦使用了这个常数,那么用户就不可以更新记录集中的数据。CONCUR_UPDATABLE:该常数的作用是指定当前记录集的协作方式(concurrencymode)为可以更新。一旦使用了这个常数,那么用户就可以使用updateXXX()等方法更新记录集中的数据。JDBC2.0核心API2、ResultSet接口提供了一整套的定
15、位方法。publicbooleanabsolute(introw);该方法的作用是将记录集中的某一行设定为当前行,亦即将数据库游标移动到指定的行。参数row指定了目标行的行号,这是绝对的行号,由记录集的第一行开始计算。publicbooleanrelative(introws);该方法的作用也是将记录集中的某一行设定为当前行,但是它的参数rows表示目标行相对于当前行的行号。JDBC2.0核心API例子:当前行是第3行现在需要移动到第5行去,怎么处理?既可以使用absolute()方法,也可以使用relative()方法。rs.absolute(5);rs.relative(2);其中rs代表
16、ResultSet接口的实例对象JDBC2.0核心API例子:当前行是第5行需要移动到第3行去代码如下rs.absolute(3);rs.relative(-2);其中rs代表ResultSet接口的实例对象传递给relative()方法的参数。如果是正数,那么数据库游标向前移动;如果是负数,那么数据库游标向后移动。JDBC2.0核心APIpublicbooleanfirst();该方法的作用是将当前行定位到数据库记录集的第一行。publicbooleanlast();该方法的作用刚好和first()方法相反,是将当前行定位到数据库记录集的最后一行。publicbooleanisFirst()
17、;该方法的作用是检查当前行是否记录集的第一行。如果是,返回true,否则返回false。publicbooleanisLast();该方法的作用是检查当前行是否记录集的最后一行。如果是,返回true,否则返回false。JDBC2.0核心APIpublicvoidafterLast();该方法的作用是将数据库游标移到记录集的最后,位于记录集最后一行的后面。如果该记录集不包含任何的行该方法不产生作用。publicvoidbeforeFirst();该方法的作用是将数据库游标移到记录集的最前面,位于记录集第一行的前面。如果记录集不包含任何的行,该方法不产生作用。publicbooleanisAft
18、erLast();该方法检查数据库游标是否处于记录集的最后面。如果是,返回true,否则返回false。JDBC2.0核心APIpublicbooleanisBeforeFirst();该方法检查数据库游标是否处于记录集的最前面。如果是,返回true,否则返回false。publicbooleannext();该方法的作用是将数据库游标向前移动一位,使得下一行成为当前行。当刚刚打开记录集对象时,数据库游标的位置在记录集的最前面。publicbooleanprevious();该方法的作用是将数据库游标向后移动一位,使得上一行成为当前行。JDBC2.0核心API3、ResultSet接口添加了对
19、行操作的支持使用JDBCAPI2.0不仅可以任意将数据库游标定位到记录集中的特定行,而且还可以使用ResultSet接口新定义的一套方法更新当前行的数据。在JDBC1.0中更新记录集中某行的数据,必须发送SQL语句给数据库以执行UPDATE、DELETE、INSERT等数据库操作。JDBC2.0核心APIpublicbooleanrowDeleted();如果当前记录集的某行被删除了,那么记录集中将会留出一个空位。调用该方法,如果探测到空位的存在,那么就返回true;如果没有探测到空位的存在,就返回false值。publicbooleanrowInserted();如果当前记录集中插入了一个新
20、行,该方法将返回true,否则返回false。publicbooleanrowUpdated();如果当前记录集的当前行的数据被更新,该方法返回true,否则返回false。JDBC2.0核心APIpublicvoidinsertRow();该方法将执行插入一个新行到当前记录集的操作。publicvoidupdateRow();该方法将更新当前记录集当前行的数据。publicvoiddeleteRow();该方法将删除当前记录集的当前行。JDBC2.0核心APIpublicvoidupdateString(intcolumnIndex,Stringx);该方法更新当前记录集的当前行某列的值,该
21、列的数据类型是String,该方法的参数columnIndex指定所要更新的列的列索引,第一列的列索引是1,以此类推。publicvoidupdateString(StringcolumnName,Stringx);该方法同上,其第一个参数是columnName代表需要更新的列的列名而不是columnIndex。ResultSet接口中还定义了很多个updateXXX()方法都和上面的两个方法相类似。JDBC2.0核心API向数据库当前记录集插入新行的操作流程如下:1)调用moveToInsertRow()方法2)调用updateXXX()方法指定插入行各列的值3)调用insertRow()方
22、法往数据库中插入新的行例:rs.moveToInsertRow();rs.updateString(name,herry);rs.updateInt(age,30);rs.insertRow();JDBC2.0核心API更新数据库中某个记录的值(某行的值)的方法是:1、定位到需要修改的行2、使用相应的updateXXX()方法设定某行某列的新值,也可以使用cancelRowUpdates()方法进行回滚3、使用updateRow()方法完成UPDATE的操作例:rs.first();rs.updateString(name,Steven);rs.updateRow();JDBC2.0核心API
23、删除记录集中某行(亦即删除某个记录)的方法1、定位到需要修改的行(使用absolute()relative()等方法)2、使用deleteRow()方法例:rs.first();rs.deleteRow();JDBC2.0核心API处理BLOB和CLOB类型的数据BLOB和CLOB是SQL3标准支持的新数据类型,主要用于保存大型超长的数据,如图片视频、CD等。在JDBCAPI2.0中新定义了Blob接口和Clob接口,对这两种类型数据的操作大大简化了。ResultSet、PreparedStatement等接口都定义了getBlob()、getClob()、setBlob()和setClob(
24、)方法,用以获取或者设定BLOB和CLOB类型的数据。JDBC2.0核心APIBlob接口的方法publicInputStreamgetBinaryStream();该方法从Blob数据中获取一个输入流Clob接口的方法publicInputStreamgetAsciiStream();该方法从Clob对象中返回一个输入流。JDBC2.0核心APIBLOB和CLOB数据类型的区别,BLOB和CLOB数据类型虽然都可以存储大量超长的数据,但两者是有区别的。BLOB其实是BinaryLargeObject的缩写,BLOB类型的数据以二进制的格式保存于数据库中,特别适用于保存程序文件图片、视频文件、
25、音频文件等。CLOB是CharacterLargeObject的缩写,CLOB类型的数据以Character的格式保存于数据库中,比较适合于保存比较长的文本文件。Thanks for your attention!Java Web应用开发基础教程XML第第4章章XML简介eXtensibleMarkupLanguage(可扩展标记语言)由万维网联盟(WorldWideWebConsortium,W3C)于1998年2月发布的推荐标准。XML定义了一种文件格式,一种描述数据、保存数据的方法,使用这种格式的计算机数据,可以在不同的计算机平台和不同的计算机程序之间方便、平稳、快速和无障碍地转移和流动
26、,从而大大提高了处理数据的效率和灵活性。XML简介XML是一种元语言,允许通过使用自定义的格式、标识,交换和处理数据库可以理解的数据;基于文本格式,以结构化的方式描述各种类型的数据,并在各种应用之间发送和交换这些数据;可以在不同的计算机平台和不同的计算机程序间方便、平稳的交换数据,从而提高了处理数据的效率和灵活性。XML标准1998年2月W3C发布了XML推荐标准XML1.0。2004年2月4日XML1.1推荐标准正式发布。但目前推荐遵循的是W3C于2000年10月6日发布的XML1.0标准。XML的进一步认识XML继承了SGML的许多特性,它有SGML20%的复杂性,却有SGML80%的功能
27、。XML描述的是结构和语义,而不是格式化XML将数据内容和显示格式相分离XML是元标记语言XML是自描述语言XML是独立于平台的XML不进行任何操作XML具有良好的保值性XML的用途XML是被设计用来存储数据、携带数据和交换数据的,它不是为了显示数据而设计的。XML的主要用途包括以下几个方面:从HTML中分离数据。交换数据共享数据存储数据充分利用数据创建新的语言:MusicML、MathML、CML、SVG、WML、SMIL等XML的基本结构标记语言的基本特点:在表示数据内容的基础上,插入各在表示数据内容的基础上,插入各种具有明确含义的种具有明确含义的标记,标记,以起到对数据内容进行解释、说以
28、起到对数据内容进行解释、说明、限制等作用。明、限制等作用。标记的表示方法:,一般成对使用。标记的命名规则名称的开头是字母或下划线“_”;标记名称中不能有空格;名称的字符串只能包含英文字母、数字、“_”、“-”、“.”等字符。一个完整的XML实例李华李华男男1978.9.1292此学生爱好编程,以下是它编的代码此学生爱好编程,以下是它编的代码!CDATA function f1(a,b) if (name=cai & a 0) return 1 else return 0 Visual Basic & C#序言序言文档文档元素元素根元素根元素属性属性元素元素注释注释文档文档类型类型声明声
29、明XML声明声明文本文本预处理预处理指令指令CDATA实体实体XML声明XML声明通常在XML文档的第一行出现。XML声明不是必选项,但是如果使用XML声明,则必须在文档的第一行,前面不得包含任何其他内容或空白。文档映射中的XML声明包含下列内容:(1)版本声明:(2)编码声明:(3)独立声明:XML元素XML技术基础技术基础.开始标记开始标记结束标记结束标记内容内容空元素空元素TITLE空元素空元素TITLEXML元素1、命名规则:XML元素命名与Java、C命名规则类似。2、XML的根元素:每个XML文档必须有且只有一个根元素;根是一个完全包括文档中其他所有元素的元素。3、元素是可以扩展的
30、,可以携带更多的信息。4、元素之间是有关系的。5、XML元素的内容很丰富。XML元素实体实体相当于内容占位符,用于内容转义,实体的主要作用有代替一些键盘无法输入的字符代替一些与XML规范保留字相冲突的字符代替大段的重复数据代替一些不适合在XML文档中出现的数据预定义实体:XML解析器已经定义了的实体,用户通过实体引用将实体插入到文档中,实体引用是将实体名称包括在符号&和分号;之间。XML元素实体预定义实体预定义实体符号<&"'CDATA当XML文档元素内容中包含大量、&或者“字符时functionf1(a,b)if(name=“cai”&a0)return1e
31、lsereturn0functionf1(a,b)if(name="cai"&&a<0)return1elsereturn0CDATA用CDATA节括起来,则不需要使用替代字符!CDATAfunctionf1(a,b)if(name=“cai“&aCDATACDATA节用于把整段包含大量、&或者“的文本解释为纯字符数据而不是标记的情况。CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。在在CDATACDATA部件之内的文本会被解析器忽略。部件之内的文本会被解析器忽略。 语法格式:CDATACDATA注意事项:可以输入任意字符(
32、除或者”之间没有空格或者换行符。可以利用CDATA标记将含有非法字符的文本括起来。问题的提出两个基本的概念格式良好的XML文档:符合语法的XML文档称为结构良好的XML文档。有效XML文档:内容结构严格遵守它自身的标记说明,能通过自身的语法检查;通过DTD验证的XML文档称为有效的XML文档。格式良好的XML文档与有效的XML文档的区别?有有效效地地XML文文档档肯肯定定是是格格式式良良好好的的XML文文档档。反反过过来来,一一个个格格式式良良好好的的XML文文档档不不一一定定是是有有效效的的XML文文档档。有有效效的的XML文文档档遵遵守守DTD或或Schema定义的规则。定义的规则。什么是
33、DTD?文档类型定义-DocumentTypeDefinitionDTD用来描述XML文档的结构,一个DTD文档包含:元素(ELEMENT)的定义规则元素之间的关系规则属性(ATTLIST)的定义规则可使用的实体(ENTITY)或符号(NOTATION)规则DTD与XML文档实例的关系类与对象数据库表结构与数据记录什么是XMLSchema?Schema的基本思想就是为XML文档制定一种模式。从本质上说,DTD与XMLSchema的作用是相同的,它们以各自不同的方式来帮助XML的开发者来描述XML文档的结构和数据,都用于XML文档的有效性验证。Schema与DTD的关系Schema与DTD的作用
34、相同,它们各自以不同的方式来描述XML文档结构,都用于文档验证。Schema囊括了DTD文件所能实现的全部功能,同时它也是一个完全规范的XML文档。Schema正在逐步取代DTD成为验证XML文档合法性的新标准。XMLSchema简介Schema与DTD的比较DTD使用EBNF语法,Schema基于XML语法。Schema可以像其他XML文档一样被解析和处理;DTD描述的是XML文件的结构,而非元素内容,因此DTD不能进行数据有效性检查;例如:文字;Schema大大扩充了数据类型,可以自定义数据类型;Schema提供一个可扩充的内容模式,而DTD扩展性差;Schema可对整个XML文档或文档局
35、部进行验证,而DTD缺乏这种灵活性;Schema支持名称空间,DTD不支持命名空间。XMLSchema的特点XMLSchema文档本身就是XML文档,因此遵守XML的语法规则;XMLSchema是用一套预先规定的XML元素和属性创建的;在XMLSchema需要完成的任务:定义可以出现在文档中的元素;定义可以出现在文档中的属性;定义元素下的子元素及子元素的顺序、数量;定义元素和属性的数据类型;XMLSchema两种模式两种模式:W3CXMLSchema和MicrosoftXMLSchemaMicrosoftXMLSchemaMicrosoftMicrosoft版版本本的的XMLXMLschema
36、schema叫叫做做XDRXDR(XMLXMLDataDataReduced)Reduced),它它基基于于XMLXML标标准准提提议议中中的的简简化化集集合合,XDRXDR是是一一个个专专有有规规范范,但但它它被被相相当当广广泛的采用。泛的采用。W3CW3C的的XMLXMLSchemaSchema叫叫XSDXSD(XMLXMLSchemaSchemaDefinitionDefinitionLanguageLanguage),它它是一个比是一个比XDRXDR更广泛的规范,并且它有不可否认的非专有的优点。更广泛的规范,并且它有不可否认的非专有的优点。命名空间Namespaces翻译为名字空间或命
37、名空间。当我们在一个XML文档中使用他人的或者多多多多个个个个DTDDTD文文文文件件件件,就会出现这样的矛盾:因为XML中标识都是自己创建的,在不同的DTD文件中,标识名可能相同但表示的含义不同,这就可能引起数据混乱引起数据混乱。例如:在一个文档中woodtable中表示桌子,而在另一个文档namelist中表示表格。如果我需要同时处理这两个文档,就会发生名字冲突。命名空间XML命名空间是XML解决元素多义性和名字冲突问题的方案。W3C组织的推荐用书对XML命名空间的解释是:“XMLXML命命命命名名名名空空空空间间间间是是是是命命命命名名名名的的的的汇汇汇汇集集集集,它由URI(统一资源标
38、识)确定,在XML文件中作为元素标识和属性名使用”。命名空间是名称上相关的一组名称的汇集,在同一空间中每一个名称都必须唯一。命命命命名名名名空空空空间间间间表表表表示示示示了了了了名名名名称称称称的的的的来来来来源源源源和和和和使使使使用用用用范范范范围围围围。通过命名空间可以区分来自不同的XML应用但具有相同名称的标识,可以把来自某种XML应用的相关元素和属性集合在一起,以方便软件识别和处理。命名空间namespaces通过给给标标识识名名称称加加一一个个网网址址(URL)(URL)定位的方法来区别这些名称相同的标识。命 名 空 间 一 般 用 属 性 xmlns来 声 明 , 声 明 的
39、语 法 如 下 :xmlns:命名空间属性名,声明命名空间必需的属性。prefix:命名空间的前缀,它的值不能为XML。在引用此命名空间中的名称时,需要在名称前加“prefix:”。URI:统一资源标示符(UniformResourceIdentifier),是一个标识网络资源的字符串。最普通的URI应该是统一资源定位符(URL),URL用于标识网络主机的地址。另一个不常用的URI是通用资源名字(URN),URN一个相对固定的地址。命名空间引用此名空间中的元素、属性的方法:前缀名:元素名或前缀名:属性名声明时若前缀名省略,则声明的是缺省的空间,引用缺省名空间中的元素、属性时可不加前缀名;默认的
40、命名空间的声明语法格式为:XMLSchema的内容XMLSchema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式,指定了每个Schema元素或属性的合法用途,如果违反了这些规则,解析器就会拒绝解析该Schema以及任何与它相联系的XML文档。它主要包括以下内容:定义可以出现在文档里的元素;定义元素之间的关系;定义可以出现在文档里的属性;定义元素或属性的数据类型。连接Schema到XML有目标命名空间:有目标命名空间:无目标命名空间:无目标命名空间:此处为targetNamespace,与后面的模式文档的文件名以空格分隔XML应用程序接口W3C以及XM
41、L_DEV邮件列表的成员分别提出了两个访问XML的标准应用程序接口:DOM和SAX。DOM:文档对象模型。DOM是HTML和XML文档的编程接口规范,它与平台和语言是无关的,该模型定义了HTML和XML文件在内存中文档结构,提供了对HTML和XML文件的访问、存取方法。利用DOM规范,可以实现DOM文档和XML之间的相互转换,对相应DOM文档的内容进行遍历或其他操作。DOMDOM处理文档的时候,实际上是先把整个文档读入,行成一棵文档树,然后用户就可以针对这个树形的文档模型进行各种元素操作了。优点:自然易懂,文档中的数据和节点一目了然。缺点:针对较大的文档,不仅消耗很多的内存而且处理速度很慢。当
42、提及DOM的时候,不仅仅指代的是DOM文档对象模型,而且也包含处理这个模型的一系列API。SAXSAX(SimpleAPIforXML)也是解析XML的一种规范,由一系列接口组成,但不是W3C推荐的标准,SAX是公开的、开放源代码的,最新的版本是SAX2.0。SAX解析器是一种基于事件的解析器,核心是事件处理模式,围绕事件源以及事件处理器来工作的。一个可以产生事件的对象被称为事件源,可以针对事件产生响应的对象被称为事件处理器。事件和事件处理器是通过在事件源中的事件处理器注册的方法连接的。SAX利用SAX解析器解析XML文件需要经过以下步骤:实例化一个SAXParserFactory对象:SAX
43、ParserFactoryfactory=SAXParserFactory.newInstance();通过factory获得一个SAXParser对象,即SAX解析器:SAXParsersaxParser=factory.newSAXParser();saxParser对象调用parse方法解析XML文件:saxParser.parse(Filefile,DefaultHandlerdh)SAX在SAXAPI中有两个包:org.xml.sax定义SAX的基础接口,如XMLReader、ContentHandler、ErrorHandler、DTDHandler、EntityResolver等
44、。org.xml.sax.helper提供了一些方便开发人员使用的帮助类,如缺省实现所有处理器接口的帮助类DefaultHandler、方便开发人员创建XMLReader的XMLReaderFactory类等。SAXDefaultHandler类或它的子类的对象称为SAX解析器的事件处理器。事件处理器可以接收解析器报告的所有事件,处理所发现的数据。DefaultHandler类 实 现 了 ContentHandler、 DTDHandler、EntityResolver和ErrorHandler接口。DefaultHandler类实现了上述4个接口,包含了这4个接口的所有方法,方法都是一种空
45、实现在编写事件处理程序时,可以不用直接实现这四个接口,而直接继承DefaultHandler类,然后重写需要的方法。SAXSAX解析器的核心是事件处理机制,当SAX解析器调用parse()方法解析XML文件时,事件处理器会根据所产生的事件调用相应的方法来处理发现的数据。在编写程序时,需要使用DefaultHandler类的子类创建一个事件处理器,当处理器对报告的事件不感兴趣时,就直接调用父类的方法,采用默认的处理方法,当处理器对报告的事件感兴趣时,子类可以重写父类的某些方法,调用重写的方法,以便处理器可以具体的处理解析器报告的数据。SAX在org.xml.sax包的HandlerBase类中定
46、义了SAX解析器解析XML文件所产生的事件类型。常用的事件类型有:startDocument:表示文档的开始endDocument:表示文档的结束startElement:表示标记的开始endElement:表示标记的结束characters:文本内容事件ignorableWhitespace:表示空白事件warning、error和fatalError:表示错误事件SAX文件的开始与结束当解析器开始解析XML文件时,就会报告“文件开始”事件给事件处理器,然后再陆续地报告其他的事件,比如:“开始标记”,“文本事件”,最后再报告“文件结束”事件。解析器报告“文件开始”事件,事件处理器就会调用st
47、artDocument()方法。解析器报告“文件结束”事件,事件处理器会调用endDocument()方法,解析器在解析XML文件的过程中,只能报告一次“文件开始”和“文件结束”事件。SAX开始标记与结束标记当解析器发现一个标记开始时,就将所发现的数据封装为一个“开始标记”事件,并报告该事件处理器,事件处理器就会知道发生的事件,然后调用startElement()方法对发现的数据处理。事件处理器调用完startElement方法后,将陆续地收到解析器报告的其他事件,最后一定会报告该标记的“标记结束”事件,这时事件处理器会调用endElement()方法对发现的数据做出处理。SAX文本数据XML
48、文件中的标记的内容可以有文本数据,当解析器解析这些数据时,就报告“文本数据”事件给处理器,事件处理器调用publicvoidcharacters(char,intstart,intlength)方法对解析的数据做出处理。参数字符数组ch中存放的就是解析的文本数据start是数组ch中存放字符的起始位置length是存放字符的个数。SAX处理空白要处理空白,只需要在处理器中重写ignorableWhitespace方法即可。解析器在遇到空白时,就会向处理器报告ignorableWhitespace事件,事件处理器调用下面的方法处理:voidignorableWhitespace(charch,i
49、ntstart,intlength),而不去调用characters方法。但前提是XML文件必须是一个有效的XML文件。SAX名称空间名称空间的目的是有效的区分名字相同的标记,当二个标记的名字相同时,他们可能通过属于不同的名称空间来区分。例:你好解析器报告事件的顺序如下:名称空间开始-开始标记-文本数据“-结束标记-名称空间结束SAX处理错误SAX解析器默认地检查XML是否规范的,如果让SAX解析器检查XML文件是否有效,需要在获得SAX解析器之前调用factory.setValidating(true)设置。当出现错误时会调用下面的方法进行处理。publicvoidwarning(SAXEx
50、ceptione)throwsSAXException;publicvoiderror(SAXExceptione)throwsSAXException;publicvoidfatalError(SAXExceptione)throwsSAXExceptionSAXDOM与SAX的比较通过DOM树,应用程序可以对XML文档进行随机访问。当XML文档比较大或者文档结构比较复杂时,对内存的需求就比较高。SAX分析器通过事件处理函数实现对XML文档的访问,采用顺序访问机制,对于事件处理函数本身,要由应用程序自己来实现。例子:database.conf.xml文件的读取Thanks for your
51、attention!Java Web应用开发基础教程SERVLET第第5章章什么是什么是ServletServlet是一种独立于操作系统平台和网路传输协议的服务器端的Java应用程序,由包含Java虚拟机的Web服务器加载和执行的。Servlet运行在包含有Web容器的Web服务器上,Web容器负责管理servlet并完成初始化,Web容器可以管理多个servlet实例。Web容器会将客户端的请求传给servlet,并且将servlet的响应返回给客户端。Web容器在servlet结束时终结该servlet,当服务器关闭时,Web容器在内存中移除servlet。Servlet工作原理及过程工作
52、原理及过程Servlet工作原理及过程工作原理及过程Servlet的基本流程客户端(一般是Web浏览器)通过HTTP提出请求。Web服务器接收该请求并将其发给servlet。servlet将接收该HTTP请求并执行某种处理。servlet将向Web服务器返回应答。Web服务器将从servlet收到的应答发送给客户端。注意:由于servlet是在服务器上执行,相关的安全性的问题并不需实现。例如:Web服务器有防火墙保护,那么servlet也得到防火墙的保护。Servlet的基本结构的基本结构import java.io.*;import java.io.*;import javax.servle
53、t.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;public class SomeServlet extends public class SomeServlet extends HttpServletHttpServlet public void public void doGetdoGet( (HttpServletRequestHttpServletRequest request, request, HttpServletResponseHttpServletRespon
54、se response) response) throws ServletException, IOException throws ServletException, IOException / 使用“request”读取与客户端请求有关的信息和表单数据 / 使用“response”指定HTTP应答状态代码和应答头 PrintWriterPrintWriter out = response.getWriter(); out = response.getWriter(); / 使用 out把应答内容发送到浏览器 (doPostdoPost方法未写出,形式与方法未写出,形式与doGetdoGet
55、方法类似)方法类似)为什么要使用为什么要使用servletServlet是平台无关的。采用Java编写并可以很好地替代公共网关接口(CGI)脚本。Servlet是持久的。只需Web服务器加载一次,就可以在不同请求之间保持服务(例如一次数据库连接)。Servlet是可扩展的。Java语言的健壮性、面向对象及扩展性赋予了servlet同样的特征。Servlet是安全的。从外界调用servlet的唯一方法就是通过Web服务器,Web服务器的防火墙同样会保护servlet。Setvlet可以在多种多样的客户机上使用。Servlet容器容器Servlet容器为servlet提供了运行环境,servlet
56、的运行必须依赖于servlet容器,servlet不能独立于容器独立运行。Tomcat是一个免费的、开源的Servlet容器,支持最新的Servlet和JSP规范。Servlet是一种动态加载的模块,为来自Web服务器的请求提供服务,它完全运行在Java虚拟机上。Servlet容器负责处理客户请求、把请求传送给Servlet并把结果返回给客户。Servlet容器容器Servlet生命周期:1、Servlet容器创建Servlet的一个实例2、容器调用该实例的init()方法3、如果容器对该Servlet有请求,则调用此实例的service()方法4、容器在销毁本实例前调用它的destroy()
57、方法5、销毁并标记该实例以供作为垃圾收集TomcatTomcat的安装、启动和关闭Tomcat主要目录结构bin:存放二进制命令等,包含启动/关闭脚本等conf:存放不同的配置文件,server.xml、web.xml等doc:包含各种tomcat文档lib:包含tomcat使用的jar文件logs:tomcat摆放日志文件(logfile)的地方Webapps:包含所部署的web应用项目TomcatTomcat会创建如下目录:work:tomcat自动生成,放置tomcat运行时的临时文件(如编译后的JSP文件),我们在调试JSP程序时,要用到这些编译成Servlet的文件,如在tomcat
58、运行时删除此目录。JSP页面将不能运行。classes:你可以创建此目录来添加一些附加的类到类路径中,任何你加到此目录中的类都可在tomcat的类路径中找到自身。TomcatTomcat的配置文件1./conf/server.xmlTomcat的全局配置文件提供Tomcat组件的初始配置说明Tomcat的结构和含义,使得Tomcat通过实例化组件完成启动及自身构建2./conf/web.xml在Tomcat中配置不同的关系环境第一个第一个Servlet 大多数Servlet都利用PrintWirte对象的Println语句输出HTML,主要包括步骤:告诉浏览器发送的是HTML。通过设置Cont
59、ent-Type应答头完成。在HttpServletResponse的setHeader方法可以完成设置,同时,在ServletAPI也提供了一个专用的方法setContentType。修改println语句内容构造出合法的HTML页面。通过out.println语句构造出响应的HTML页面。让我们来看一个例子Servlet的生命周期的生命周期Servlet从产生到结束的流程产生Servlet,加载到ServletEngine中,调用init()进行初始化以多线程的方式处理来自Client的请求调用destroy()来销毁Servlet,进行垃圾收集Servlet生命周期的定义,包括如何加载、
60、实例化、初始化、处理客户端请求以及如何被删除。这个生命周期由javax.servlet.Servlet接口的init()、service()和destroy()方法表达。Session状态持久化技术HTTP协议是一种无状态的协议,客户端每打开一个Web页面,它就会与服务器建立一个新连接,发送新请求到服务器,服务器处理请求将该请求返回给客户端,服务器不记录任何客户端信息,这样每次客户端发送的请求都是独立的,这样的方式在现实中是不可用的。Session(会话)恰恰是一种能将信息保存在服务器端的技术,它能记录特定的客户端到服务器的一系列请求,以实现特定应用目的与系统的多次请求交互。 会话跟踪技术Co
61、okie实现会话跟踪cookie是一小块可以嵌入在HTTP请求和应答中的数据。典型情况下,Web服务器将cookie值嵌入到应答的头文件中,而浏览器则在其以后的请求中都将携带同样的cookie。cookie的信息中可以有一部分用来存储会话ID,这个ID被服务器用来将某些HTTP请求绑定在会话中。cookie由浏览器保存在客户端,通常保存在一个名为cookie.txt的文件。cookie还含有一些其他属性,诸如可选的注释、版本号以及最长生存期。会话跟踪技术URL重写实现会话跟踪:Servlet创建的所有链接的重定向都必须将会话ID编码为URL的一部分。在服务器指定的URL编码的方法中,最可能的一
62、种是给URL加入一些参数或者附加的路径信息。区别:encodeURL( ):重写URL,使URL包含会话IDencodeRedirectURL( ):重定向页面会话跟踪技术隐藏表单域实现会话跟踪:隐藏表单域将字段隐藏在HTML表单中,但不在客户端显示。当服务器回发给客户端的响应中,将需要再次使用的信息用隐藏域隐藏起来,客户端在再次请求时将隐藏内容一起发送,服务器将接收到自己发给客户端的隐藏信息。JavaServlet会话跟踪API在Servlet中使用会话信息是相当简单的,主要的操作包括:查看和当前请求关联的会话对象,必要的时候创建新的会话对象,查看与某个会话相关的信息,在会话对象中保存信息,
63、以及会话完成或中止时释放会话对象。查看当前请求的会话对象HttpSessionsession=request.getSession(true);JavaServlet会话跟踪API查看和会话有关的信息HttpSession对象生存在服务器上,通过Cookie或者URL机制自动关联到请求的发送者。会话对象提供一个内建的数据结构,在这个结构中可以保存任意数量的键值对。getAttribute:取一个session相联系的信息getID:返回会话的唯一标识isNew:如果客户(浏览器)还没有绑定到会话则返回true,对于早就存在的会话,返回值为falsegetCreationTime:返回建立会话的
64、以毫秒计的时间JavaServlet会话跟踪API查看和会话有关的信息getLastAccessedTime:返回客户最后发送请求的时间getMaxInactiveInterval:返回以秒计的最大时间间隔,负数表示会话永远不会超时。在会话对象中保存数据setAttribute:设定属性的值废弃会话数据removeAttriBute:废弃指定属性invalidate:废弃整个会话Servlet过滤器什么是Servlet过滤器?Servlet过滤器是小型的Web组件,它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。典型的例子包括记录关于请求和响应的数据、处理安
65、全协议、管理会话属性等。过滤器提供一种面向对象的模块化机制,用以将公共任务封装到可插入的组件中,这些组件通过一个配置文件来声明,并动态地处理。Servlet过滤器Servlet过滤器中结合了许多元素,从而使得过滤器成为独特、强大和模块化的Web组件。Servlet过滤器具有如下特点:声明式的:过滤器通过Web部署描述符(web.xml)中的XML标签来声明。这样允许添加和删除过滤器,而无需改动任何应用程序代码或JSP页面。动态的:过滤器在运行时由Servlet容器调用来拦截和处理请求和响应。灵活的:过滤器在Web处理环境中的应用涵盖诸如日志记录和安全等许多最公共的辅助任务,可用于对来自客户机的
66、直接调用执行预处理和后期处理,以及处理在防火墙之后的Web组件之间调度的请求。Servlet过滤器Servlet过滤器具有如下特点:模块化的:通过把应用程序处理逻辑封装到单个类文件中,过滤器从而定义了可容易地从请求/响应链中添加或删除的模块化单元。可移植的:Servlet过滤器是跨平台和跨容器可移植的,从而进一步支持了Servler过滤器的模块化和可重用本质。可重用的:归功于过滤器实现类的模块化设计,以及声明式的过滤器配置方式,过滤器可以容易地跨越不同的项目和应用程序使用。Servlet过滤器Servlet过滤器具有如下特点:透明的:在请求/响应链中包括过滤器是为了补充servlet或JSP页
67、面提供的核心处理。因而,过滤器可以根据需要添加或删除,而不会破坏servlet或JSP页面。所以Servlet过滤器是通过一个配置文件来灵活声明的模块化可重用组件。过滤器动态地处理传入的请求和传出的响应,并且无需修改应用程序代码就可以透明地添加或删除它们。最后,过滤器独立于任何平台或者Servlet容器,从而允许将它们容易地部署到任何相容的J2EE环境中。UseServletFilter实现一个Servlet过滤器需经历三个步骤:编写过滤器实现类的程序把该过滤器添加到Web应用程序中(通过在Web部署描述符/web.xml中声明它)把过滤器与应用程序一起打包并部署它UseServletFilt
68、er编写实现类:3个接口:Filter、FilterChain和FilterConfig从编程的角度看,过滤器类将实现Filter接口,然后使用FilterChain和FilterConfig接口。该过滤器类的一个引用将传递给FilterChain对象,以允许过滤器把控制权传递给链中的下一个资源。FilterConfig对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。UseServletFilter过滤器生命周期方法init():实例化过滤器方法,用于过滤器初始化,该方法接受一个FilterConfig类型的对象作为输入。doFilter():过滤器拥有的单个用于处理请求和响应的方法
69、,该方法接受三个输入参数:ServletRequest、ServletResponse和FilterChain对象。destroy():这个方法执行任何清理操作,这些操作可能需要在自动垃圾收集之前进行。UseServletFilter配置过滤器在定义过滤器后,需要在web.xml文件中配置过滤器Encodermyproj.filter.SetCharacterEncodingFilternewcharsetgb2312Encoder/*UseServletFilter部署过滤器编译SetCharacterEncodingFilter类,编译时,需要将JavaServletAPI的包servle
70、t-api.jar放到类路径中,编译后的类放到Web应用的WEB-INFclasses目录下,并且目录结构要与包的结构一致。UseServletFilter过滤器的应用设置字符编码的过滤器:通过配置参数encoding指明使用何种字符编码,以处理页面的中文问题。使用Filter实现URL级别的权限认证:在实际开发中我们经常把一些执行敏感操作的servlet映射到一些特殊目录中,并把filter把这些特殊目录保护起来,限制只能拥有相应访问权根的用户才能访问这些目录下的资源。UseServletFilter过滤器的应用实现用户自动登陆的过滤器:在用户登陆成功后,发送一个名为user的cookie给
71、客户端,cookie的值为用户名和加密后的密码。可以通过过滤器检查请求是否带有名称为user的cookie。如果有,则进行验证。实现应用访问的日志:对于到达系统的所有请求,过滤器收集诸如浏览器类型、一天中的时间、转发URL等相关信息,并对它们进行日志记录。Thanks for your attention!Java Web应用开发基础教程JSP第第6章章JSP基础JSP(JavaServerPages)一种新的动态网页技术标准,在传统的网页HTML文件中加入Java程序片段和JSP标签,构成了JSP网页。Servlet/JSPContainer收到客户端发出的请求时,首先执行其中的程序片段,然
72、后将执行结果以HTML格式响应给客户端。程序片段可以是:操作数据库、重新定向网页以及发送E-Mail等等,所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为服务器端语言。JSP基础JSP的技术优点一次编写,各处执行搭配可重复使用的组件采用标签化页面开发企业应用架构的支持JSP与Servlet的比较Servlet功能强大,体系设计完善,但是它输出HTML语法时,必须使用out.println()一句一句地输出。例子:example6_1.jspJSP语法在传统的HTML页面文件中加入java程序片和JSP标签就构成了一个JSP页面文件。JSP
73、页面可由5种元素组合而成:普通的HTML标记符JSP标签:如,指令标签、动作标签变量和方法的声明Java程序片Java表达式JSP页面中的变量和方法的声明、程序片段及表达式称为JSP脚本。例子:example6_3.jspJSP语法变量的声明:JSP中声明变量放在“”标记符号之间,变量的类型可以是Java语言允许的任何数据类型,我们将这些变量称为JSP页面的成员变量。“”之间声明的变量在整个JSP页面内都有效,这些变量作为类的成员变量存在,其的内存空间直到服务器关闭才释放。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程共享JSP页面的成员变量,因此任何一个用户对JS
74、P页面成员变量操作的结果,都会影响到其他用户。例子:example6_4.jspJSP语法方法的声明:JSP中声明方法同样放在“”标记之间,被声明的方法在整个JSP页面有效,但是该方法内定义的变量只在该方法内有效。这些方法将在Java程序片中被调用,当某一方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占的内存。例子:example6_5.jspJSP语法类的声明可以在“”之间声明一个类,该类在JSP页面内有效,即在JSP页面的Java程序片部分可以使用该类创建对象。下面的例子,我们定义了一个Square类,该类的对象负责求平方值。例子:example6_6.jspJSP语法Jav
75、a程序片段可以在“”之间插入Java程序片段。一个JSP页面可以有许多程序片段,这些程序片将被JSP引擎按顺序执行。一个程序片中声明的变量称做JSP页面的局部变量,它们在JSP页面内的所有程序片部分以及表达式部分内都有效。可以将一个程序片分割成几个更小的程序片,然后在这些小的程序片之间再插入JSP页面的一些其它标记元素。JSP语法Java程序片段当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP页面局部变量操作结果不会影响到其它客户的这个局部变量。表达式可以在“”之间插入一个表达式,这个表达式必
76、须能求值。表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。JSP语法注释:注释可以增强JSP文件的可读性,并易于JSP文件的维护。JSP中的注释可分为两种:HTML注释:在标记符号“”之间加入注释内容:JSP引擎把HTML注释交给客户,因此客户通过浏览器查看JSP的源文件时,能够看到HTML注释。JSP注释:在标记符号“”之间加入注释内容:JSP引擎忽略JSP注释,即在编译页面时忽略JSP注释。JSP指令元素指令元素JSP指令分为两种类型:第一是page指令,用来导入指定的类,自定义Servlet的超类等;第二是include指令,用来在JSP文件转换成Servlet时引
77、入其他文件。page指令JSP语法include指令:用于JSP页面转换成Servlet时引入其他文件。该指令语法如下:这里所指定的URL是和发出引用指令的JSP页面相对的URL,包含文件的内容也是JSP代码,即静态HTML、脚本元素、JSP指令和动作等。由于include指令是在JSP转换成Servlet的时候引入文件,因此如果导航条改变了,所有使用该导航条的JSP页面都必须重新转换成Servlet。例子:example6_7.jsp、hello.txt例子:example6_8.jsp、example6_9.jspJSP语法taglib指令:JSPAPI允许用户自定义标签,一个自定义标签库
78、就是自定义标签的集合。自定义标签库也称为JSP标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。Taglib指令的语法:uri属性确定标签库的位置,prefix属性指定标签库的前缀JSP指令标签动作标签是一种特殊的标签,它影响JSP运行时的功能。动作指令与编译指令不间,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的脚本动作。编译指令在将JSP编译成Servlet时起作用,动作指令通常可替换成Java脚本,是JSP脚本的标准化写法。JSP动作标签包括7个,分别是jsp:include、js
79、p:forward、jsp:param、jsp:useBean、jsp:setProperty、jsp:getProperty和jsp:plugin。JSP指令标签动作标签动作标签功功 能能jsp:include用于动态引入一个JSP页面jsp:forward执行页面转向,将请求的处理转发到下一个页面jsp:param用于传递参数,必须与其他支持参数的标签一起使用jsp:useBean使用JavaBeanjsp:setProperty修改JavaBean实例的属性值jsp:getProperty获取JavaBean实例的属性值jsp:plugin用于下载JavaBean或Applet到客户端执
80、行JSP指令标签include动作指令:标签表示包含一个静态的或者动态的文件。include动作标签的语法如下:该动作标签告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态插入文件的include指令标签不同,当JSP引擎把JSP页面转译成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并一个新的JSP页面,而是告诉Java解释器,这个文件在JSP运行时才包含进来。如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;如果包含的文件是Jsp文件,JSP引擎就执行这个文件,然后将执行的结果发送到客户端,并由客户端负责显
81、示这些结果。JSP指令标签:页面请求之前预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet。:所有代码分别处理,在页面被请求的时候才编译,被编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。例子:example6_10.jsp、example6_9.jspJSP指令标签forward动作指令:标签表示重定向一个静态html/jsp文件,或者是一个程序段。Forwar动作标签语法如下:或者JSP指令标签param动作指令:param标签以“名字/值”对的形式为其它标签提供附加信息,这个标签与jsp:include
82、、jsp:forward、jsp:plugin标签一起使用。param动作标签格式如下:当该标签与jsp:include标签一起使用时,可以将param标签中的值传递到include指令要加载的文件中去,因此include动作标签如果结合param标签,可以在加载文件的过程中向该文件提供信息。例子:example6_11.jsp、example6_9.jsp例子:example6_12.jsp、example6_13.jspJSP指令标签useBean动作指令包含:、和。标签用于在JSP页面中创建一个Bean实例并指定它的名字以及作用范围。标签表示获取Bean的属性的值并将之转化为一个字符串,
83、然后将其插人到输出的页面中。标签表示用来设置Bean中的属性值。我们用HTML完成JSP页面的静态部分,用JavaBeans完成动态部分,实现真正意义上的静态和动态分割,详细内容将在后面讨论。JSP指令标签plugin动作指令在页面中使用普通的HTML标记可以让客户下载运行一个JavaApplet小应用程序,但并不是所有的客户的浏览器都支持JavaApple小程序,而使用plugin动作标签可以保证客户能执行你的小应用程序。该动作标签指示JSP页面加载Javaplugin,该插件由客户负责下载,并使用该插件来运行JavaApplet。plugin动作标签目前不常用。JSP内置对象有些对象不用声
84、明就可以在JSP页面的脚本部分使用,就是JSP的内置对象。JSP内置对象有:resquest、response、session、application、out。request对象:该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息,它是HttpServletRequest类的实例。JSP内置对象在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。request对象可以使用getParameter(Strings)方法获取该表单通过text提交的信息,例如re
85、quest.getParameter(boy)可以获取来自页面名为boy的属性的值。获取客户提交信息获取客户提交信息:example6_14.jsp、example6_15.jspJSP内置对象当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊的处理方式。首先,将获取的字符串用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象即可。Stringstr=request.getParameter(girl);byteb=str.getBytes(ISO-8859-1);str=newString(b);处理
86、汉字信息处理汉字信息:example6_16.jsp、example6_17.jspJSP内置对象当客户访问一个页面时,会提交一个http请求给服务器的JSP引擎,这个请求包括一个请求行、http头和信息体。如下所示:post/example5_9.jsp/HTTP.1.1host:localhost:8080accept-encoding:gzip,deflate一个请求还包含信息体,即HTML标记组成的部分,可能包括各式各样用于提交信息的表单等,可以使用JSP引擎的内置对象request对象来获取客户提交的各类信息。常用方法的使用常用方法的使用:example6_18.jspJSP内置对象
87、4、获取、获取HTML 表单提交的数据表单提交的数据单选框:表单中经常需要使用,radio需要指定name属性,如果几个单选键的name取值相同,那么同一时刻只能有一个被选中。此外,checked如果取值是一个非空的字符串,那么该单选框的初始状态就是选中状态。example6_19.jsp、example6_20.jsp下拉菜单和滚动列表:将一列用标签标记的条目放到表单的标签中,就可以创建一个选项式的下拉式菜单。example6_21.jsp、example6_22.jspJSP内置对象response对象对客户的请求做出动态的响应,向客户端发送数据。它是HttpServletResponse
88、类的实例。动 态 响 应 contenType属 性 : 通 过 response对 象 的setContentType(Strings)方法可以改变contentType的属性值。response重定向:可以使用response的sendRedirect(URL)方法实现客户重定向,将客户重新引导至另一页面。例子:example6_23.jspJSP内置对象session对象:JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理,它是HttpSession的对象。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户首次访问服务
89、器上的一个jsp页面时,jsp引擎产生一个session对象,同时分配一个String类型的Id号,jsp引擎同时将这个Id号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。例子:example6_24.jspJSP内置对象当一个客户第一次访问服务器上的一个JSP页面时,JSP引擎创建一个和该客户相对应的session对象,当客户在所访问的网站的各个页面之间浏览时,这个session对象都是同一个,直到客户关闭浏览器,这个session对象才被取消;而且不同客户的session对象是互不相同的。与session对象不同的是application对象。
90、服务器启动后,就产生了这个application对象。当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭,这个application对象才被取消。JSP内置对象与session对象不同的是,所有客户的application对象是相同的一个,即所有的客户共享这个内置的application对象。我们已经知道,JSP引擎为每个客户启动一个线程,也就是说,这些线程共享这个application对象。Application对象的常用方法介绍如下:publicv
91、oidsetAttribute(Stringkey,Objectobj)publicObjectgetAttibue(Stringkey)publicEnumerationgetAttributeNames()publicvoidremoveAttribue(Stringkey)例子:example6_25.jspJSP内置对象out对象: out对象是一个输出流,用来向客户端输出数据,out对象用于各种数据的输出。out对象可调用如下的方法用于各种数据的输出,例如:out.print(Boolean),out.println(boolean);out.print(char),out.prin
92、tln(char);out.print(double),out.println(double);out.print(fload),out.println(float);out.print(long),out.println(long);out.print(String),out.println(String);out.newLine();out.flush();out.close()。例子:example6_26.jspJSP中使用JavaBeanJavaBeans被称为是Java组件技术的核心。JavaBeans的结构必须满足一定的命名约定。JavaBeans类似于Windows下的Acti
93、veX控件,它们都能提供常用功能并且可以重复使用。JavaBeans可以在JSP程序应用中给我们带来很大的方便,这使得开发人员可以把某些关键功能和核心算法提取出来封装成为一个组件对象,这样就增加了代码的重用性和系统的安全性。比如我们可以将访问数据库的数据处理功能编写封装为JavaBeans组件,然后在某几个JSP程序中加以调用。JSP中使用JavaBean操作指令:用于在JSP页面中实例化一个JavaBean组件,这个实例化的JavaBean组件对象将可以在这个JSP程序的其它地方被调用。操作指令的基本语法形式如下所示:class=“package.class”|type=“package.c
94、lass”|JSP中使用JavaBean操作指令:用于指定JavaBeans的某个属性的值。它的语法形式如下所示:PropertyExpr:=property=*|property=PropertyName|property=PropertyNamevalue=PropertyValue|property=PropertyNameparam=ParameterName”/JSP中使用JavaBean操作指令操作指令搭配操作指令一起使用可以获取某个JavaBean组件对象的属性值,并使用输出方法将这个值输出到页面。操作指令的语法形式如下所示例子:example6_27.jsp、AddClass.
95、javaThanks for your attention!Java Web应用开发基础教程自定义标签自定义标签第第7章章Jsp标签JSP技术提供了一种封装动态类型的机制自定义标签,它扩展了JSP语言。自定义标签通常发布在标签库中,标签库定义了一个自定义标签集并包含实现标签的对象。页面中的某些功能可以通过自定义标签来实现,包括对隐含对象的操作,处理表单,访问数据库集等其它企业级服务,如e-mail,目录服务,处理流控制等等。Jsp标签JSP标签库由精通Java语言的开发者及精于访问数据机器等服务的专家来创建,由网络应用设计者来使用,自定义标签通过封装实现了生产率的提高。自定义标签有着丰富的特点
96、,它们可以:可以通过调用页面传递的属性进行自定义;可以访问对于JSP页面可能的所有对象;可以修改由调用页面产生的响应;可以相互间通信;可以嵌套使用实现复杂的交互。Jsp标签自定义标签是用户定义的JSP语言元素,每一个标签对应一个实现了特定接口的Java处理类,封装了Java代码编写的预定义行为。在运行时,标签被替换成相应的预定义Java代码,并用来处理标签逻辑。换句话说,当JSP页面包含一个自定义标签,那么在运行时,标签时会被转化为servlet运行,通过Web容器来调用对应的标签逻辑。自定义标签使用的目的在于将业务和表示逻辑分离,提高代码的可重用性和可移植性。自定义标签自定义标签JSP自定义
97、标签使用XML语法,一般可分为简单标签、带属性标签和带body内容标签三大类。1、简单标签简单标签:简单标签没有标签体及属性。2、带属性标签带属性标签:自定义标签也可以有自己的属性,属性列于起始标签之后,不同的属性值对应自定义标签不同的行为。3、带带body内内容容标标签签:自定义标签可以包含自定义的核心标签,脚本元素,HTML文本,以及标签依赖的体内容。自定义标签自定义标签自定义标签是用户定义的JSP语言元素。当包含自定义标签的JSP页面被转化为servlet,标签转化为对应标签处理器对象的操作,当servlet执行时Web容器调用相应操作。一个自定义标签对应一个JAVA处理类来处理标签逻辑
98、,好处是可以尽可能的减少页面中的代码。让我们来看一个最简单的自定义标签:TagExample1.java自定义标签自定义标签要定义一个标签,需要以下准备工作:1、为标签开发一个标签处理器:TagExample1.java2、在标签库中声明标签描述符:WEB-INF/testTag.tld1.01.2testhttp:/hellocn.edu.zhjnc.TagExample1empty自定义标签自定义标签要定义一个标签,需要以下准备工作:3、在Web应用的web.xml文件中声明标签库引用4、在JSP页面中使用下指令来声明使用标签库tagext包概述与标签相关的接口与类位于javax.serv
99、let.jsp.tagext包中,其中共有7个接口和18个类,其中使用最多的接口与类的继承关系如图所示tagext包概述JspTag接口为最底层,该接口并没有什么具体的方法与属性。Tag接口的子接口IterationTag用于开发迭代的标签,它 有 一 个 实 现 类 为 TagSupport; BodyTag接 口 继 承 自IterationTag,用于开发带体内容的标签,它也有一个实现类为BodyTagSupport。SimpleTag接口及其实现类SimpleTagSupport用于处理一些简单的自定义标签需求,它是在JSP2.0之后新增的类别。SimpleTagSupport为了使用
100、上的简单而降低了复杂性,对于一些简单的自定义标签需求,您可以继承它来实现。Tag接口Tag接口继承自JspTag接口,用于实现不必处理body内容的标签,接口中定义了一些用于处理标签和JSP页面的属性和方法,其生命周期和方法的调用的有效期在标签开始到标签结束之间。Tag接口中的主要方法说明如下:接口中的主要方法说明如下:publicintdoEndTag()throwsJspException功能说明:执行这个方法即表示标签要结束了。方法如果返回SKIP_PAGE则会忽略当前标签之后的代码的执行;如果返回EVAL_PAGE则会继续执行当前标签之后的代码。Tag接口Tag接口中的主要方法说明如下
101、:接口中的主要方法说明如下:publicintdoStartTag()throwsJspException功能说明:一旦开始执行doStartTag()方法,表明初始化工作已经完成,开始执行标签,但body中的内容尚未执行。如果这个方法返回EVAL_BODY_INCLUDE(值为1)或EVAL_BODY_BUFFERED(值为2)表明body中的内容应当被执行;如果返回SKIP_BODY(值为0)表明body中的内容将会被略过。SimpleTag接口与SimpleTagSupport类SimpleTag接口继承自JspTag接口,用于实现逻辑标签、迭代标签、带有body的标签等,它具有和Bod
102、yTag接口相类似的功能,但使用起来更为方便,生命周期也更为简单。SimpleTag接口提供了一个方法doTag(),这一个方法的功能取代了doStartTag()方法和doEndTag()方法。SimpleTagSupport类是一个实现了SimpleTag接口的用于创建标签处理类的基类,用于快速创建简单的标签处理类。IterationTag接口与TagSupport类IterationTag接口继承自Tag接口,主要用于定义需要对body内容作循环处理的标签。IterationTag接口相对Tag接口又增加了一个新的方法:doAfterBody()。doAfterBody()方法用于在每次
103、执行完body中的内容之后控制是否需要再次执行body中的内容。如果返回值为EVAL_BODY_AGAIN,则body中的内容将再次被执行;如果返回SKIP_BODY,则body中的内容将不再执行。TagSupport类 是 一 个 实 现 了 IterationTag接 口 和java.io.Serializable接口的,用于创建无body的标签的标签处理类的基类。BodyTag接口与BodyTagSupport类BodyTag接口继承自IterationTag接口,主要用于实现带有body内容的标签。实现了BodyTag接口的标签处理类,实际上也实现了IterationTag接口。Bod
104、yTag接口的doStartTag()方法能返回3种值:SKIP_BODY:略过body中的内容EVAL_BODY_INCLUDE:执行body中的内容EVAL_BODY_BUFFERED:生成一个BodyContent对象(由JSP编译器自动创建)以捕获body中的内容。BodyTagSupport类是用于创建有body的标签的标签处理类的基类。自定义标签自定义标签带属性的标签例子:TagExample2.java带体内容的标签例子:TagExample3.java嵌套标签例子:TagExample4.javaTagExample5.java表达式语言表达式语言ELEL(Expression
105、Language,表达式语言)最初定义在JSTL1.0规范中,在JSP2.0中,EL从JSTL中剥离出来,放到了JSTL规范中,并增加了新的特性。是为了便于存取数据而定义的一种语言。以“$”开头,以“”结尾,可以直接在JSP页面中使用,也可以作为元素属性的值,还可以在动作元素的内容中使用,但不能在脚本元素中使用。表达式语言表达式语言EL基本语法语法结构$expression变量:EL存取变量数据的方法很简单例如:$username,它的意思是取出某一范围中名称为username的变量与.运算符:EL提供.和两种运算符来存取数据当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号
106、,就一定要使用表达式语言表达式语言ELEL运算符算术运算符有五个:+、-、*或$、/或div、%或mod关系运算符有六个:=或eq、!=或ne、或gt、=或ge逻辑运算符有三个:&或and、|或or、!或not其它运算符有三个:Empty运算符、条件运算符、()运算符表达式语言表达式语言ELEL$count表达式语言表达式语言ELEL中定义了11个隐含对象pageContext:javax.servlet.jsp.PageContext对象,利用该对象可以访问ServletContext、Request、Response和session等对象。$pageContext.request.requ
107、estURL$pageContext.response.characterEncoding$pageContext.session.creationTime表达式语言表达式语言ELEL中与范围有关的隐含对象(4个)pageScope:主要用于获取页面范围内的属性的值requestScope:主要用于获取请求范围内的属性的值sessionScope:主要用于获取会话范围内的属性的值applicationScope:主要用于获取应用程序范围内的属性的值例子:session.getAttribute(“username”)$sessionScope.username表达式语言表达式语言ELEL与输入
108、有关的隐含对象(2个)param:主要用于获取请求中的参数值,等同于调用ServletRequest.getParameter(Stringname),例如请求的URL的?后有name=zhangsan,则可用$param.name来获取。paramValues:主要用于获取请求中的参数值,等同于调用ServletRequest.getParameterValues(Stringname)。表达式语言表达式语言ELEL的其他隐含对象cookie:主要用于获取Cookie对象header:主要用于获取请求报头的值headerValues:主要用于获取请求报头的值initParam:主要用于获取W
109、eb应用程序初始化参数的值JSTL大量的JAVA代码嵌入到了JSP页面中,大大降低了web应用的开发效率,同进将业务逻辑与表示逻辑混合在一起,严重违反了web应用多层体系架构的基本思想。JSP自定义标签大大减少了JSP页面的脚本数量,由于缺乏统一的标准规范,这些自定义标记库在功能范围、方法实现上存在很大差异,因此很难在不同的应用中移植。JSTLSun公司在新的JavaEE规范中提出了标准标记库。JSTL是一个实现web应用程序中常用功能的定制标记库集,由五个不同的功能标记库组成:(1)核心标签库(Core)(2)I18N格式标签库(I18N-capableformattablibaray)(3
110、)SQL标签库(SQLtaglibaray)(4)XML标签库(XMLtaglibaray(5)函数标签库(Functionstaglibaray)核心标签库(CTL)Core标记库用来实现web应用中的常用功能,在JSTL的5个标记库中,core标记库是最基础的标记库,其他标记库都是在core标记库的协同下来实现自身功能。在core标记库中,主要包含以下几类标记:通用标记:实现信息显示、变量管理、意外处理等流程控制标记:实现分支处理、迭代等基本流程控制URL标记:实现URL重定位、格式化等核心标签库(CTL)通用标记:用于在JSP中显示数据:用于为变量或JavaBean中的属性变量赋值:用于
111、删除存在于scope中的变量:捕捉异常核心标签库(CTL)流程控制标记:判断语句、:一起实现互斥条件执行,类似于java中的ifelsec:whentest=$row.money初学下海=100&row.money身手小试商业能手核心标签库(CTL)流程控制标记相当于法语句,但它必须在之前相当于else语句,当不成立时执行其内核心标签库(CTL)流程控制标记:在Collection对象中迭代操作URL操作标记:包含静态或动态的文件至本身的JSP页面:添加请求属性:用于构造URL,主要的用途是URL的重写:重定向到urlJSTL的使用下载jakarta-taglibs-standard-1.1.
112、2.zip解压后将standard.jar和jstl.jar文件复制到WEB-INFlib下将解压后tld下的.tld文件复制到WEB-INFtlds下(15个)在WEB-INFweb.xml文件中添加如下语句http:/ for your attention!Java Web应用开发基础教程JAVASCRIPT第第8章章JavaScriptJavaScript是一种可直接嵌入网页文档中的脚本语言,被设计用来向HTML页面添加交互行为,读写HTML元素,验证数据,对事件作出响应。JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。Ja
113、vaScript主要用于HTML的页面,脚本嵌入在HTML的源码中。另一方面,JavaScript编写的程序不必在运行前编译,它们可以直接写入Web页面中并由调用它们的浏览器来解释执行。这样,一些基本交互作用就不用在服务器端完成,提高了客户端的响应时间。JavaScriptJavaScript的具有如下特点:简简单单性性:JavaScript是基于Java基本语句和控制流之上的简单而紧凑的设计,而且,JavaScript的变量类型是采用弱类型,未采用严格的数据类型。安安全全性性:JavaScript不允许访问本地硬盘,不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现
114、信息浏览或动态交互,从而有效的防止数据的丢失。JavaScriptJavaScript的具有如下特点:动动态态性性:Javascript可以直接对用户或客户输入做出响应,无须经过web程序。JavaScript对用户的响应采用以事件驱动的方式进行,即由某种操作动作引起相应的事件响应,如:点击鼠标、移动窗口、选择菜单等。跨跨平平台台性性:JavaScript依赖于浏览器本身,与操作环境无关。只要能运行浏览器的计算机,并安装了支持JavaScript的浏览器就可以正确执行,从而实现了“编写一次,走遍天下”的梦想。JavaScript开发JavaScript用什么软件一个JavaScript程序其实
115、就是一个文档,一个文本文件,它嵌入到HTML文档中的,所以,任何可以编写HTML文档的软件都可以用来开发JavaScript。JavaScript的调试Javascript是网页的前端开发语言,直接运行在浏览器上,一般来讲直接在浏览器中调试即可。Javascript的调试需要相对较多的编程经验,目前还没有一种非常高效的专用开发工具。JavaScript语法基础JavaScript可 以 出 现 在 HTML的 任 意 地 方 。 使 用 标 记,你可以在HTML文档的任意地方插入JavaScript,甚至在之前插入也不成问题。如果要在声明框架的网页(框架网页)中插入,就一定要在之前插入,否则不
116、会运行。页面插入JavaScript还有一种方法,就是把JavaScript代码写到另一个文件当中(此文件通常应该用“.js”作扩展名),然后用格式为“”的标记把它嵌入到文档中即可。JavaScript语法基础1、执行顺序执行顺序JavaScript程序按照在HTML文件中出现的顺序逐行执行。如果需要在整个HTML文件中执行(如函数、全局变量等),最好将其放在HTML文件的中。某些代码,比如函数体内的代码,不会被立即执行,只有当所在的函数被其他程序调用时,该代码被执行。JavaScript语法基础2、标识符标识符JavaScript中标识符用来命名变量和函数,或者用作某些循环的标记。在Java
117、Script中,合法的标识符命名规则和Java以及其他许多语言的命名规则相同,第一个字符必须是字母、下划线(-)或美元符号($),其后的字符可以是字母、数字或下划线、美元符号。在标识符中数字不允许作为首字符出现,不能和JavaScript中用于其他目的的关键字同名。JavaScript是对字母大小写敏感大小写敏感的。JavaScript语法基础3、空白符空白符与换行符与换行符JavaScript会忽略关键字、变量名、数字、函数名或其他各种元素实体之间的空格、制表符或换行符,除非这些空格是字符串常量的一部分。由于可以在各种元素实体之间随意使用空格、制表符或换行符,所以就可以使用整齐、一致的方式自
118、由安排程序布局,在其中使用缩进格式、使代码容易阅读和理解。JavaScript语法基础4、语句语句与分隔符与分隔符与Java语言不同,JavaScript并不要求必须以分号“;”作为语句的结束标记。如果语句的结束处没有分号,JavaScript会自动将该行代码的结尾作为语句的结尾。例如,下面的两行代码都是正确的。alert(HelloWorld)alert(HelloWorld);注意的是,最好的代码编写习惯是在每行代码的结尾处加上分号,这样可以保证每行代码的准确性。JavaScript语法基础5、块块语句块是用大括号“”括起来的一个或n个语句。在大括号里边是几个语句,但是在大括号外边,语句块
119、是被当作一个语句的。语句块是可以嵌套的,也就是说,一个语句块里边可以再包含一个或多个语句块。JavaScript语法基础6、关键字关键字abstractcontinuefinallyinstanceofprivatethisbooleandefaultfloatintpublicthrowbreakdoforinterfacereturntypeofbytedoublefunctionlongshorttruecaseelsegotonativestaticvarcatchextendsimplementsnewsupervoidcharfalseimportnullswitchwhilecl
120、assfinalinpackagesynchronizedwithJavaScript语法基础7、注释注释JavaScript注释有两种:单行注释和多行注释。单行注释用双反斜杠“/”表示。当一行代码有“/”,那么,“/”后面的部分将被忽略。多行注释是用“/*”和“*/”括起来的一行到多行文字。程序执行到“/*”处,将忽略以后的所有文字,直到出现“*/”为止。JavaScript数据类型与变量JavaScript有它自身的基本数据类型、表达式和算术运算符以及程序的基本框架结构。JavaScript提供了四种基本的数据类型用来处理数字和文字,而变量提供存放信息的地方,表达式则可以完成较复杂的信息处
121、理。JavaScript的数据类型包括:数值类型、字符串类型、布尔类型、空值类型、未定义值。未定义值即undefined,声明了变量但未对其进行初始化时赋值。JavaScript数据类型与变量关于关于字符串数据类型字符串数据类型程序中的字符串型数据是包含在单引号或双引号中的。由单引号定界的字符串中可以含有双引号,由双引号定界的字符串中也可以含有单引号,字符串数据类型有4种表示方式。单引号内出现双引号或双引号内出现单引号时,不需要进行转义。但是,如果双引号内出现双引号或单引号内出现单引号,则必须进行转义。JavaScript数据类型与变量关于关于转义字符转义字符以反斜杠开头的不可显示的特殊字符通
122、常称为控制字符,也被称为转义字符。通过转义字符可以在字符串中添加不可显示的特殊字符,或者防止引号匹配混乱。JavaScript常用的转义字符如下表所示。转义字符描述转义字符描述b退格v跳格n回车换行r换行tTab符号反斜杠f换页OOO八进制整数,范围000777单引号xHH十六进制整数,范围00FF双引号uhhhh十六进制编码的Unicode字符JavaScript数据类型与变量关于关于未定义值未定义值未定义类型的变量是undefined,表示变量还没有赋值(如vara;),或者赋予一个不存在的属性值。此外,JavaScript中有一种特殊类型的数字常量NaN,即“非数字”。当在程序中由于某种
123、原因发生计算错误后,将产生一个没有意义的数字,此时JavaScript返回的数字值就是NaN。JavaScript数据类型与变量关于关于空值空值JavaScript中的关键字null是一个特殊的值。它表示为空值,用于定义空的或不存在的引用。如果试图引用一个没有定义的变量,则返回一个null值。这里必须要注意的是,null不等同于空的字符串()或0。null与undefined的区别是,null表示一个变量被赋予了一个空值,而undefined则表示该变量尚未被赋值。JavaScript数据类型与变量变量类型规则:JavaScript是无类型的,其变量可以存放任何数据类型的值。在JavaScri
124、pt当中,可以把一个数值赋给一个变量,然后再用一个字符串对其赋值。i=10;i=“ten”;JavaScript数据类型与变量变量声明变量:JavaScript中变量的声明不是必须的,但最好先声明再使用,可用关键字var来声明变量。可以使用一个关键字var同时声明多个变量可以在声明的同时对其赋值如果只声明未赋值,则其值为undefinedvar语句可以用作for循环和for循环的一部分可以使用var语句多次声明同一变量,其作用相当于重新赋值JavaScript数据类型与变量变量变量命名:JavaScript中变量命名第一个字符必须是字母或下划线;并且变量名中不可包含空格以及!、#、$、等特殊字
125、符;变量名大小写敏感。作用范围:变量可分为全局变量和局部变量:全局变量在整个程序中存在在函数内部定义的变量只在函数内起作用例子:example8_1.htmlJavaScript数据类型与变量算术运算符+*/%+赋值运算符关系运算符=!=!=逻辑运算符&|!字符串运算符+例子:example8_2.htmlJavaScript流程控制语句语句(分号不是必须的)表达式语句条件语句:ifelse多路分支语句:switchcase循环语句:while循环语句:dowhile循环语句:for退出循环:break、continueJavaScript函数函数:function函数名(参数表)函数体函数可
126、以有一个返回值,有返回值的函数可以作为表达式使用。在函数外定义的变量为全局变量在函数内定义的变量使用了var修饰为局部变量在函数内定义的变量没有用var修饰为全局变量例子:example8_3.html例子:example8_4.htmlJavaScript对象对象(Object)是JavaScript中最重要的一种数据类型,一个对象中可包含若干属性和方法。属性相当于一种变量,有些属性有初始值,可以通过它们获取对象的参数,有些属性是只读的,这种属性可作为常量使用。引用对象属性的方法是:对象名.属性名方法相当于函数,可以调用对象的方法来实现相应操作。引用对象方法的方法是:对象名.方法名(参数)J
127、avaScript对象JavaScript对象字字符符串串对对象象:JavaScript的String对象是文本值的包装器。除了存储文本,String对象包含一个属性和各种方法来操作或收集有关文本的信息。与Boolean对象类似,String对象不需要进行实例化便能够使用。例如,您可以将一个变量设置为一个字符串,然后String对象的所有属性或方法都可用于该变量。String对象只有一个属性,即length,它是只读的。length属性可用于只返回字符串的长度,不能在外部修改它例子:example8_5.htmlJavaScript对象算术函数算术函数Math对象对象:JavaScript的M
128、ath对象提供对数据的数学计算。例子:example8_6.htmlabs(x)返回x的绝对值acos(x)返回x的反余弦值(余弦值等于x的角度),用弧度表示。asin(x)返回x的反正弦值。atan(x)返回x的反正切值。ceil(x)返回大于等于x的最小整数。cos(x)返回x的余弦。exp(x)返回e的x次幂(ex)。floor(x)返回小于等于x的最大整数。log(x)返回x的自然对数(lnx)。max(a,b)返回a,b中较大的数。min(a,b)返回a,b中较小的数。pow(n,m)返回n的m次幂(nm)。random()返回大于0小于1的一个随机数。round(x)返回x四舍五入
129、后的值。sin(x)返回x的正弦。sqrt(x)返回x的平方根。tan(x)返回x的正切。JavaScript对象日日期期及及时时间间对对象象:Date日期对象可以储存任意一个日期,从0001年到9999年,并且可以精确到毫秒数(1/1000秒)。在内部,日期对象是一个整数,它是从1970年1月1日零时正开始计算到日期对象所指的日期的毫秒数。如果所指日期比1970年早,则它是一个负数。所有日期时间,如果不指 定 时 区 , 都 采 用 “UTC”( 世 界 时 ) 时 区 , 它 与“GMT”(格林威治时间)在数值上是一样的。Date对象有很多的“get/setUTCXXX()”这样的方法,它
130、表示既有getXXX()方法,又有setXXX()方法。例子:example8_7.htmlJavaScript对象JavaScript中的系统函数JavaScript中的系统函数又称内部方法。它提供了与任何对象无关的系统函数,使用这些函数不需创建任何实例就可以直接使用。下面给出几个系统函数的说明:1、eval(字符串表达式):返回字符串表达式中的值2、unEscape(String):返回字符串ASCII码3、escape(character):返回字符的编码4、parseFloat(floustring):返回实数5、parseInt(numbestring,radix):返回不同进制的数
131、,radix是数的进制例子:example8_8.html浏览器对象系统浏览器对象系统窗口对象:Window对象表示浏览器中打开的窗口。如果文档包含框架(frame或iframe标签),浏览器会为html文档创建一个window对象,并为每个框架创建一个额外的window对象。窗口对象的事件驱动窗 口 对 象 主 要 有 装 入 Web文 档 事 件 onLoad和 卸 载 时onUnload事件。用于文档载入和停止载入时触发相关函数的执行。浏览器对象系统窗口对象的方法使用window.open(URL,name,features,replace)方法来创建新的窗口。alert()方法能创建一
132、个具有OK按钮的对话框。confirm()方法为编程人员提供一个具有两个按钮的对话框。prompt()方法允许用户在对话框中输入信息,并可使用默认值,其基本格式如下prompt(“提示信息”,默认值)。浏览器对象系统窗口对象中的属性frames:确定文档中帧的数目parent:指明当前窗口或帧的父窗口defaultstatus:默认状态,值显示在窗口的状态栏中status:包含文档窗口中帧中的当前信息top:包括的是用以实现所有的下级窗口的窗口window:指的是当前窗口self:引用当前窗口。浏览器对象系统Location对象:包含了当前页面的地址(URL)信息,可以直接改变此属性值,将其设
133、置成新的地址(URL):window.location=http:/;或者location=http:/;例子:example8_9.html浏览器对象系统Location对象还可以通过下面两种方法中的任何一种来使浏览器从服务器上Load页面:reload()-促使浏览器重新下载当前的页面,也就是“刷新”当前页面。replace(URL)-促使浏览器根据URL参数中给出的地址(URL)下载页面,同时在当前浏览器存储的历史记录(即所浏览过的页面的列表)中使用新的地址(即此方法中的URL参数)覆盖当前的页面。浏览器对象系统history对象:记录浏览器所浏览过的每一个页面,这些页面组成了一个历史记
134、录列表。forward()-将历史记录向前移动一个页面;back()-将历史记录向后移动一个页面;go()控制历史纪录,参数值可以是正负整数、零和字符串,例如history.go(-2)将是当前页后退两页;如果给定的参数是字符串,那么浏览器就会搜索列表,找到最接近当前页面位置的并且地址URL中含有此字符串的页面,然后转到该页面。例子:example8_10.html、example8_11.html浏览器对象系统Document对象是核心也是最重要的,其中又包括个主要的对象:Anchor:元素中name属性产生的对象Link:元素中href属性产生的对象Form:元素对象对于页面中存在的多个f
135、orm可以使用数组来进行操作,在某些情况下比使用id更为方便:例子:example8_12.html几个例子JavaScript之皮肤更换例子:example8_13.html、css1.css、css2.cssJavaScript之颜色变更函数传参例子:example8_14.htmlJavaScript之颜色变更多参数传递例子:example8_15.htmlJavaScript事件处理事件处理是对象化编程的一个很重要的环节,没有了事件处理,程序就会变得很死,缺乏灵活性。事件处理的过程可以这样表示:发生事件-启动事件处理程序-事件处理程序作出反应。其中,要使事件处理程序能够启动,必须先告诉
136、对象,如果发生了什么事情,要启动什么处理程序,否则这个流程就不能进行下去。事件的处理程序可以是任意JavaScript语句,但是我们一般用特定的自定义函数(function)来处理事件。JavaScript事件处理常见的JavaScript事件如下:1、onblur事件:发生在窗口失去焦点的时候。2、onchange事件:发生在文本输入区的内容被更改,然后焦点从文本输入区移走之后。3、onclick事件:发生在对象被单击的时候。4、onerror事件:发生在错误发生的时候。5、onfocus事件:发生在窗口得到焦点的时候。6、onload事件:发生在文档全部下载完毕的时候。7、onmoused
137、own事件:发生在用户把鼠标放在对象上按下鼠标键的时候。JavaScript事件处理8、onmouseout事件:发生在鼠标离开对象的时候。9、onmouseover事件:发生在鼠标进入对象范围的时候。10、onmouseup事件:发生在用户把鼠标放在对象上鼠标键被按下的情况下,放开鼠标键的时候。11、onreset事件:发生在表单的“重置”按钮被单击(按下并放开)的时候。12、onresize事件:发生在窗口被调整大小的时候,主要应用于window对象。13、onsubmit事件:发生在表单的“提交”按钮被单击(按下并放开)的时候。14、onunload事件:发生在用户退出文档(或者关闭窗口
138、,或者到另一个页面去)的时候。几个例子JavaScript之鼠标事件例子:example8_16.htmlJavaScript之全选、不选和反选例子:example8_17.htmlJavaScript之登陆模块例子:example8_19.html正则表达式正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串,我们可以达到如下的目的:给定的字符串是否符合正则表达式的过滤逻辑;可以通过正则表达式,从字符串中获取我们想要的特定部分。正则表达式符号意义
139、a-z匹配一个小写字母字符0-9匹配一个数字字符d匹配一个数字字符D匹配一个非数字字符正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,下表列出了部分元字符和对它们的一个简短的描述。正则表达式中重要的元字符符号意义匹配输入字符串的开始位置$匹配输入字符串的结束位置将下一个字符标记为一个特殊字符+匹配前面的子表达式一次或多次?匹配前面的子表达式零次或一次*匹配前面的子表达式任意次.匹配除“rn”之外的任何单个字符x|y匹配x或y匹配指定范围内的任意字符Thanks for your attention!Java Web应用开发基础教程MVC第第3
140、章章MVCMVC是一种目前广泛流行的软件设计模式。ASP、PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不是非常直接,因而非常难体现出业务模型的样子或模型的重用性。产品设计弹性力度非常小,非常难满足用户的变化性需求。MVC需求对应用分层,虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型能得到更好地体现。MVC 按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层,其结构图如图所示。MVCModel:完成业务流程/状态的处理及业务规则的制定。数据模型是其核心之一,主要完成实体对象的数据持久化。接受用户请求并返回处理结果属于黑箱操作,对其它层透明关注模型的重构和可靠性的提高View:数据的采集和处理,以及用户的请求,不包括在视图上的业务流程的处理。Controller:从用户接受请求,将模型和视图匹配在一起完成用户请求。MVC 使用MVC的优点 第一,控制器通过一个状态机跟踪处理面向操作的用户事件。第二,MVC将用户接口与面向对象的模型分开。最后,MVC允许应用的用户接口进行大的变化而不影响模型。Thanks for your attention!