




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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,IOExceptionresponse.setContentType(text/html;charset=gb2312);PrintWriterout=response.getWriter();out.println();out.println();out.println(AServlet);out.println();tryClass.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);/建立数据连接Connectionconn=DriverManager.getConnection(jdbc:sqlserver:/:1433;DatabaseName=TestDemo,sa,2001sun);Statementstate=conn.createStatement();/执行插入操作intresult=state.executeUpdate(insertintoUser(UName,UPass)values(+request.getParameter(name)+,+request.getParameter(pass)+);/判断插入是否成功if(result=1)out.println(用户注册成功);elseout.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页面和一个工具类构成,其中各部分构成元素作用如下:商品基本信息的JavaBeanProduct购物车BeanShoppingCart购买项目BeanShoppingItem数据库连接初始化init.jsp商品列表页面list.jsp添加商品确认页面add.jsp中转页面putintocart.jsp查看购物车showcart.jsp工具类ShopUtil.java,开发并发布JavaBean,商品基本信息BeanProduct用来保存一件商品的基本信息,如商品的名称,商品的产地,生产厂家和价格等信息。代码如下:,packagecn.ac.ict.ShopOnLine;importjava.io.Serializable;importjava.util.Date;publicclassProductimplementsSerializableprivateStringpid;privateStringpname;privateStringpcomp;privateStringpmadew;privateDatepmadeyear;privatefloatrealprice;privatefloatcutprice;privateintamount;privateStringdescription;publicProduct()publicStringgetPid()returnpid;publicvoidsetPid(Stringproductid)pid=productid;,商品的基本属性:商品的id、名称、厂家、产地、生产日期、价格、优惠价、数量、描述信息等。,无参的构造函数和各个属性对应的Get、Set方法。,开发并发布JavaBean,购物车BeanBean购物车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;publicclassShoppingCartimplementsSerializableprivateHashMapitems;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);elseShoppingItemnewitem=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,购买项目BeanShoppingItem就是连接Product和ShoppingCart的一个类,完成封装Product的作用。代码如下:,packagecn.ac.ict.ShopOnLine;importjava.io.Serializable;publicclassShoppingItemimplementsSerializableprivateProductitem;privateintamount=0;publicShoppingItem(Productnewproduct,intnum)super();if(num0)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中。把客户请求转发到添加商品确认页面。源代码如下:,本页面也是提交页面,错误的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工厂类,数据库连接类,数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库。通过数据库连接类可以大大的简便开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库,不必再进行重复操作。,publicclassDataBaseConnectionConnectionconn=null;publicConnectiongetConnection()throwsSQLExceptiontryClass.forName(org.gjt.mm.mysql.Driver);returnDriverManager.getConnection(“jdbc:mysql:/localhost/test”,”root”,”123”);catch(ClassNotFoundExceptione)e.printStackTrace();returnnull;,VO类,VO类是一个包含属性和表中字段完全对应的类。并在该类中提供setter和getter方法来设置并获得该类中的属性。,publicclassUserprivateStringuname;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实现中通过连接数据库进行数据库操作。,publicclassUserDAOImplimplementsIUserDaopublicintadd(Useruser)throwsException/TODOAuto-generatedmethodstubreturn0;publicintdel(Useruser)throwsExceptionreturn0;publicListqueryAll()throwsExceptionreturnnull;publicintupdate(Useruser)throwsExceptionreturn0;,给出添加记录的具体操作,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服务器进行异步数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆大足县2025年上半年事业单位公开遴选试题含答案分析
- 浙江省金华县2025年上半年事业单位公开遴选试题含答案分析
- 浙江省常山县2025年上半年事业单位公开遴选试题含答案分析
- 河北省饶阳县2025年上半年公开招聘城市协管员试题含答案分析
- 2025版高品质混凝土构件采购合同规范范本
- 2025年服装辅料代理销售合同
- 2025年度绿色建筑节能材料全国分销合作协议
- 2025版汽车吊吊装设备租赁合同范本
- 2025年度家庭厨房橱柜升级改造工程合同范本
- 2025标准担保公司房产抵押借款合同
- 2025秋人教版(2024)八年级上册地理 【教学课件】1.3《民族》
- 创伤骨科慢性难愈性创面诊疗指南(2023版)解读课件
- 义务教育物理课程标准(2022年版)
- 施工项目会议管理制度
- 声音的特性讲课件
- 2025至2030年中国石油石化装备制造行业市场现状分析及投资前景研判报告
- 教学勇气课件
- 上海市闵行区2024-2025学年三年级下学期期末考试语文试题(含答案)
- 2025福建省特安安全技术服务中心有限公司招聘9人笔试参考题库附带答案详解析集合
- 土方消纳处置合同协议书
- T/CCS 075-2023煤矿柔性薄喷材料喷涂施工技术要求
评论
0/150
提交评论