J2ME软件开发2移动通信复习.ppt

上传人:xin****828 文档编号:6232665 上传时间:2020-02-20 格式:PPT 页数:138 大小:1.59MB
返回 下载 相关 举报
J2ME软件开发2移动通信复习.ppt_第1页
第1页 / 共138页
J2ME软件开发2移动通信复习.ppt_第2页
第2页 / 共138页
J2ME软件开发2移动通信复习.ppt_第3页
第3页 / 共138页
点击查看更多>>
资源描述
J2ME网络应用软件开发 J2ME网络应用软件开发实践 背景随着3G和GPRS无线网络的推进 高速传送大量数据 视频信号和高质量的音频信号在无线网络成为可能 无线移动设备从语音服务 增值服务发展到数据服务 J2ME网络应用软件开发实践 Java语言非常适合无线设备编程的特点 支持广泛的网络协议 安全性好 平台交叉兼容 纯面向对象开发过程 J2ME网络应用软件开发实践 移动电子商务平台移动电子商务 MobileCommerce M Commerce 是电子商务在移动网络中的应用 但是M Commerce提供了比E Commerce更灵活 更方便 更及时的信息服务结合J2ME和J2EE技术 用户可以建立一个完整的移动电子商务平台 J2ME网络应用软件开发实践 J2ME结合GPRS和3G网络 具有较高的数据传送能力 在基于J2ME J2EE技术的电子商务中 数据的传输需要经过无线网络和有线网络 在通信过程中 移动设备段发送数据到无线基站 无线基站将接收到的数据发送到GPRS 3G网络中 通过GPRS 3G网络可以很方便地接入到Internet中 在Internet上数据被发送到企业网络进行会话 网络结构示意图如下 J2ME网络应用软件开发实践 移动电子商务平台架构 J2ME网络应用软件开发实践 在建立电子商务平台时 由于移动终端资源有限 不可能直接对后台数据库进行访问 因此要想使移动设备终端能够访问到数据库系统 必须使用J2EE技术 一个移动电子商务系统必须建立移动终端程序 使用J2ME技术 和服务器端应用程序 使用J2EE技术 基于J2ME J2EE的移动电子商务系统的架构如图所示 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 在J2ME客户端 移动设备通过HTTP协议或XML连接到WebServer上 WebServer使用Servlet容器来处理客户端的连接和请求 并将请求发给过企业级服务器 由企业级服务器访问数据库并处理请求 处理结果通过WebServer发回客户端 J2ME网络应用软件开发实践 高级用户界面MIDP用户界面的核心是屏幕 在移动信息设备中有且仅有一个屏幕是可见的 用户只能在这个屏幕中的各个组件之间进行切换高级用户界面组件全部定义在javax microedition lcdui包中 包括高级屏幕对象和表单item组件两大类 其中的高级屏幕对象分成以下两大类 1 封装了复杂的用户界面组件的对象 例如List Alert 和TextBox等 这些屏幕类的结构是预先定义好的 开发者不能在这些屏幕对象上添加其他组件2 通用的屏幕对象 例如Form 开发者可以在这个屏幕对象上添加 删除 修改和组合各种Item组件 例如StringItem TextField Gauge等 J2ME网络应用软件开发实践 Display类和Displayable类移动设备的屏幕被称为显示设备 应用程序是通过获取MIDlet程序的Display类的实例的引用来与显示设备进行交互的 J2ME网络应用软件开发实践 在使用Display类提供的功能以前 必须首先创建一个Display类的实例 创建该实例的时候 只能用Display类中的静态方法getDisplay 来进行创建 该方法的声明如下 PublicstaticDisplaygetDisplay MIDletm J2ME网络应用软件开发实践 使用该方法可以返回一个对应MIDlet类对象m的Display实例 例如在MyMIDlet类中创建一个Display实例 则可以使用如下的代码 PrivateDisplaydisplay PublicMyMIDlet display Display getDisplay this 因为以上代码定义在MYMIDlet类的内部 因此this关键字就代表MyMIDlet类本身获得Display类的实例后 就可以调用Display类中的各种方法进行显示设备的管理 J2ME网络应用软件开发实践 高级屏幕对象 Form表单Form类不同于其他的屏幕类仅仅实现单一的交互功能 它是作为一个容器 可以容纳Item类的子类的屏幕对象Form类有两个构造函数 publicForm Stringtitle publicForm Stgringtitle Item items 其中参数title设置Form表单的标题 参数items是创建Form时包含的Item组件 J2ME网络应用软件开发实践 第一个构造函数用来创建空表单 可以使用以下方法进行插入 追加和删除操作来编辑表单中的Item组件对象 append Itemitem delete intitemNum insert intitemNum Itemitem set intitemNum Itemitem J2ME网络应用软件开发实践 高级事件处理Command软键Command对象代表了一个命令按钮 其功能类似于Windows系统中的Button按钮 它必须被添加到一个Displayable屏幕对象上 当这个屏幕对象被显示时 所有与之关联的Command软键都会显示在手机屏幕下方的左右两侧 用户就可以通过手机键盘进行选择了 J2ME网络应用软件开发实践 Command的构造函数定义如下 publicCommand Stringlabel intcommandType intpriority 其中参数label表示命令标签 也就是显示在屏幕上的命令的名字 参数commandType表示命令类型 参数priority表示命令优先级练习 编写MIDlet程序 创建两个Command软件Exit和OK 程序运行结果如下 J2ME网络应用软件开发实践 运行效果 J2ME网络应用软件开发实践 CommandListener软键事件在Command软件创建并被添加到屏幕对象上之后 还需要为屏幕对象添加Command软键的监听器CommandListener J2ME采用授权事件模型 该模型包括 事件源和监听器 其中Command软件对象就是事件源 实现CommandListener接口的事件处理类就是监听器当把监听器添加到屏幕对象上以后 监听器就能够捕获该屏幕对象上所有的Command对象所触发的事件 当用户按下Command软键时 将调用监听器中的事件处理方法里的代码 J2ME网络应用软件开发实践 在CommandListener接口中定义了一个事件处理方法commandAction 其具体语法定义如下 publicvoidcommandAction Commandcommand Displayabledisplayable 其中参数command表示当前触发事件的Command软键对象 参数displayable表示当前显示的屏幕对象为了把监听器添加到屏幕对象上 Displayable类的子类中提供了setCommandListener 方法用来进行监听器的注册 J2ME网络应用软件开发实践 如果在MIDlet本类中实现了CommandListener接口 那么可以使用setCommandListener This 如果参数设置为Null 则可以删除当前的监听器练习 为MIDlet增加Command软键事件处理 J2ME网络应用软件开发实践 高级屏幕对象 Alert消息框Alert的作用类似于Windows系统中的消息框 用于向用户提示一些警告信息 错误信息和确认信息 在利用Display类的setCurrent 方法将它设置为当前显示的屏幕时 程序中必须存在另外一个屏幕 这样才能让Alert消息框有返回的屏幕 因此Alert不能被设置为第一个显示的屏幕 J2ME网络应用软件开发实践 模式消息框一直停留在屏幕上 直到用户通过单击软键将它关闭为止 然后它将返回之前显示的屏幕定时消息框只是在屏幕上显示一段时间 然后自动消失Alert消息框由两个构造函数 PublicAlert Stringtitle PublicAlert Stringtitle StringalertText ImagealertImage AlertTypealertType J2ME网络应用软件开发实践 在构造函数中没有指定超时时间 将采用默认的超时时间 可以在创建Alert实例之后使用setTimeout 方法来修改消息对话框的超时时间 例如下列代码创建了一个超时时间为3秒的定时消息对话框 Alertalert newAlert FirstAlert alert setTimeouot 3000 setTimeout 的参数以毫秒为单位下面的代码创建了一个警告类型的消息对话框 Alertalert newAlert AlertTest AlarmAlert null AlertType CONFIRMATION 练习 在MIDlet程序中创建Alert消息框 J2ME网络应用软件开发实践 运行结果 J2ME网络应用软件开发实践 高级屏幕对象 List列表List是显示一组选项的屏幕 用户可以在这些选项中选择一个或多个选项 List列表有三种形式 单选列表 复选列表和隐式列表 在List列表中用户可以通过在选项之间移动来与列表进行交互 这种交互只有在列表选项被选择之后才发生 J2ME网络应用软件开发实践 List列表有两个构造函数 PublicList Stringtitle intlistType PublicList Stringtitle intlistType String stringElements Image imageElements 第一个构造函数用来创建一个空的列表 其中参数Title表示列表的标题 listType表示列表的类型 J2ME网络应用软件开发实践 第二个构造函数除了指定标题和类型外 还能通过数组的形式指定选项的文字和图片列表的3种类型对应Choice接口中的常量值 Choice EXCLUSIVE 单选列表 一次只能选择一个选项Choice MULTIPLE 复选列表 一次可以选择多个选项Choice IMPLICIT 隐式列表 与单选列表类似 只是选项前面没有选择框标记 并且用户的选择和确认可以使同时进行的 J2ME网络应用软件开发实践 创建空的列表之后 就可以在列表中插入 追加和替换选项 列表中的每个选项都由一个整数索引来表示它在列表中的位置 注意 第一个选项的索引为0List类提供了以下方法来对选项进行插入 追加和替换 J2ME网络应用软件开发实践 publicintappend Stringstr Imageimage publicvoidinsert intelementNum Stringstr Imageimage publicvoidset intelementNum Stringstr Imageimage J2ME网络应用软件开发实践 使用如下方法可以从列表中根据索引删除选项或删除所有选项 publicvoiddelete intindex publicvoiddeleteAll 使用如下方法可以根据索引获得对应选项的字符串或图像 publicStringgetString intindex publicImagegetImage intindex J2ME网络应用软件开发实践 使用如下方法可以选取 取消选取或者获得列表当前选中项的索引 publicvoidsetSelectedIndex intelementNum Booleanselected publicintgetSelectedIndex 使用如下方法可以可以获取或者设置列表所有复选项的选取情况 publicintgetSelectedFlags Boolean selectedArray publicvoidsetSelectedFlags Boolean returnselectedArray J2ME网络应用软件开发实践 练习 信息调查系统 J2ME网络应用软件开发实践 高级屏幕对象 Ticker滚动条Ticker类用来实现一个滚动条 显示一个连续滚过屏幕的字符串 滚动的字符串可以通过程序设置 但是滚动的方向和速度不能通过程序设定 也不能在程序中控制滚动的开始和结束 这些都是由MIDP实现决定的 Ticker滚动条可以被放置在任何Screen类的屏幕上 而且一个Ticker实例可以在多个屏幕之间共享 当屏幕切换时 信息的显示是连续的 J2ME网络应用软件开发实践 Ticker类的构造函数定义如下 publicTicker Stringstr 其中参数str是在滚动条中显示的文字使用如下方法可以设置和获取滚动条中的字符串PublicvoidsetString Stringstr PublicStringgetString 创建滚动条之后 可以使用Screen类的setTicker 方法把滚动条添加到屏幕上 如果把setTicker 方法的参数设置为null 则删除当前的滚动条 J2ME网络应用软件开发实践 练习 股票基金显示系统 J2ME网络应用软件开发实践 高级屏幕对象 TextFiledTextField是一个可编辑的文本组件 其创建和使用方法与TextBox类似TextField的构造函数定义如下 publicTextField Stringlabel Stringtext intmaxSize intconstraints 其中参数label和text分别表示标题和内容 参数maxSize表示最大能接受的字符个数 参数constraints表示输入约束 约束的定义与TextBox中的约束定义是共享的 J2ME网络应用软件开发实践 使用如下方法可以设置或者获取TextBox当前设置的约束 publicvoidsetMaxSize intmaxSize publicintgetMaxSize 使用如下方法可以设置或者获取TextField的全部内容 publicvoidsetString Stringtext publicStringgetString J2ME网络应用软件开发实践 另外还有一些方法可以对TextField中的文字进行插入 删除和替换操作 Publicvoidinsert Stringsrc intposition Publicvoidinsert char data intoffset intlength intposition Publicvoiddelete intoffset intlength PublicvoidsetChars char data intoffset intlength J2ME网络应用软件开发实践 练习 个人信息管理系统 J2ME网络应用软件开发实践 通用连接框架 GCF 通用连接框架为J2ME程序提供所有网络通信的基础 通用连接框架位于javax microedition io包中 包含1个类 1个异常和15个接口由于网络传送需要输入和输出 所以在实际编程中还要导入java io包 J2ME网络应用软件开发实践 通用连接框架的API通用连接框架的核心是Connector类 Connector类用于在GCF中打开不同类型的连接 Connector类的静态方法open 接收一个String类型参数 这个参数标志了请求的连接类型和连接端点 原型如下 Connector open protocol address parameters J2ME网络应用软件开发实践 GCF支持不同的连接协议 例如连接不同的类型 Connector open socket 地址 端口 Connector open http Connector open datagrame 地址 端口 J2ME网络应用软件开发实践 打开连接读取数据的示例代码如下 Stringurl ContentConnectionconnection ContentConnection Connector open url InputStreamistm connection openInputStream Intlen int connection getLength If len 1 byte data newbyte len istm read data J2ME网络应用软件开发实践 建立HTTP连接HTTP连接的创建可以调用Connector类的open 方法 此方法创建并返回打开的连接 在建立连接时 可以使用HttpConnection接口的如下方法来设置请求的方式publicvoidsetRequestMethod Stringmethod 设置请求方式为POST GET HEAD等 默认情况下为GET J2ME网络应用软件开发实践 在建立连接之后 可以使用HttpConnection接口如下操作方法 打开一个输入流 读取服务器中的数据 InputStreamopenInputStream Stringurl 与之对应 可以使用如下操作方法 打开一个输出流 向服务器输出数据 OutputStreamopenOutputStream Stringurl J2ME网络应用软件开发实践 在连接到服务器后 可以通过getResponseCode 方法返回服务器的相应代码 如200 404等 J2ME网络应用软件开发实践 基于HTTP协议的网络软件开发过程1 设置需要的URLURL的格式应该是 scheme target parms 其中 scheme 表示协议的格式 target 表示网络的地址 parms 表示相关的参数 J2ME网络应用软件开发实践 例如 可以定义URL如下 Stringurl http 127 0 0 1 8080 test html 在这个URL中 首先指明了所使用的网络协议是Http协议 接着表示网络地址是127 0 0 1 所要获得的html文件在服务器根目录下 这是一个缺省目录 所以在服务器的地址后直接加上文件名即可 J2ME网络应用软件开发实践 2 根据URL获得网络连接通过Connector类的open方法可以获得网络连接 代码如下 hc HttpConnection Connector open url 所有获得网络连接的方式都是通过Connector类的静态方法open 来获得的 J2ME网络应用软件开发实践 3 成功获得网络连接后 就可以准备读取服务器上的html文件了 不过 获得网络连接并不意味着万事大吉 因为此时还不知道网络连接的状态如何 用户可以通过HttpConnection接口的getResponseCode 方法来获取代表网络连接的状态代码 这些代码都是在HttpConnection接口中定义的静态成员变量 J2ME网络应用软件开发实践 代表成功的HTTP OK的代码是200 而代表服务器上没有与URL匹配的文件的HTTP NOT FOUND的代码则是404 4 确定网络连接的要求成功之后 可以用下面的代码读取服务器上的html文件 J2ME网络应用软件开发实践 is hc openInputStream intch While ch is read 1 buffer append char ch result buffer toString result newString result getBytes iso 8859 1 gb2312 tb setString result J2ME网络应用软件开发实践 首先 需要通过HttpConnection对象的openInputStream 方法的到一个InputStream对象 取得后 可以通过InputStream对象的read 方法获得数据 Read 方法一次可以从InputStream对象中读取一个int类型数据 当读到数据末尾的时候 就会返回 1 可以利用这一性质 循环读取数据 当读到 1时 即表示数据读取完毕 在循环过程中 需要把读取出来的数据强制转化为char类型后再添加到字符串的末尾 J2ME网络应用软件开发实践 循环读取之后 可以利用StringBuffer对象的toString 得到包含html文件内容的String对象 不过如果直接显示在TextBox对象上 中文会显示为乱码 这是由于编码方式不一致所造成的 所以在显示之前先要进行转码工作 先利用String类的getBytes 方法传入 iso 8859 1 作为参数 得到依据iso 8859 1编码方式的字符串的byte类型数组 接着在String类的构造其中 以得到的byte类型数组作为第一个参数 接着以 gb2312 作为第二个参数 这意味着String类会将byte类型数组中的数据以gb2312编码方式构造字符串 这样就解决了乱码的问题 J2ME网络应用软件开发实践 5 在程序的最后 要关闭InputStream对象和HttpConnection对象 为了在发生异常情况下也能关闭 选择在finally语句中关闭InputStream对象和HttpConnection对象 注 进行联网时 应该把联网的代码放在线程中运行 J2ME网络应用软件开发实践 创建线程方式1实现Runnable接口 代码实例如下 J2ME网络应用软件开发实践 publicclassTestThread1 publicstaticvoidmain Stringargs Runner1r newRunner Threadt newThread r t start classRunnerimplementsRunnable publicvoidrun for inti 0 i 30 i System out println NO i J2ME网络应用软件开发实践 程序运行结果是输出字符串 No 0 到 No 29 程序中创建Thread对象并调用其start方法的过程就是一个新线程的创建和启动的过程 其一般步骤为 1 定义一个类实现Runnable接口 重写其中的run 方法 加入所需的处理逻辑 2 创建Runnable接口实现类的对象 J2ME网络应用软件开发实践 3 创建Thread类的对象 将前面Runnable接口实现类的对象作为参数 4 调用Thread对象的start 方法 启动线程在程序TestThread1 java中 实际上存在两个线程 应用程序的main 方法由java虚拟机启动 这本身就是一个线程 也称为主线程 线程t是在主线程中被创建的 也称为子线程 而主线程则为子线程的父线程 J2ME网络应用软件开发实践 Java中引入线程机制的目的在于实现多线程 以提高程序的效能 这主要是通过多线程之间共享代码和数据实现的 J2ME网络应用软件开发实践 创建线程的第二种方式在前面的例子中 通过定义Runnable接口的实现类 重写其中的run 方法来提供线程体 这是创建线程的基本方式 除此之外 还可以采用直接继承Thread类 重写其run 方法并以之作为线程体的方式创建线程 代码实例如下 J2ME网络应用软件开发实践 publicclassTestThread2 publicstaticvoidmain Stringargs Threadt newRunner2 t start classRunner2extendsThread publicvoidrun for inti 0 i 30 i System out println NO i J2ME网络应用软件开发实践 该程序与前面的代码实例运行结果相同 可以看出 第二种方式创建线程的一般步骤为 1 定义一个类继承Thread类 重写其中的run 方法 加入所需的处理逻辑 2 创建该Thread子类的对象 3 调用该对象的start 方法 启动线程 J2ME网络应用软件开发实践 Servlet与Servlet容器通过浏览器上网的过程 实际上是浏览器通过HTTP协议和Web服务器进行交互的过程 网络资源存在于服务器端 客户端发出请求 服务器端对请求作出响应 将用户请求的资源发送到客户端 现在用户所访问的网络资源不仅仅局限于服务器硬盘上的静态网页 更多的应用需要根据用户的请求动态生成页面信息 比如可能需要查询数据库 根据一定的规则进行统计计算 生成报表页面发往请求者的浏览器端 这样的增强功能 就需要服务器端的软件实现了 J2ME网络应用软件开发实践 要实现上述功能 可以想象有以下方法 方法一 遵循HTTP协议实现一个服务器端软件 这种方法较为复杂 且不能适应应用的广泛性 方法二 已经实现HTTP协议的Web服务器端软件预先为我们留出扩展接口 我们只需按一定的规则去提供相应的扩展功能 这种方式的好处是我们不需要对HTTP有过多的了解 HTTP协议的实现由Web服务器完成 我们只需根据应用开发相应模块 在用户看来 Web服务器端就是一个整体 在为他提供服务 J2ME网络应用软件开发实践 Java提供了编写扩展功能的技术 Servelet J2ME网络应用软件开发实践 Java提供了编写扩展功能的技术 Servelet服务器接受客户请求并作出响应的过程 J2ME网络应用软件开发实践 客户端 通常是浏览器 访问Web服务器 发送HTTP请求Web服务器接收到请求后 传递给Servlet容器Servlet容器加载Servlet 产生Servlet实例后 向其传递表示请求和响应的对象Servlet实例使用请求对象得到客户端的请求信息 然后进行相应的处理 Servlet实例将处理结果通过响应对象发送回客户端 容器负责确保响应正确送出 同时将控制返回给Web服务器 J2ME网络应用软件开发实践 如何编写Servlet Servlet的API包含在javax servlet和javax servlet http中 这两个包定义了Servlet与Web服务器交互的接口 对基于HTTP协议的Servlet需要同时引入javax servlet和javax servlet http包所有的Servlet类必须实现javax servlet Servlet接口 或者继承实现了Servlet接口的父类 比如HttpServlet J2ME网络应用软件开发实践 一般来说 我们使用的Servlet都是基于HTTP协议的 所以编写的Servlet对象一般都继承HttpServlet父类Servlet接口共有5种方法1 voidinit ServletRequestrequest ServletResponseresponse 此方法对应了初始化阶段的行为 可以在这个方法中完成加载数据库驱动 初始化变量等工作 J2ME网络应用软件开发实践 2 Voidservice ServletRequestrequest ServletResponseresponse 每当有客户端请求时 该方法就被调用 容器会传递给该方法一个请求对象和一个响应对象作为参数 可以通过请求对象获取IP地址 HTTP请求类型 GET HEAD POST等 响应对象用于完成Servlet与客户端的交互 通过调用getOutputStream 取得向客户端进行输出的输出流 向客户端发送HTML元素 J2ME网络应用软件开发实践 3 Voiddestroy 在Servlet实例消失之前 容器关闭或需要更多的内存 调用该方法 在service方法的所有线程都退出时或超时的时候利用该方法释放所有占用的资源4 ServletConfiggetServletConfig 该方法返回初始化参数和Servelet环境信息5 java lang StringgetServletInfo 定义一些Servlet的信息 如作者 版本等 J2ME网络应用软件开发实践 将以上5个方法结合起来就可以编写一个简单的Servlet对于继承HttpServlet的Servlet来说 在HttpServlet类中已经存在service 方法 其缺省时调用与HTTP请求的方法相应的do方法 如果HTTP请求方式为GET 则缺省调用doGET 如果请求方式为POST 则调用doPost 所以此时的Servlet对象不必覆盖service 方法 只需要覆盖相应的do方法即可 J2ME网络应用软件开发实践 doGet 和doPost 函数的两个参数为HttpServletRequest和HttpServletResponse对象 HttpServletRequest表示浏览器请求 可以通过这个类获取浏览器发送到服务器的任何信息 HttpServletRequest的常用方法包括 1 StringgetParameter Stringname 获取制定变量名name所对应的参数值 即得到GET或POST命令中所带的参数值 J2ME网络应用软件开发实践 2 String getParameterValues Stringname 与上面方法类似 当要获取这类会返回多个值的表单属性时 就应当用这种方法 3 StringgetMethod 返回字符串 GET 或 POST 4 StringgetRequestURI 获取请求的URI J2ME网络应用软件开发实践 5 StringgetServletPath 获取Servlet的路径6 VoidsetCharacterEncoding Stringnew 设置请求的编码 需要处理汉字时务必要通过该方法设置正确的字符编码 否则将无法正确读取浏览器发过来的文字 J2ME网络应用软件开发实践 HttpServletRespose的常用方法包括 1 VoidsetContentType Stringtype 设置返回值得类型 输出汉字之前 务必通过该方法指定输出的字符编码 2 ServletOutputSreamgetOutputStream 向客户端发送二进制数据时 需要通过此方法获取输出流 3 PrintWritergetWriter 向客户端发送文本数据时 需要通过此方法获取输出流 J2ME网络应用软件开发实践 编写一个Servlet时 开发者只需实现特定的接口 定义如何去处理请求 而类似参数如何传递等细节都有容器来实现 不需要开发者操心 J2ME网络应用软件开发实践 实例 SimpleHello功能 向客户端输出一个字符串 HelloWorld 步骤1 编写SimpleHello java文件编写Servlet 实际上就是编写一个实现了javax servlet Servlet接口的类 ServletAPI中给我们提供了支持HTTP协议的javax servlet http HttpServlet类 我们只要从HttpServlet类中派生一个子类 在子类中完成相应的功能就可以了 J2ME网络应用软件开发实践 首先在 CATALINA HOME webapps目录下新建一个子目录smp1 然后用文本编辑器编写SimpleHello java源文件 将编好的SimpleHell java源文件放到 CATALINA HOME webapps smp1 src目录下 完整的源代码如下 J2ME网络应用软件开发实践 importjavax servlet ServletException importjava io importjavax servlet http publicclassSimpleHelloextendsHttpServlet publicvoiddoGet HttpServletRequestreq HttpServletResponseresp throwsServletException IOException PrintWriterout resp getWriter out println HelloWorld out close J2ME网络应用软件开发实践 步骤2 编译SimpleHello java打开命令提示符 转到SimpleHello java所在的目录 CATALINA HOME webapps smp1 src下 然后执行 javacSimpleHello java生成SimpleHello class文件注意 如果java编译器没有找到javax servlet和java serlet http这两个包就会产生错误 我们需要让Java编译器知道ServletAPI库所在的位置 环境变量设置如下 我的电脑 高级 环境变量 Path C ProgramFiles Java jdk1 6 0 01 binCLASSPATH C ProgramFiles ApacheSoftwareFoundation Tomcat5 0 common lib servlet api jar J2ME网络应用软件开发实践 在Tomcat中已经包含了ServletAPI库 是以JAR文件形式提供的 其完整路径是 CATALINA HOME common lib servlet api jar我们只需要在系统的CLASSPATH环境变量中添加这个JAR文件的路径名就可以了 J2ME网络应用软件开发实践 步骤3 部署Servlet一个Web应用程序以结构化 有层次的目录形式存在 Web应用程序的资源文件都要部署在相应的目录层次中 通常将Web应用程序的目录放到 CATALINA HOME webapps下 要建一个新的Web应用程序 可以在webapps下先建一个目录 本例中所建的目录是smp1 作为第一个Web应用程序的根 J2ME网络应用软件开发实践 Servlet规范中定义的Web应用目录层次结构 J2ME网络应用软件开发实践 在 CATALINA HOME webapps smp1目录下新建一个目录WEB INF 进入WEB INF 新建一个classes目录 整个目录结构是 CATALINA HOME webapps smp1 WEB INF classes将编译生成的SimpleHello class文件放到WEB INF classes目录下 J2ME网络应用软件开发实践 接下来 需要部署这个Servlet Web应用程序的配置和部署是通过web xml文件来完成的 web xml被称为Web应用程序的部署描述符 在web xml中使用和元素来部署Servlet J2ME网络应用软件开发实践 helloworldSimpleHellohelloworld hello J2ME网络应用软件开发实践 元素用来声明Servlet子元素用来指定Servlet的名字 在同一个Web应用程序中 每一个Servlet的名字必须是唯一的 该元素的内容不能为空 子元素用于指定Servlet类的完整限定名 如果有包名 要同时给出包名 J2ME网络应用软件开发实践 元素用于在Servlet和URL样式之间定义一个映射 它的子元素指定的Servlet名字必须和元素中的子元素给出的名字相同 子元素用于指定对应于Servlet的URL路径 该路径是相对于Web应用程序的路径 J2ME网络应用软件开发实践 经这样的配置后 就可以通过http localhost 8080 smp1 hello来访问SimpleHello这个Servlet了 步骤4 访问SimpleHello当部署好Servlet后 对客户端来说 访问Servlet和访问静态页面没有什么区别 打开IE 在地址栏中输入http localhost 8080 smp1 hello注意hello后面不要加斜杠 然后回车 即可看到结果 J2ME网络应用软件开发实践 实例2 WelcomeYou编写一个带表单的HTML页面 表单中提供了一个文本域 让用户输入他的姓名 然后提交给Servlet处理 在Servlet中 从提交的表单信息中提取出用户姓名 然后加上欢迎信息到客户端 步骤1 编写welcome html文件将编好的welcom html文件放到 CATALINA HOME webapps smp1目录下 完整代码如下 J2ME网络应用软件开发实践 在HTML代码中 我们先假设对此表单进行处理的Servlet是welcome 表单采用的提交方法是get J2ME网络应用软件开发实践 步骤2 编写WelcomeYou java编写好WelcomYou java源文件 将其放到 CATALINA HOME webapps smp1 src目录下 完整源代码如下 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 HttpServletRequest对象封装了客户端的请求信息 要获得请求参数中某个参数的值 可以调用HttpServletRequest的getParameter 方法 传递参数的名字 注意getParameter 方法的参数 user 和表单中用于输入用户姓名的文本域的名称 user 必须是一致的 步骤3 编译WelcomYou java打开命令提示符 转到在WelcomeYou java所在的目录 CATALINA HOME webapps smp1 src下 然后执行 javacWelcomeYou java J2ME网络应用软件开发实践 步骤4 部署Servlet将WelcomeYou class文件放到 CATALINA HOME webapps smp1 WEB INF classes目录下 打开 CATALINA HOME webapps smp1 WEB INF目录下的web xml 添加对本例中的Servlet的配置 部分内容如下 J2ME网络应用软件开发实践 welcomeWelcomeYouwelcome welcome J2ME网络应用软件开发实践 注意 在支持低版本的Servlet规范 2 4以前 的Web服务器中 所有的元素必须出现在所有的元素之前 步骤5 访问WelcomeYou启动Tomcat服务器 打开IE 在地址栏中输入http localhost 8080 smp1 welcome html出现页面后 在文本域中输入用户姓名 单击提交按钮 将看到结果页面 注意IE的地址栏部分 welcome html页面采用的表单提交方法是get 所以提交的数据被附加到请求URL的末端 作为查询字符串发送到服务器端 J2ME网络应用软件开发实践 步骤6 将提交方法改为post 如下 保存后打开IE 在地址栏中输入http localhost 8080 smp1 welcome html输入用户名后 单击 提交 按钮 将看到如下页面提示 HTTPStatus405 HTTPmethodPOSTisnotsupportedbythisURL这是因为WelcomeYou类中没有重写doPost 方法 而HttpServlet类的doPost 方法的默认实现是返回状态码为405的HTTP错误 表示对于指定资源的请求方法不被允许 J2ME网络应用软件开发实践 如果要对post请求作出响应 需要在WelcomeYou这个类中覆盖基类的doPost 方法 在doPost 方法中 可直接调用doGet 方法对post请求进行处理 这样 不管是get请求还是post请求 处理结果都是一样的 采用post方法提交表单时 提交的数据作为请求正文的内容发送到服务器端 所以在URL中就看不到附加的请求数据了 通常如果数据量小 数据中又没有密码等敏感信息 可以采用get方法提交表单 如果数据量较大 或者有安全方面的考虑 最好采用post方法提交表单 J2ME网络应用软件开发实践 实例3 LoginServlet编写一个登录页面 用户输入用户名和密码后 将表单提交给LoginServlet进行处理 在Servlet中 判断用户名和密码是否正确 如果正确 利用重定向向用户返回登录成功页面 如果失败 则向用户返回一个HTTP错误信息 步骤1 将编写好的login html文件放到 CATALINA HOME webapps smp1目录下 完整代码如下 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 在HTML代码中 先假定对此表单进行处理的Servlet是login 因为提交的数据中包含了用户密码 所以表单的提交方法我们采用post 步骤2 编写success html文件将编写好的success html文件放到 CATALINA HOME webapps smp1目录下 完整的代码如下 J2ME网络应用软件开发实践 步骤3 编写LoginServlet java将编写好的LoginServlet java源文件放到 CATALINA HOME webapp smp1 src目录下 完整代码如下 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 HttpServletRespons接口中定义的常量SC SERVICE UNAVAILABLE表示HTTP错误代码503 步骤4 编译LoginServlet java打开命令提示符 进入 CATALINA HOME webapps smp1 src目录 然后执行javacLoginServlet java生成LoginServlet class文件 J2ME网络应用软件开发实践 步骤5 部署Servlet将LoginServlet class文件放到 CATALINA HOME webapps smp1 WEB INF classes目录下 编辑WEB INF目录下的web xml文件 添加本例中的Servlet配置 部分内容如下 LoginServletLoginServlet LogingServlet login J2ME网络应用软件开发实践 步骤6 访问LoginServlet启动Tomcat服务器 打开IE 在地址栏中输入http localhost 8080 smp1 login html显示结果页面 J2ME网络应用软件开发实践 综合实例 旅游信息系统 J2ME网络应用软件开发实践 综合实例 旅游信息系统旅游信息系统是一个在手机上运行的程序 用于使用手机来查询旅游信息 要实现这样的功能 主要使用Java技术来完成 在客户端 手机 使用JavaME 在服务端 则使用Servlet和JDBC 数据库使用的是Accesss 服务器使用的是Tomcat J2ME网络应用软件开发实践 1 程序整体设计整个程序分为客户端和服务端两部分 客户端基于JavaME技术 服务端采用Servlet提供服务 后台使用Access数据库 整个系统中 客户端负责采集数据和显示工作 对于客户的输入 客户端会将信息发送至服务端的Servlet上 Servlet接受到信息之后 会对数据库进行相关的操作 并将结果发送回客户端 客户端再进行处理 从中的到结果 J2ME网络应用软件开发实践 3 客户端和服务端的交互在程序中 客户端需要和服务端进行交互 将信息送入服务端 在获得服务端返回的信息 客户端将信息送到服务器的方式是采用将信息写入URL的方式 生成连接服务器的URL的相关代码如下 J2ME网络应用软件开发实践 StringBufferstringbuffer newStringBuffer http 127 0 0 1 8080 travel Query location stringbuffer append location Stringbuffer append 最后生成的URL是形如http 127 0 0 1 8080 travel Query location 丽江 data 2011 5 1这样的形式 J2ME网络应用软件开发实践 通过上述的URL 服务端的request中分别具有名为 location 和 date 的属性值了 4 客户端获得和处理数据服务器将信息传送给客户端是通过将信息写入html文件中来进行的 服务端首先将信息写入html文件中 然后客户端解析得到的html文件 从中得到信息 服务器的Servlet在从request中获得相应信息后就会对数据库进行一定的查询操作 获得查询结果后 将结果按如下方式组装起来后发送给客户端 J2ME网络应用软件开发实践 1 中青旅 2011 5 1至2011 5 2 100 2 中旅 2011 5 1至2011 5 4 200 5 客户端要对这个结果进行解析已得到相关的信息 对以上字符串解析的结果应为 1中青旅2011 5 1至2011 5 21002中旅2011 5 1至2011 5 4200在客户端以上解析出来的两条记录以列表的方式显示出来 J2ME网络应用软件开发实践 系统时序如下 J2ME网络应用软件开发实践 服务器响应信息的解析如前所述 客户端的到的html文件是形如以下的内容 1 中青旅 2011 5 1至2011 5 2 100 2 中旅 2011 5 1至2011 5 4 200 客户端需要对其进行解析 以得到相关信息 解析代码见代码文件 J2ME网络应用软件开发实践 由于每一条记录都是通过 字符来分隔的 而记录中的每一项都是通过 字符来分隔的 所以解析的思路就是遍历字符串中的每一项 读取到相应的字符之后 设置和判断相关标志 从而将相关内容读取出来 在遍历字符串之前 先定义各种标志 I a t p分别对应每一条记录中的Id Agency Time和Price这4个属性 表示该字段是否被读取出来 Begin是取得的子串的开始位置 c是每次循环取得的内容 TravelInfo对象travelinfo是用于表示旅游信息的类 J2ME网络应用软件开发实践 在遍历字符串的for循环中 对于每次取得的字符串 首先判断是否读取的是 字符 如果是 字符 则表示一条记录已经读取完毕 4个布尔类型的变量I a t p的内容就可以设置为false begin中的内容也要改变 本次循环结束 开始下一次循环 如果不是 字符 则意味着正在读取 接下来的语句首先判断是否读取得是 字符 如果是 字符 则表示一个字段已经读取完毕 程序会通过布尔类型的变量的情况判断是哪个字段 然后设置TravelInfo对象的相应属性 将相关布尔类型的变量设置为true表示已经读取过 如果所有的字段都被读取过 则会将TravelInfo对象放置在Vector对象中 如果不是 则继续执行下一循环 J2ME网络应用软件开发实践 字符串解析问题是一个典型的状态机问题 对于本例中字符串的解析 可以对应于如下状态机 J2ME网络应用软件开发实践 从手机客户端输入查询条件 J2ME网络应用软件开发实践 提交查询条件后 如果有符合条件的记录 则显示 J2ME网络应用软件开发实践 否则显示 J2ME网络应用软件开发实践 客户端参考代码 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 J2ME网络应用软件开发实践 服务器端参考代码
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!