动态网页实用技术.ppt

上传人:xt****7 文档编号:5373819 上传时间:2020-01-27 格式:PPT 页数:55 大小:2.05MB
返回 下载 相关 举报
动态网页实用技术.ppt_第1页
第1页 / 共55页
动态网页实用技术.ppt_第2页
第2页 / 共55页
动态网页实用技术.ppt_第3页
第3页 / 共55页
点击查看更多>>
资源描述
第6章动态网页技术2 JSP技术编程 Servlet简介 请求 客户端 响应 Servlet运行于服务器上 Servlet java服务器小程序 是一个用Java编写的程序 此程序在服务器上运行以处理客户端请求 是按照Servlet规范编写的java类 ServletAPI Servlet的框架是由两个java包组成 javax servlet和javax servlet httpjavax servlet包中定义了所有的servlet类都必须实现的接口和类 javax servlet http包中定义了采用HTTP协议通信的HttpServlet类Servlet的框架的核心是 javax servlet Servlet接口 所有的Servlet都必须实现这一接口 ServletAPI HTTPServlet HttpServlet类提供一个抽象类以创建HTTPServlet publicvoiddoGet HttpServletRequestreq HttpServletResponseres doGet 方法处理客户端作出的GET请求 publicvoiddoPost HttpServletRequestreq HttpServletResponseres doPost 方法处理客户端作出的POST请求 HTTPServlet 有两个参数 HttpServletRequest和HttpServletResponse 这两个类实现了ServletRequest接口和ServletResponse接口ServletRequest接口中封装了客户请求信息 如客户请求方式 参数名 参数值 客户端正在使用的协议 以及发出客户请求的远程主机信息等ServletResponse接口为Servlet提供了返回相应结果的方法 Servlet体系结构 Servlet的生命周期 Servlet容器创建Servlet的一个实例Servlet的生命周期就是指创建Servlet实例之后其存在的时间以及何时消失生命周期的3个方法为 init service destroy Servlet的生命周期 生命周期的各个阶段为 实例化 Servlet容器创建Servlet的实例 初始化 该容器调用init 方法 服务 如果请求Servlet 则容器调用service 方法 销毁实例之前调用destroy 方法 销毁 Servlet的生命周期 初始化阶段 init 方法Servlet程序被实例化后 Servlet容器自动调用init 方法 成功调用后 Servlet对象进入等待服务请求状态 init 方法能够通过Serverletconfig对象读取web xml部署文件中定义的Servlet初始化参数 publicvoidinit ServletConfigconfig throwsServletException ThisisthedescriptionofmyJ2EEcomponentThisisthedisplaynameofmyJ2EEcomponentReadInitParamReadInitParaminit10000ReadInitParam servlet ReadInitParamindex jsp 简单Servlet的结构 这是一个显示HttpServletRequest和HttpServetResponse接口一些方法的简单Servlet 需要导入的包 用于处理GET请求的方法 创建设置文本格式和PrintWriter对象的方法以将数据发送给客户端 Servlet的部署 clientservletchapter2 ClientServletclientservlet clientservlet web xml文件中配置Servlet 两个名称必须相同 Servlet的生命周期 service 方法容器调用service 方法来处理客户端的请求 该方法的语法格式如下 客户端通过HTTP协议请求Servlet时有Get和Post两种方式 所以有语法格式与service 完全相同的doGet 和doPost 来替换service 方法 但二者不能同时使用 publicvoidservice ServletRequestreq ServletResponseres throwsServletException Servlet的生命周期 示例 用Servlet接收用户提交的请求并进行相应 publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html charset gb2312 PrintWriterout response getWriter out println out println out println AServlet out println try Class forName com microsoft sqlserver jdbc SQLServerDriver 建立数据连接Connectionconn DriverManager getConnection jdbc sqlserver 127 0 0 1 1433 DatabaseName TestDemo sa 2001sun Statementstate conn createStatement 执行插入操作intresult state executeUpdate insertinto User UName UPass values request getParameter name request getParameter pass 判断插入是否成功if result 1 out println 用户注册成功 else out println 用户注册失败 catch Exceptione out println e out println out println out flush out close Servlet的请求转发 在Web应用中 Servlet除了直接接收客户端请求执行对应的业务逻辑操作之外 还经常充当控制器 Controller 充当控制器的Servlet可以将请求转发给另外一个Servelet或者Jsp页面 甚至可以是一个静态的HTML页面 然后由它们进行处理并产生对请求的响应 要完成请求转发 就要用到javax servlet RequestDispatcher接口 该接口定义了如下的转发方法 RequestDispatcher对象是由Servelet容器创建 通常可以用ServeletRequest接口中封装的getRequestDispatcher 方法获得 publicvoidforward ServletRequestreq ServletResponseres Web应用实例 ShopOnLine是一个实现在线购物的Web应用 采用了比较典型的三层软件结构 客户层 Web服务器层和数据库层 本Web应用基本软件结构如下图所示 ShopOnLine的功能 可以将指定的商品加入购物车 然后设定购买数量 加入购物车后还可以修改数量 可以计算购买商品的总花费 清空购物车等 ShopOnLine的结构介绍 由3个JavaBean 5个JSP页面和一个工具类构成 其中各部分构成元素作用如下 商品基本信息的JavaBean Product购物车Bean ShoppingCart购买项目Bean ShoppingItem数据库连接初始化 init jsp商品列表页面 list jsp添加商品确认页面 add jsp中转页面 putintocart jsp查看购物车 showcart jsp工具类 ShopUtil java 开发并发布JavaBean 商品基本信息Bean Product用来保存一件商品的基本信息 如商品的名称 商品的产地 生产厂家和价格等信息 代码如下 packagecn ac ict ShopOnLine importjava io Serializable importjava util Date publicclassProductimplementsSerializable privateStringpid privateStringpname privateStringpcomp privateStringpmadew privateDatepmadeyear privatefloatrealprice privatefloatcutprice privateintamount privateStringdescription publicProduct publicStringgetPid returnpid publicvoidsetPid Stringproductid pid productid 商品的基本属性 商品的id 名称 厂家 产地 生产日期 价格 优惠价 数量 描述信息等 无参的构造函数和各个属性对应的Get Set方法 开发并发布JavaBean 购物车Bean Bean购物车Bean的作用是模拟一个购物车 它主要有一个HashMap类型的属性 其中包含了所有商品项目的信息 每个项目代表一种商品 并提供了不是很标准的set和get方法 购物车Bean其他功能包括 向购物车中添加一个商品项目从购物车中移除指定的商品项目获取购物车中的所有商品项目获取当前购物车中商品项目的数目计算购物车中所有商品的市场价值计算购物车中本次购物所需的所有花费只和清空购物车代码如下 HashMap基本用法就是get和put两个操作 用put把一个键值对放入HashMap中 用键值做索引从HashMap中往外get 比如 HashMaphm newHashMap hm put key value ObjectgetValue hm get key packagecn ac ict ShopOnLine importjava io Serializable importjava util HashMap publicclassShoppingCartimplementsSerializable privateHashMapitems privateintitemAmount publicShoppingCart super items newHashMap itemAmount 0 publicsynchronizedvoidadd Stringpid Productproduct intnum if items containsKey pid items remove pid ShoppingItemnewitem newShoppingItem product num items put pid newitem else ShoppingItemnewitem newShoppingItem product num items put pid newitem itemAmount 像购物车中添加一个商品项目 开发并发布JavaBean publicsynchronizedvoidremove Stringpid 从购物车中移除指定的商品项目if items containsKey pid items remove pid publicsynchronizedCollectiongetItems 获取购物车中所有的商品项目returnitems values protectedvoidfinalize items clear publicsynchronizedintgetItemAmount 获取当前购物车中商品项目的数目returnitemAmount publicsynchronizedfloatgetTotalReal 计算购物车中所有商品的市场价值floattotal 0 0F for Iteratorit getItems iterator it hasNext ShoppingItemsi ShoppingItem it next Productproduct si getItem total product getRealprice si getAmount returntotal 我们常常使用JDK提供的迭代接口进行javacollection的遍历 Iteratorit list iterator while it hasNext using it next 开发并发布JavaBean 计算购物车中在本站购物所需要的所有花费之和publicsynchronizedfloatgetTotalCut floattotal 0 0F for Iteratorit getItems iterator it hasNext ShoppingItemsi ShoppingItem it next Productproduct si getItem total product getCutprice si getAmount returntotal 清空购物车publicvoidclear items clear itemAmount 0 开发并发布JavaBean 购买项目Bean ShoppingItem就是连接Product和ShoppingCart的一个类 完成封装Product的作用 代码如下 packagecn ac ict ShopOnLine importjava io Serializable publicclassShoppingItemimplementsSerializable privateProductitem privateintamount 0 publicShoppingItem Productnewproduct intnum super if num 0 item newproduct amount num publicvoidInAmount amount publicvoidDeAmount amount publicProductgetItem returnitem publicintgetAmount returnamount 数据库操作 由本例中使用MySQL作为数据库服务器 数据库名称为shopdb 表为productlist 表中各自段描述如下 实现数据库的连接放在一个init jsp文件中 它获取数据库连接 并被需要使用数据库的JSP页面包含 JSP页面 由实现商品列表的页面是list jsp文件 该文件中首先包含了用于连接数据库的init jsp文件 获得数据库连接后 从中查询所有商品然后在页面上显示 源文件代码主要部分如下 加入购物车 转换成中文字符 JSP页面 从商品列表到添加商品确认中间还有一个中转页面 它没有具体的显示任务 完成一些处理后 把请求转发到其他页面 中转页面putintocart jsp页面的功能有 获得客户购买的某种商品的详细信息 把商品的详细信息封装成Product类 把商品信息保存到Session中 把客户请求转发到添加商品确认页面 源代码如下 Stringaddpid request getParameter add if addpid null Statementstmt conn createStatement ResultSetrs stmt executeQuery select fromproductlistwherepid addpid rs next Producttemp newProduct temp setPid addpid temp setPname rs getString pname temp setPcomp rs getString pcomp temp setPmadew rs getString madew temp setPmadeyear java util Date rs getDate madedate temp setRealprice rs getFloat rprice temp setCutprice rs getFloat cprice temp setAmount rs getInt count temp setDescription rs getString description session setAttribute addpid temp response sendRedirect add jsp add addpid 封装成Product对象 JSP页面 在添加商品确认页面 add jsp 中可以修改商品的数量 并确认把指定数量的商品加到购物车中 同时这个页面的表单提交页面也是add jsp 根据传入的不同参数进行不同的操作 源代码主要部分如下 Stringaddpid null addpid request getParameter add Producttemp null intcount 1 Stringconfirm request getParameter confirm if confirm null confirm equals confirm none if addpid null 客户访问了错误的URL 缺少请求字符串 JSP页面 if confirm equalsIgnoreCase true if request getParameter amount null count newInteger request getParameter amount trim intValue shopcart add addpid temp count response sendRedirect list jsp elseif confirm equals false session removeAttribute addpid response sendRedirect list jsp else 修改购买商品数量并把它们加入到您的购物车商品名称产地生产公司市场价优惠价数量小计 本页面也是提交页面 错误的URL Putintocart页面提交的 查看购物车 查看购物车页面的主要功能是显示客户购买的所有商品列表 通过检查不同的客户购物车的状态显示不同的提示信息 Showcart jsp源代码 DAO设计模式的概念 DAO设计模式是属于J2EE数据层的操作 使用DAO设计模式可以简化大量代码和增加程序移植性 回忆之前使用JDBC操作数据库 都是直接在JSP页面中写JDBC代码 这样导致JSP页面中包含大量的HTML代码和JSP代码 显示和功能代码混在一起 难以维护 因为要在JSP中使用JDBC代码 所有还必须导入 java sql 包 这样的设计是非常不合理的 JSP只需要关注数据的显示 而不需要去关注数据是从哪里来的 获得怎么得来的 使用DAO设计模式可以很好的解决如上的问题 DAO包含几个重要部分 分别如下 1 数据库连接类 2 VO类 3 DAO接口 4 DAO实现类 5 DAO工厂类 数据库连接类 数据库连接类的主要功能是连接数据库并获得连接对象 以及关闭数据库 通过数据库连接类可以大大的简便开发 在需要进行数据库连接时 只需创建该类的实例 并调用其中的方法就可以获得数据库连接对象和关闭数据库 不必再进行重复操作 publicclassDataBaseConnection Connectionconn null publicConnectiongetConnection throwsSQLException try Class forName org gjt mm mysql Driver returnDriverManager getConnection jdbc mysql localhost test root 123 catch ClassNotFoundExceptione e printStackTrace returnnull VO类 VO类是一个包含属性和表中字段完全对应的类 并在该类中提供setter和getter方法来设置并获得该类中的属性 publicclassUser privateStringuname privateStringupass publicUser Stringuname Stringupass this uname uname this upass upass publicStringgetName returnuname publicvoidsetName Stringname this uname name publicStringgetPassword returnupass publicvoidsetPassword Stringpassword this upass password 和表中字段完全对应 DAO接口 DAO接口中定义了所有的用户的操作 如添加记录 删除记录以及查询记录等 不过因为是接口 所以仅仅是定义 需要子类来实现 publicinterfaceIUserDao 添加publicintadd Useruser throwsException 删除publicintdel Useruser throwsException 修改publicintupdate Useruser throwsException 查询 只考虑查询所有记录 publicListqueryAll throwsException DAO实现类 DAO实现类实现了DAO接口 并实现了DAO接口中定义的所有方法 在DAO实现中通过连接数据库进行数据库操作 publicclassUserDAOImplimplementsIUserDao publicintadd Useruser throwsException TODOAuto generatedmethodstubreturn0 publicintdel Useruser throwsException return0 publicListqueryAll throwsException returnnull publicintupdate Useruser throwsException return0 给出添加记录的具体操作 DAO工厂类 在没有DAO工厂类的情况下 必须通过创建DAO实现类的实例才能完成数据库操作 这时就必须知道具体的子类 对于后期的修改非常不便 如后期需要创建一个操作Oracal的DAO实现类 这时就必须修改所有的使用DAO实现类的代码 使用DAO工厂类可以比较方便的对代码进行管理 而且可以很好地解决后期修改的问题 通过该DAO工厂类的一个静态方法来获得DAO实现类实例 这时如果需要替换DAO实现类 只需修改该DAO工厂类中的方法代码 而不必修改所有的操作数据库代码 publicclassDAOFactory static方法 通过类名调用publicstaticIUserDaogetPersonDAOInstance returnnewUserDAOImpl 用一个接口的实现类生成一个接口的类 使用DAO完成数据库操作 有了前面定义的DAO的5个部分 就可以通过DAO工厂获得DAO实现类实例 通过DAO实现类中的方法就可以完成添加 更新 删除 按ID查询记录操作 添加记录更新记录删除记录按用户名查询记录 虽然JSP的功能很强大 可以完成Servlet的大部分功能 但是它并不能完全取代 例如一个稍大的项目 需要美工和程序员共同协作才能完成 这时如果在JSP页面里写太多的业务逻辑代码 然后美工也在JSP页面里加上很多CSS样式等静态资源 开发效率必定会很低 维护起来也非常不方便 所以 在JSP开发中使用一些成熟的开发模式很重要 JSP开发与应用模式 模型1 JSP JavaBean 这种模型是以页面为中心设计的 即所以的表示逻辑和处理逻辑都出现在JSP页面上 JSP页面不仅要给用户显示数据 而且还要负责控制应用程序的流程 需要从一个JSP页面到另一个JSP页面 通过JSP中的链接或表单的action属性来实现 JavaBean提供了一种把一些功能封装进Java类的机制 通过标签可以在JSP页面中直接使用JavaBean 下图为该模型的结构图 模型1 JSP JavaBean 这种模式由于其开发周期短且表现灵活 所以适用于一些小型项目 但对于大规模的系统就显得有些力不从心 由于在JSP页面中经常包含业务逻辑 所以在页面代码里就会有大量的HTML标记与Java代码混合在一起 使JSP页面代码可读性差 难以进行维护 此外 由于JSP页面与应用程序的逻辑是紧密耦合的 所以修改或扩充这种应用程序中包含的功能非常困难 如果更改了其中一些功能 则会经常波及系统其他部分而造成更多缺陷和不可预见的后果 模型2 JSP Servlet JavaBean 与模型1不同 在此模型中 JSP单纯地只负责表示逻辑 而处理逻辑由Servlet来实现 当用户通过浏览器向服务器发送请求时 接收请求的组件由原先的JSP换成了Servlet Servlet通过自身的逻辑判断调用相应的JavaBean处理用户请求 JavaBean则通过业务逻辑的处理和数据持久化等工作 待到处理完成 JavaBean将结果返回至Servlet 最后再调用JSP页面将其返回给客户端浏览器 完成一次操作 JSP Servlet JavaBean模型的结构如下图所示 模型2 JSP Servlet JavaBean JSP Servlet JavaBean模型下每层的分工很清晰 程序员和美工的工作可以同时进行 开发效率高 程序员负责Servlet和JavaBean的编写 美工编写JSP页面 把数据接口的位置留出来 专心设计静态网页内容 此模型明显地把显示和处理工作分离 比JSP JavaBean模型更容易管理 维护性 扩充性 安全性更好 适合于大型项目的开发 MVC模型 MVC是一种设计模型 它是Model View Controller 模型 视图 控制器 的缩写 最初是为了编写独立的GUI 图形用户界面 应用程序而开发出来的 现在已经在各种面向对象的GUI应用程序中广泛使用 包括Web应用程序 MVC设计模型把整个系统分解成模型 视图 控制器3个组件 模型模型是应用程序使用的对象的完整表示 代表了该应用程序的核心功能 它负责处理用户的数据 实现业务逻辑 同时它还为视图的显示提供数据 并可被多个视图所共用 模型封装了应用程序需要的数据 提供了完成问题处理的操作过程 从而使其独立于具体的界面表达和输入 输出操作 使业务逻辑流程的处理过程对其他层来说是黑箱操作 MVC模型 视图视图主要指与用户交互的界面 即应用程序的外观 MVC设计模型对于视图的处理仅限于视图上数据的采集和处理 以及用户的请求 而不包括视图上的业务流程的处理 业务流程的处理交给模型处理 视图将表示模型的数据 数据间的逻辑关系以及状态信息以特定的形式展示给用户 它从模型中获得显示信息 对相同的信息可以有多个不同的显示形式或视图 每个视图有一个更新操作 当调用更新操作时 视图获得来自模型的数据值 并用它们来更新显示 控制器控制器用来处理用户与应用程序的交互操作 它的职责是控制提供模型中任何变化的传播 确保用户界面与模型间的对应关系 控制器并不做任何数据处理 例如 用户单击一个链接 控制器接收请求后 并不处理业务信息 它只把用户的信息传递给模型 告诉模型做什么 选择符合要求的视图返回给用户 MVC模型 模型2体系结构借鉴了MVC设计模式来实现显示内容和业务逻辑的完全分离 它综合采用Servlet jsp javaBean技术 Servlet处理请求和控制业务流程 由jsp输出响应结果 由javabean负责具体的业务数据和业务逻辑 Servlet与JSP的整合 当一个应用程序需要进行大量的实际编程才能完成时 Servlet就显示出其优越性 从前面所介绍的内容可以知道 Servlet可以灵活且高效地执行一些任务 可是使用Servlet生成HTML需要使用大量的println语句生成所有HTML元素 这种方式是非常麻烦的 而且所得到的结果将很难进行修改 而JSP正好弥补了Servlet的这些不足 JSP允许对大部分的动态内容图像进行分割 这样将可以使用常规模式编写HTML 甚至还可以使用HTML的专用工具让网页内容的开发人员进行JSP文档开发 针对Servlet和JSP各自的优缺点 在进行Web应用程序开发时 通常用将Servlet和JSP合理地整合在一起使用 让它们的优势在不同的领域很好地展现出来 AJAX简介 AJAX全称为 AsynchronousJavaScriptandXML 异步JavaScript和XML 是一种创建交互式网页应用的网页开发技术 它使用 使用XHTML CSS来表示信息 使用Javascript操作DocumentObjectModel进行动态显示及交互 使用XML和XSLT进行数据交换及相关操作 使用XMLHttpRequest对象与Web服务器进行异步数据交换 使用JavaScript将所有的东西绑定在一起 与传统的web应用比较 图1Web的传统模型 客户端向服务器发送一个请求 服务器返回整个页面 如此反复 图2在Ajax模型中 数据在客户端与服务器之间独立传输 服务器不再返回整个页面 Ajax 一种不用刷新整个页面便可与服务器通讯的办法 Ajax工具包 Ajax并不是一项技术 它实际上是几种技术 每种技术各尽其职 以一种全新的方式聚合在一起 服务器端语言 服务器需要具备向浏览器发送特定信息的能力 Ajax与服务器端语言无关 XML eXtensibleMarkupLanguage 可扩展标记语言 是一种描述数据的格式 Aajx程序需要某种格式化的格式来在服务器和客户端之间传递信息 但XML只是其中的一种选择XHTML eXtendedHypertextMarkupLanguage 使用扩展超媒体标记语言 和CSS CascadingStyleSheet 级联样式单 标准化呈现 DOM DocumentObjectModel 文档对象模型 实现动态显示和交互 使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取 使用JavaScript绑定和处理所有数据 Ajax的工作原理图 Ajax的缺陷 AJAX不是完美的技术 使用AJAX 它的一些缺陷不得不权衡一下 由Javascript和AJAX引擎导致的浏览器的兼容页面局部刷新 导致后退等功能失效 对流媒体的支持没有FLASH JavaApplet好 一些手持设备 如手机 PDA等 支持性差 向服务器发送请求 if window XMLHttpRequest Mozilla Safari http request newXMLHttpRequest elseif window ActiveXObject IEhttp request newActiveXObject Microsoft XMLHTTP XMLHttpRequest的概述 XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的 非W3C标准 创建XMLHttpRequest对象 由于非标准所以实现方法不统一 1 InternetExplorer把XMLHttpRequest实现为一个ActiveX对象 2 其他浏览器 Firefox Safari Opera 把它实现为一个本地的JavaScript对象 3 XMLHttpRequest在不同浏览器上的实现是兼容的 所以可以用同样的方式访问XMLHttpRequest实例的属性和方法 而不论这个实例创建的方法是什么 XMLHttpRequest的方法 XMLHttpRequest的属性 发送请求 利用XMLHttpRequest实例与服务器进行通信包含以下3个关键部分 1 onreadystatechange事件处理函数 2 open方法 3 send方法
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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