Java应用基础课件_第1页
Java应用基础课件_第2页
Java应用基础课件_第3页
Java应用基础课件_第4页
Java应用基础课件_第5页
已阅读5页,还剩262页未读 继续免费阅读

下载本文档

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

文档简介

Java运行环境2.1构建Java运行环境1.在Windows平台上安装JDK推荐安装JDK的最低系统配置是IntelPentium处理器、至少32MB内存以及至少50MB的剩余硬盘空间。2.1构建Java运行环境

登录Sun公司的网站来下载Windows版的JDK,本书中使用的是JDK1.4版本,安装程序名为j2sdk-1_4_1-win.exe,表示这是Java2标准版的开发工具包。这个安装程序是一个自解压的程序,运行该程序即可以把JDK解压缩并安装到硬盘上。根据WINDOWS版本,进行环境配置.2.1构建Java运行环境(1)WINDOWS9X系统直接编辑系统的autoexec.bat文件,修改其PATH条目,PATHC:\WINDOWS;C:\WINDOWS\COMMAND;C:\JAVA\BIN在autoexec.bat文件内放置一个SET命令.如果把JDK安装到了C盘的根目录:SETHOME=C:\2.1构建Java运行环境(2)在WINDOWSNT/2000系统上配置

2.1构建Java运行环境2.Java开发环境集成开发环境(IDE)常用的集成开发环境主要有

JavaWorkShop、SymantecCafé、BorlandJbuilderEnterpriseEdition、OracleJdeveloper、SybasePowerJ、IBMVisualAgeforJava等等。2.1构建Java运行环境(2)代码编辑工具(a)记事本2.1构建Java运行环境(b)UltraEdit2.2构建Servlet/JSP运行环境1.Tomcat简介

Sun公司推荐Tomcat来作为Servlet和JSP容器,Tomcat的最新版本中实现了Servlet和JSP的最新规范

2.Tomcat的安装和配置

2.2构建Servlet/JSP运行环境Tomcat的安装界面2.2构建Servlet/JSP运行环境Tomcat的启动界面2.2构建Servlet/JSP运行环境Tomcat的运行界面2.3使用WeblogicServer1.Weblogic简介:WeblogicServer是BEA公司开发的Java应用服务器系统程序,用于组建多层次的、安全的、大型的和分布式的Web应用,如电子商务等等。

WeblogicServer提供了开发和利用服务器端业务逻辑的基本架构,支持分布式编程模型。

WeblogicServer实现的J2EE服务可以为企业级的分布式应用提供一个极佳的开发和运行环境。

2.3使用WeblogicServerWeblogic的安装界面2.3使用WeblogicServerWeblogic的安装向导2.3使用WeblogicServer设置Weblogic服务器的用户名和密码2.3使用WeblogicServerWeblogic的启动界面2.3使用WeblogicServerWeblogic的控制台

Java编程与实例3.1Java编程结构

1.程序设计的基本结构Java语言的源程序代码由一个或多个编译单元(compilationunit)组成,每个编译单元只能包含以下三部分的内容:包声明语句(packagestatement);包引入语句(importstatement);类声明语句(classdeclarations)或接口实现语句(interfaceimplementation)。3.1Java编程结构2.Java编程的语法规范Java源文件:每个java源文件仅包含一个公共类或接口。缩进:应该以4个空格为一个缩进单位。行长:一行不应多于80个字符。折行:在逗号后断开;在操作符之前断开;高层级断开优先于低层级断开;后面的行和前面的行左对齐等等。3.1Java编程结构注释:Java程序有两种注释,实现注释和文档注释。实现注释的定界符是/*...*/和//。文档注释是Java仅有的,定界符是/**...*/,用于产生javadoc。

标识符的命名规范:控制结构:间隔: 3.1Java编程结构3.Java关键字

Java关键字和保留字Java语言中的这些关键字和保留字都是大小写敏感的。

abstractconstfinalinstanceofprivateswitchvoidbooleancontinuefinallyintprotectedsynchronizedvoiatilebreakdefaultfloatinterfacepublicthiswhilebytedoforlongreturnthrowcasedoublegotonativeshortthrowscatchelseifnewstatictransientcharextendsimplementsnullstrictfptrueclassfalseimportpackagesupertry3.1Java编程结构4.Java数据类型

布尔类型布尔类型(boolean)只有两个值:

true和false

字符类型单个字符通常被表示为字符类型(char)Java语言使用16位无符号整数来表示一个字符,范围是0~65535。3.1Java编程结构特殊字符

换码序列名称Unicode值\b退格\u0008\tTab(制表)\u0009\n换行\u000a\r硬回车\u000d\”双引号\u0022\’单引号\u0027\\反斜杠\u005c3.1Java编程结构整数类型整数类型是指那些没有小数部分的数字,负数是不允许的。Java提供了四种整数类型Java整数类型表类型存储空间大小最小值最大值byte8bits-2727-1short16bits-215215-1int32bits-231231-1long64bits-263263-13.1Java编程结构浮点类型浮点类型是指那些含有小数部分的数字,共有两种浮点类型:float和double。浮点类型表

数据类型存储空间大小float32bitsdouble64bits3.1Java编程结构5.字符串

Java没有提供内建的字符串类型,标准Java库中包含了一个预定以类,称作String。每个用双引号封闭的字符串都是String类的一个实例。例如:Strings=”Thisisastring.”;Stringgreeting=”Hello!”;Stringe=””; //一个空字符串3.1Java编程结构6.变量的声明和初始化

每个变量在使用以前都需要声明它的数据类型并初始化该变量。

Java有两种类型的变量,一种是使用原始数据类型的变量,如int、float等,另一种是使用类类型的变量,如String。3.1Java编程结构

如果有多个类型相同的变量需要声明,还可以在同一行中进行多项声明。例如:inti,j,k; //i、j、k三者均为int类型声明了一个变量后,系统会自动给变量一个默认的初始值

变量的类型及初值

变量类型初值变量类型初值byte0short0int0long0Lfloat0.0fdouble0.0dchar‘\u0000’booleanfalseobjectreferencenull3.1Java编程结构

也可以根据程序的需要对变量进行明确的初始化,即给该变量赋一个初值。赋值是通过“=”实现的,“=”左边是需要初始化的变量,右边是Java表达式。例如:intanIntegerVariable; //声明一个int型变量anIntegerVariable=56; //初始化该变量charch; //声明一个char型变量ch=’C’; //初始化该变量Strings; //声明一个字符串变量s=”Thisisastring.”; //初始化该字符串变量3.1Java编程结构7.类型转换Java语言不支持变量类型之间的任意转换。允许的转换包括:

byte->short->int->long->float->double以及char->int。如果不进行强制类型转换,只能按照箭头的方向转换3.1Java编程结构8.数组数组是一种最简单的复合数据类型,特点是其中的元素都具有相同的数据类型,要创建和使用一个数组,必须包含三部分的内容,即:

声明、创建和初始化。声明一个数组要先确定数组元素的数据类型,并在后面加上数组名。例如:inta[]; //C语言风格,声明一个整数数组charch[]; //C语言风格,声明一个字符数组Point[]p; //Java语言风格,声明一个Point型数组double[]d;//Java语言风格,声明一个double型数组3.1Java编程结构创建一个数组要使用new关键字。a=newint[20]; //创建一个包含20个int型数据的数组ch=newch[50];//创建一个包含50个字符型数据的数组Java语言还提供了一种将数组的声明、创建和初始化同时完成的方法。例如:float[]diameters={1.1f,2.2f,3.3f,4.4f,5.5f};3.2表达式和流程控制1.表达式Java中的运算符(优先级由高到低排列)

分类运算符一元运算符++--+-!~()算术运算符*/%+-位移运算符<<>>>>>比较运算符<<=>>=instanceof==!=按位运算符&^|短路运算符&&||条件运算符?:赋值运算符=“op=”3.2表达式和流程控制2.流程控制条件语句条件语句包括if-else语句和switch语句。

if-else语句用于对单个条件的判定,可以嵌套使用;

switch语句用于多重选择,但是只能对char型和除long以外的整数类型进行测试。3.2表达式和流程控制循环语句循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止。Java语言提供了两种循环:不确定循环和确定循环。不确定循环就是不知道循环体要被重复执行多少次的情况下使用的一种循环语句。不确定循环有while循环和do-while循环。确定循环就是明确知道循环体应该重复执行的次数,并能够在程序中严格控制的一种循环语句。确定循环有for循环。3.3Java面向对象程序设计技术Java是一种完全面向对象的语言。面向对象程序设计有两大特点:抽象数据类型的概念和继承机制。使用面向对象技术进行程序开发的好处有两点:一是使用面向对象技术编写的类减少了编写整个程序和调试所需要的时间;另一点是编写好的代码可以在不同的环境下重用。3.3Java面向对象程序设计技术1.对象、类和方法

对象就是变量和相关的方法的集合,其中变量表明对象的状态;

方法表明对象所具有的行为。当多个对象具有一些共性时,可以将这些共性抽象出来,这就是类。3.3Java面向对象程序设计技术2.继承继承是面向对象程序设计的一个重要机制。

Java不支持多重继承。继承可以实现代码的复用,使程序的复杂度降低。在继承机制中还有两个比较特殊的类,即final类和abstract类。3.3Java面向对象程序设计技术3.方法的重载和重写

方法重载指的是在一个类中可以有多个具有相同名字的方法;方法重写指的是子类可以重新实现父类的某些方法。3.3Java面向对象程序设计技术方法重载和方法重写主要有以下四点不同:重载的方法互相补充;重写的方法往往会隐藏原方法。重载的方法可以在一个类中以任何数量存在;父类中的每一个方法只能在子类中被重写一次。重载的方法在参数列表上与原方法不同;重写的方法在参数类型和参数顺序上必须与原方法相同。重载的方法的返回类型可以自由选择;重写的方法的返回类型必须与原方法相同。3.3Java面向对象程序设计技术4.包封装

Java提供包来管理类名空间。包是对类和其他包的封装,它实际上提供了一种命名机制和可见性限制机制。

5.访问权限在Java中,对类的实例变量和实例方法都有访问权限的控制。3.3Java面向对象程序设计技术不同范围中的访问权限

同一个类中同一个包中不同包中的子类不同包中的非子类private√protected√√√public√√√√friendly√√3.3Java面向对象程序设计技术6.接口接口就是方法定义和常量值的集合。接口中的实例方法一般被定义为

public或abstract3.4例外处理1.例外处理的类层次

Java中例外类的最顶层是Throwable类,所有的异常事件都是它的后代。Java语言中的异常事件分为两大类:

Exception类和Error类。3.4例外处理2.例外处理的两种方法对于非运行时例外必须捕获或声明,而对运行时例外,可以交给Java运行时系统来处理。使用try-catch-finally语句捕获例外

使用throws子句声明例外

3.4例外处理3.定义自己的例外类

我们也可以用继承的方法定义自己的例外类。对于自定义的例外类,通常把它作为Exception类的子类3.5线程

程序中单个顺序的流控制称为线程。多线程就是在单个程序中可以同时运行多个不同的任务。1.线程的状态

一个线程有四种状态:准备状态(Ready)运行状态(Running)等待状态(Waiting)死亡状态(Dead)3.5线程2.线程体的构造构造线程体就是要构造满足线程功能要求的run()方法。run()方法的实现有两种方法继承Thread类构造线程体

实现Runnable接口构造线程体

两种创建线程体的方法核心内容都是要重写run()方法,不同点即run()方法的位置不同。3.6Java的输入/输出流

可从中读出一系列字节的对象称为“输入流”(InputStream);而能向其中写入一系列字节的对象则称为“输出流”(OutputStream)。3.6Java的输入/输出流1.输入/输出流的常用方法

输入流(1)intread()、intread(buye[])、intread(byte[],int,int)(2)voidclose()(3)intavailable()(4)skip(long)(5)mardSupported()、mark(int)、reset()3.6Java的输入/输出流输出流(1)write(int)、write(byte[])、write(byte[],int,int)

(2)close()(3)flush()3.6Java的输入/输出流2.输入/输出的类层次

InputStreamSequenceInputStreamPipedInputStreamByteArrayInputStreamFileInputStreamFilterInputStreamStringBufferInputStreamDataInputStreamPushbackInputStreamLineNumberInputStreamBufferedInputStream3.6Java的输入/输出流FileInputStream和FileOutputStream

BufferedInputStream和BufferedOutputStream

DataInputStream和DataOutputStream

PipedInputStream和PipedOutputStream

InputStreamReader和InputStreamWriter

BufferedReader和BufferedWriter

3.6Java的输入/输出流Reader的类层次ReaderBufferedReaderStringReaderInputStreamReaderCharArrayReaderPipedReaderFilterReader3.6Java的输入/输出流3.文件

文件对象的创建(1)FilemyFile;myFile=newFile(“myfile”);//当前目录下的

myfile文件(2)myFile=newFile(“/mydocs”,”myfile”);//mydocs目录下的

myfile文件(3)FilemyDir=newFile(“/mydocs”);myFile=newFile(myDir,”myFile”);//结果与第二种构造方法类似3.6Java的输入/输出流文件测试的一些方法

(1)文件名信息StringgetName():获取文件名StringgetPath():获取文件路径StringgetAbsolutePath():获取文件的绝对路径StringgetParent():获取由当前对象所表示文件的父目录booleanrenameTo(FilenewName):将当前对象更名为参数所制定的文件名3.6Java的输入/输出流(2)文件测试booleanexists():检测本文件是否存在booleancanWrite():判断是否可以向指定文件中写入数据booleancanRead():判断是否可以从指定文件中读取数据booleanisFile():检测本对象是否代表一个文件booleanisdirectory():检测本对象是否代表一个目录booleanisAbsolute():检测被对象是否代表一个绝对路径名3.6Java的输入/输出流(3)文件信息和实用工具longlastModified():检测当前File对象所对应的文件最后一次被修改的时间longlength():检测文件长度booleandelete():删除当前File对象所对应的文件3.6Java的输入/输出流(4)目录实用工具booleanmkdir():建立一个目录,其路径名由当前File对象指定String[]list():列出当前File对象所指定目录中的文件3.6Java的输入/输出流随机文件的存取

Java语言提供了一个RandomAccessFile类,来实现随机文件的存取。

JDBC技术应用4.1 JDBC的发展与应用1996年夏天,SUN公司发布了JDBC1.0工具包,它包含在JDK1.1中。1998年在SUN发布JAVA2时,JDBC2.0随着JDK1.2问世。

JDBC能够让Java应用与各种各样的数据库连接,JDBC和Java的结合使Java应用真正实现了“一次编写,处处运行”。4.2 JDBC设计方案JDBC包含两层:

第一层是JDBCAPI,这个API和JDBC驱动程序管理器API通信,向它发送各种不同的SQL语句;第二层即JDBC驱动器管理器API,这个管理器和各种不同的第三方驱动程序通信,由它们负责连接数据库,返回查询信息或执行查询语句指定的动作。4.2 JDBC设计方案JDBC和数据库的通信路径

JDBCDriverAPIJDBCAPIJava应用程序JDBC驱动程序管理器JDBC/ODBC桥供应商提供的JDBC驱动程序ODBC驱动程序数据库数据库4.2 JDBC设计方案JDBC驱动程序分成四类:第一类驱动程序是JDBC-ODBC桥第二类驱动程序由两部分组成,一部分是Java语言代码,另一部分是本地代码第三类驱动程序是一个纯Java客户库第四类驱动程序是一个纯Java库4.3 JDBC的典型应用在两层模型中,称为Client/Server结构数据库协议客户端JDBC数据库服务器4.3 JDBC的典型应用在三层模型中,分开了视觉图像(在客户端)、事务逻辑(在中间层)和源数据(在数据库中)客户端(可视的演示)中间层(商业逻辑)JDBC数据库服务器HTTP、RMI等数据协议4.4 JDBC的安装在一个开发平台上安装JDBC大致可以分成以下三个步骤:第一,在开发平台上安装JDK和JDBC第二,在开发平台上安装一个驱动程序第三,在开发平台上安装数据库管理系统

JDBC高级应用6.1程序操作预编译

我们想对查询执行1000次,用预编译语句处理,写成如下的形式:PreparedStatementprepStmt=con.prepareStatement("SELECTCOF_NAME,PRICEFROMCOFFEES");ResultSetrs;for(inti=0;i<1000;i++){rs=prepStmt.executeQuery(); }6.1程序操作预编译SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'Colombian';SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'French_Roast';SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'Espresso';我们可以为一类查询设计一个模板,形式如下:SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE?6.1程序操作预编译把上面的三条查询代码重新改写如下:PreparedStatementprepStmt= Con.prepareStatement("SELECTCOF_NAME,SUP_IDFROMCOFFEES"+ "WHERECOF_NAMELIKE?");prepStmt..setString(1,"Colombian");prepStmt..setString(1,"French_Roast");prepStmt..setString(1,"Espresso");ResultSetrs=prepStmt.executeQuery();6.1程序操作预编译如果LIKE子句有大量的值需要绑定,参数的值可以事先存储在一个数组中,通过I/O流机制实现数据的输入和输出。PreparedStatementprepStmt= Con.prepareStatement("SELECTCOF_NAME,SUP_IDFROMCOFFEES"+ "WHERECOF_NAMELIKE?");Stringcoffees[]={"Colombian","French_Roast","Espresso"};intlen=coffees.length;for(inti=0;i<len;i++){prepStmt..setString(1,coffees[i]); }ResultSetrs=prepStmt.executeQuery();6.2事务管理怎样在编程中实现对事务的管理呢?首先我们没有必要显示地启动一个事务,可以通过调用Connection.setAutoCommit(false)隐式地实现。然后调用Cmit()方法来提交一个事务,而且如果考虑到代码的安全性,还要包括一个回滚Connection.rollback()。例如下面的这段代码:6.2事务管理con.setAutoCommit(false);PreparedStatementupdateSales=con.prepareStatement("UPDATECOFFEESSETSALES=?WHERECOF_NAMELIKE?");updateSales.setInt(1,50);updateSales.setString(2,"Colombian");updateSales.executeUpdate();PreparedStatementupdateTotal=con.prepareStatement("UPDATECOFFEESSETTOTAL=TOTAL+?WHERECOF_NAMELIKE?");updateTotal.setInt(1,50);updateTotal.setString(2,"Colombian");updateTotal.executeUpdate();mit();con.setAutoCommit(true);6.3 存储过程创建一个存储过程createprocedureSHOW_SUPPLIERSasselectSUPPLIERS.SUP_NAME,COFFEES.COF_NAMEfromSUPPLIERS,COFFEESwhereSUPPLIERS.SUP_ID=COFFEES.SUP_IDorderbySUP_NAME6.3 存储过程将上面的SQL语言串保存在一个String变量中,以便后续使用。StringcreateProcedure="createprocedureSHOW_SUPPLIERS"+ "as"+ "selectSUPPLIERS.SUP_NAME,COFFEES.COF_NAME"+ "fromSUPPLIERS,COFFEES"+ "whereSUPPLIERS.SUP_ID=COFFEES.SUP_ID"+ "orderbySUP_NAME";6.3 存储过程创建一个Statement连接,并运行这个SQL语句串。Statementstmt=con.createStatement();stmt.executeUpdate(createProcedure);6.3 存储过程JDBC允许用户在应用程序中调用存储过程。首先需要创建一个CallableStatement对象。CallableStatement对象包含一个存储过程调用,而不是包含存储过程本身,存储过程调用要写在{}中,并用“”引起来。6.3 存储过程CallableStatementcs=con.prepareCall("{callSHOW_SUPPLIERS}");ResultSetrs=cs.executeQuery();6.3 存储过程程序执行得到的结果集可能如同下面的形式:SUP_NAME COF_NAME

Acme,Inc. ColombianAcme,Inc. Colombian_DecafSuperiorCoffee French_RoastSuperiorCoffee French_Roast_DecafTheHighGround Espresso6.3 存储过程上面的代码中执行cs的方法调用的是executeQuery()方法,这是因为cs调用的存储过程包含了一个查询语句而且只生成一个结果集。如果存储过程中包含的是更新语句或DDL语句,则需要用executeUpdate()方法来调用。

JavaServlet应用7.1JavaServlet的工作原理Servlet的工作过程可以分为以下几个阶段客户端向服务器发送请求;服务器将请求发送至Servlet;Servlet生成响应并将其传送给服务器;服务器将响应返回给客户端。7.1JavaServlet的工作原理Servlet工作流程图响应请求

服务器端

客户端

ServletInit()Service()Destroy()Session7.2常见的Servlet引擎Servlet引擎一般情况下是第三方的插件,它们由第三方制造商以他们专有的手段连接到Web服务器上。JSWDKJRunServletExecTomcat7.2常见的Servlet引擎Servlet引擎管理Servlets工作原理图请求响应Web服务器Servlet引擎ShoppingCartServletDatabaseQueryServletLiveNewswireServletWeb文档系统Web浏览器7.3Servlet的技术特点1、高效2、方便3、可移植4、安全7.4ServletAPI常用API概览Cookie:Cookie类提供了读取、创建和操纵HTTPCookie的便捷途径,允许Servlet在客户端存储少量数据。HttpServletHttpServlet是开发HTTPServlet框架的抽象类,其中的service()方法将请求分配给HTTP的protectedservice()方法。7.4ServletAPIHttpServletRequestHttpServletRequest通过扩展的ServletRequest类为servlet提供了附加的功能。HttpServletResponseHttpServletResponse扩展了ServletResponse类,允许操纵和HTTP协议相关的数据7.4ServletAPIHttpSessionHttpSession接口提供了对Web访问的认证机制HttpSessionBindingEventHttpSessionBindingListener监听对象绑定或断开绑定于会话时,HttpSessionBindingEvent被传递到HttpSessionBindingListener。7.4ServletAPIHttpSessionBindingListener

通过调用valueBound()和valueUnbound()来通知用于实现HttpSessionBindingListener的接口HttpSessionContextHttpSessionContext提供了访问服务器上所有活动Session的方法HttpUtils

这是一个容纳许多有用的基于HTTP方法的容器对象7.5Servlet的基本结构例如

importjava.io.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassAnyServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)

throwsServletException,IOException{.

PrintWriterout=response.getWriter();}

}7.6Servlet的编译和运行程序源代码如下。importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/html");PrintWriterout=response.getWriter();out.println("<html>");out.println("<body>");out.println("<head>"); out.println("<title>HelloServlet!</title>");out.println("</head>");out.println("<body>");out.println("<h1>HelloServlet!</h1>");out.println("</body>");out.println("</html>");}}7.6Servlet的编译和运行1.设置虚拟目录

虚拟目录应该是/tomcat/webapps下的子目录,例如给它命名myweb。在Tomcat的安装路径下有一个conf文件夹,打开其中的server.xml文件,在文件中添加一行<Contextpath=”/myweb”docBase=”myweb”debug=”0”reloadable=”ture”></Context>7.6Servlet的编译和运行Manager管理窗口

7.6Servlet的编译和运行2.JavaServlet程序的编译在这里,用户可以把一个已经编写好的HelloServlet源程序放到/tomcat/webapps/examples/WEB-INF/classes目录下,用JDK开发包对上述代码进行编译,但一定要进入.java文件的存储路径下。D:/tomcat/webapps/examples/WEB-INF/classesjavacHelloServlet.java注意:编译时可能会出现

HelloServlet.java:2:packagejavax.servletdoesnotexist

importjavax.servlet.*;

….

HelloServlet.java:3:packagejavax.servlet.httpdoesnotexist

importjavax.servlet.http.*;7.6Servlet的编译和运行3.运行编译好的Servlet程序

在浏览器中敲入http://localhost:8080/examples/servlet/HelloServlet就可以对已经编译好的servlet程序运行查看了。7.6Servlet的编译和运行程序运行结果7.7Servlet打包1.创建打包环境

创建分为两个步骤:(1)将类文件存储到与要使用的包(Package)名称相同的路径下。(2)在类文件中引入包。7.7Servlet打包源代码程序如下:packageServletcore;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServlet2extendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("text/html");PrintWriterout=response.getWriter();StringdocType="<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+"Transitional//EN\">\n";out.println(docType+"<HTML>\n"+"<HEAD><TITLE>HelloServlet2</TITLE></HEAD>\n"+"<BODY>\n"+"<H1>HelloServlet2</H1>\n"+"</BODY></HTML>");}}7.7Servlet打包2.编译包中的Servlet

在Windows操作系统中,我们可以按以下方式编译Servlet:DOS>setclasspath=D:/tomcat/webapps/examples/WEB-INF/classes;%calsspath%DOS>cdD:/tomcat/webapps/examples/WEB-INF/classes/ServletcoreDOS>javacHelloServlet2.java7.7Servlet打包还可以设置永久性的calsspath,calsspath设置好后直接编译。DOS>cdD:/tomcat/webapps/examples/WEB-INF/classes/ServletcoreDOS>javacHelloServlet2.java7.7Servlet打包在Windows9X中,找到autoexec.bat文件,将setclasspath=D:/tomcat/webapps/examples/WEB-INF/classes;%calsspath%语句放到设置classpath指向的servlet.jar和JSP的jar文件中。在Windows2000/NT中,打开开始/设置/控制面板或我的电脑/控制面板,打开控制面板中的系统中的“高级”选项卡,在环境变量中输入变量名和变量值。在Unix系统中,找到.cshrc文件,在文件中添加一行:

setenvclasspath/install_dir/servlets;$classpath。7.7Servlet打包3.调用包中的Servlet

调用包中的Servlet,可以在浏览器中敲入以下URL:http://localhost:8080/examples/servlet/packagename.servletname这里的例子就是http://localhost:8080/examples/servlet/Servletcore.HelloServlet27.7Servlet打包调用包中的Servlet的查看结果

JavaServlet常规应用8.1JavaServlet输出1.输出纯文本方式的Servlet

以纯文本方式输出一行字符。(源程序HelloServlet.java)importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();out.println("WelcometoServlet");//输出字符串

}}8.1JavaServlet输出输出纯文本的HelloServlet

8.1JavaServlet输出2.输出HTML网页方式的Servlet

以网页HTML方式输出一行字符。(源程序HelloHTML.java)importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloHTMLextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("text/html");//①

PrintWriterout=response.getWriter();

out.println("<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+"Transitional//EN\">\n"+"<HTML>\n"+"<HEAD><TITLE>HelloHTML</TITLE></HEAD>\n"+"<BODY>\n"+"<H1>ThesecondServlet:HelloHTML!</H1>\n"+"</BODY></HTML>");//②}}8.1JavaServlet输出生成HTML的Servlet

8.2Servlet的生命周期1.加载并实例化

Servlet引擎

ServletServlet引擎请求响应客户端Web服务器8.2Servlet的生命周期2.初始化形式是:publicvoidinit(ServletConfigConfig)throwsServletException{super.init(config);//Initializationcode}

8.2Servlet的生命周期3.执行Servlet

形式如下:publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

}8.2Servlet的生命周期SingleThreadModel接口的形式为:PublicclassThreadModelextendsHttpServletimplementsSingleThreadModel{}8.2Servlet的生命周期4.卸载Servlet

形式为:publicvoiddestroy(){……}8.2Servlet的生命周期生命周期示意图

8.3处理表单数据/baidu?word=servlet&tn=baiduos&cl=3&ct=0&f=5&lm=0”。这个URL中位于问号后面的部分,即“word=servlet&tn=baiduos&cl=3&ct=0&f=5&lm=0”,就是表单数据。

8.3处理表单数据

表单数据的读取有两种方法:

post方法和get方法。当使用post方法时,数据由标准的输入设备读入,当使用get方法时,数据由CGI变量QUERY_STRING传递给表单数据处理程序。8.3处理表单数据1.读取Web有限个参数

html前端通过

<FORMACTION=“servlet/Parameter”>语句和服务器端的Servlet发生联系。注意:.html文件要保存在根目录下,Servlet文件保存在classes目录中。8.3处理表单数据Parameter.html前端

8.3处理表单数据ParameterServlet的输出8.3处理表单数据2.中文问题

Java语言默认的编码方式是unicode,而中国人通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的,且中文字符集不只一个,不同的操作系统对中文字符的支持也不尽相同,所以会有许多和汉字编码处理有关的问题在我们进行应用开发中困扰着我们。8.3处理表单数据3.处理多值参数

利用javaxServlet不仅能获取一个Web参数,每个参数只能有一个值。本节中给出的例子更具有通用性,可以处理多值参数,而且处理参数的值可以为空或为多个值。8.4客户端请求常用的请求头getHeader:读取传入头getCookies:返回Cookie头的内容getAuthType和getRemoteUser:用于将Authorization头拆分为不同的组件。getContentLength:返回Content-Length头的值getContentType:返回Content-Type头的值getDateHeader和getIntHeader:读取指定的头8.4客户端请求getHeaderNames:取得请求中接收到的所有头的名称getHeaders:返回头首次出现的值,或返回包含头出现时的所有值getMethod:返回请求的方法getRequestURI:返回URL中主机和端口之后、表单数据之前的部分getProtocol:返回请求行的第三部分8.4客户端请求实现客户端程序向服务器发送请求。(源程序RequestHeader.java)importjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassRequestHeaderextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/html");PrintWriterout=response.getWriter();

Enumeratione=request.getHeaderNames();while(e.hasMoreElements()){Stringname=(String)e.nextElement();Stringvalue=request.getHeader(name);out.println(name+"="+value);}}}8.4客户端请求读取HTTP请求头8.5访问标准的CGI变量CGI变量和Servlet的等价映射方式

AUTH_TYPE:如果在请求中指定了Authorization头,则这个变量将会被赋值(basic或digest)。CONTENT_LENGTH:表示传送的数据的字节数。Servlet的等价方式是String.valueOf(request.getContentLength())返回一个字符串(String)或request.getContentLength(),返回一个整数(int)。CONTENT_TYPE:表示指定附件数据的MIME类型。DOCUMENT_ROOT:和网站根目录对应的实际路径getServletContext().getRealPath("/")可用于访问该变量。在以前的Servlet标准中:request.getRealPath("/")。HTTP_XXX_YYY:访问任意HTTP请求头的方式PATH_INFO:改变量提供了在URL中Servlet地址之后、查询数据之前的所有路径信息。PATH_TRANSLATED:在服务器上被映射为web目录的目录的真实路径的信息。可以使用request.getPathTranslated()访问该变量。QUERY_STRING:如果用GET方法发出请求(requests),这个变量中将会存放请求的数据,其形式为经过URL编码的一个字符串。在servlet中,用request.getParameter方法来访问某个特定的请求数据。如果希望得到原始数据,可以使用request.getQueryString()方法。REMOTE_ADDR:客户端的IP地址,是String类型的。其形式类似于"33"。可以使用request.getRemoteAddr()方法访问该变量。REMOTE_HOST:指定了执行请求的客户端的域名(例如."")。可以使用request.getRemoteHost()方法访问该变量。REMOTE_USER:如果服务器提供了Authorization头并已经进行了解码,则该变量将会提供用户名,用于受保护站点的会话跟踪。使用request.getRemoteUser()方法可以访问改变量REQUEST_METHOD:指定请求的类型。通常为GET或POST,但也可能是HEAD,PUT,DELETE,OPTIONS,或者TRACE。使用request.getMethod()方法可以访问该变量。SCRIPT_NAME:Servlet相对于服务器的根目录路径,可以通过request.getServletPath()方法访问改变量。SERVER_NAME:服务器的名称,通过request.getServerName()方法访问。SERVER_PORT:服务器的端口,可以使用String.valueOf(request.getServerPort())方法,返回String类型或request.getServerPort()方法,返回int类型进行访问。SERVER_PROTOCOL:指定了请求命令行中用的协议的版本号,可以通过request.getProtocol()方法访问改变量。SERVER_SOFTWARE:有关Web服务器的识别信息,可以通过getServletContext().getServerInfo()访问改变量。8.6服务器端响应1.HTTP状态码Web服务器端响应浏览器或客户端请求时,其应答由一个状态行,几个应答头,一个空行,内容文档组成,形式如下所示:HTTP/1.1200OKContent-Type:text/plainHelloServlet8.6服务器端响应设置状态码的方法是使用HttpServletResponse的setStatus方法有两种特殊情况可以使用快捷方法设置状态码:a.使用sendError发送状态码404并在HTML文档中自动设置格式发送到客户端,形式为:publicvoidsendError(intcode,Stringmessage)b.使用sendRedirect发送状态码302并提供新文档的URL的Location头,形式为:publicvoidsendRedirect(Stringurl),注意在Servlet2.1版本中必须使用绝对URL。8.6服务器端响应2.服务器端HTTP响应头

设置HTTP响应头通常与设置状态码同时进行,通过设置响应头可以完成很多复杂的任务,如指定Cookie,定期刷新页面,生成Excel、gif等特定的文档类型。设置响应头设置响应头最常用的方式是使用HttpServletResponse的setHeader方法,该方法包含两个参数,头的名称和值。和设置状态码一样要在返回任何文档内容到客户端之前设置响应头。8.7处理网络Cookies1.网络Cookie的意义

Cookies能帮助站点统计用户个人资料以实现各种各样的个性化服务。跟踪定向,如购物车程序,通过设置“Cookies”用户可以完成选中某商品,将该商品添加到购物车,接着继续购物的全过程。还可以使站点跟踪指定用户的访问次数,最后访问时间等用户信息。通过用户设置,可以实现在用户设定的时间期限内不键入密码和用户名,而进入指定的网站。Cookies能够通知在线广告商被点击的次数,从而帮助广告商更精确的投放广告。8.7处理网络Cookies2.CookieAPI创建Cookie

通过调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:

Cookie名字和Cookie的属性值。Cookie属性将Cookie添加到应答头之前,可以通过setXxx方法设置Cookie的属性,并有相应的getXxx方法检索属性值。8.7处理网络Cookies在响应头中放置Cookie

在Set-Cookie响应头中设置Cookie可以通过HttpServletResponse的addCookie方法从客户端读取Cookie

从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法8.7处理网络Cookies3.有关Cookie的工具函数

获取给定名字的Cookie值getCookieValue通过循环依次访问Cookie对象数组,寻找是否有与给定名字同名的Cookie,如找到,则返回该Cookie的值;否则,返回参数中指定的值。PublicstaticStringgetCookieValue(Cookie[]cookies,StringcookieName,StringdefaultValue){

for(inti=0;i<cookies.length;i++={

Cookiecookie=cookies[i];

if(cookieName.equals(cookie.getName()))

return(cookie.getValue());

}

return(defaultValue);}8.7处理网络Cookies自动保存的Cookie以下这段代码可以使Cookie在浏览器关闭时完成自动保存的功能。publicclassLongLivedCookieextendsCookie{

publicstaticfinalintSECONDS_PER_YEAR=60*60*24*365;

publicLongLivedCookie(Stringname,Stringvalue){

super(name,value);

setMaxAge(SECONDS_PER_YEAR);

}}8.7处理网络Cookies4.获取客户端请求信息网络服务器,要对网络客户端的请求做出响应,首先应获得请求信息。

JSP应用基础

10.1JSP技术特点1.JSP和ASP的比较

ASP是与IIS捆绑在一起的,依赖于COM组件,所以它不具跨平台性;

JSP默认的脚本语言是Java,并使用JavaBean组件,这就保证了JSP的平台无关性。

JSP只需编译一次,

ASP每次请求都要求解释,影响了服务器的效率

10.1JSP技术特点2.JSP和CGI的比较

JSP在每次向服务器发出请求时,服务器只需启动一个线程,这样大大的节省了开销

CGI程序本身不能实现跨平台运行。而且在传统的CGI环境中,每次客户端向服务器端发出请求,都会使服务器产生一个新的进程来装载和运行CGI程序,如果客户端同一时间提出多个请求或有多个客户端同时提出请求,会严重影响服务器的性能。10.1

温馨提示

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

最新文档

评论

0/150

提交评论