中文第七章jsp和javabean本章介绍了JavaWeb编程的一个重要概念JavaBean并_第1页
中文第七章jsp和javabean本章介绍了JavaWeb编程的一个重要概念JavaBean并_第2页
中文第七章jsp和javabean本章介绍了JavaWeb编程的一个重要概念JavaBean并_第3页
中文第七章jsp和javabean本章介绍了JavaWeb编程的一个重要概念JavaBean并_第4页
中文第七章jsp和javabean本章介绍了JavaWeb编程的一个重要概念JavaBean并_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

JSP本章要JSPJavaBeanJavaWebJavaBean的几个作用范围:application、session、request以及pageJSPServlet之间的通信以及MVC模式。JavaBeanJavaBean)以及CORBA(CommonObjectRequestBrokerArchitecture,公共对象结构)。虽然这些组件使用的开发工具有所不同,如可以使用VC、VB、JAVAJava具有“Writeonce,runanywhere,reuseanywhere”(一次书写,处处运行,处处可重用)的特点,所以说,JavaBeanJava的任JavaBean支持的组件有两种,分别为可视化组件和非可视化组件。对于JSPJavaBean组件。虽然你可以在不同的文件代码里放入一大块相同的程序代码,但是大多数的Java程序JavaBean组件来使用。JavaBean所起ActiveX一样:它们向用户提供一些能实现特定功能的方法接口,而具体的实现JavaBeanJavaBean设定的存取以电脑来作比方电脑就是一个JavaBean,而其颜色重量等可以是特性对于,基本上你是将JavaBean动态的连接到你的,用以实现特定的功能使用刚接触JavaBean的读者可能会被JavaBean的神秘面纱给迷惑,其实它就是一个特殊的Java类(class)文件:它们可以很容易的被重复使用并且可以进行组合从而可以应用Java类(class)文件我们都可以称之为JavaBean组件。JavaBeanJavaBean必须放在一个包(package)JSPBean实例时会调用空构造器。我JavaBean的时候,可以显式地定义一个不带参数的构造器,或者干Bean类应该没有任何公共变量,也就是说,不允许直接实例变量,变量名称getter/setter方法名称为:set/get+将变量首字母而它的getter方法名称应该定义成getAge()。这种命名规则有一个特例,如果实例变量是boolean类型的,那么,它对应的getter方法应该是“is”+实例变量。例如,假设有一个实例变量married表示“婚否(true或者false)”,那么,它的对应的publicReturnType…}publicReturnType…}或者(boolean类型属性publicpublicboolean{…}publicvoidsetXxx(XXXTypepublicvoidsetXxx(XXXType}其中,ReturnType代表了方法返回的类型,xxx代表具体的属性名字,XXXType则代这个Bean有两个属性:name和,分别表示和,它们都是private的。然后我setter/getter方法,用于存取这两个属性:源文件:packagepackagepublic privateStringname="";privateString }publicvoidsetName(Stringname){=name;}publicStringgetName(){return;}publicvoid(;=}publicStringgetreturnthis.};}定义好这个Bean类以后,为了能够让JSP正确的使用它,需要将它编译后的类文件放到<Web应用>/WEB-INF/classes 下,这样,在JSP才能够正确的寻找到它。jsp:useBeanuseBean的用法。useBeanscope="page|request|session|application"class="package.class"<jsp:useBean>单标记,另一种是使用scope="page|request|session|application"class="package.class"type="package.class"type="package.class"class="package.class"type="package.class" ]scope="page|request|session|application"class="package.class"|type="package.class"class="package.class"type="package.class" <jsp:setPropertyuseBeanscopeJavaBean的作用范围,可能的取值为:page、request、sessionid:用于指定这个JavaBean对象的变量名,这样,在JSP中就可以使用变量名来访问这个JavaBean对象了classclassJavaBeanclass指定的类public构造器来完成实例化type:指定JavaBean对象的类型通常用在当对应的scope中已经存在JavaBean对象的时候,这个时候使用type将不会产生新的对象。另外,它也可以和class属性实例化一个JavaBean,并且指定JavaBean的类型为type属性指定的类型。这个属使用jsp:useBean可以得到一个JavaBean的实例,但是,这个实例不一定是新建的,如果已经存在一个与指定id同名、相同scope的JavaBean,那么就不会新建一个JavaBean实当你想初始化一些属性而包含jsp:setProperty时会用到第二种定义方式,后面我的放到外面,jsp:setPropertyjsp:useBean而存在。在JSP页面中使用jsp:useBean元素的scope属性来一个在某一个范围内可操作JavaBeanapplicationsession,requestpage于它们的含义我们面已经讨论过了,而对于它们和JavaBean的结合使用,后面我们会整的类的名字。再次提醒读者注意,Bean必须包含在一个包(package)中,所以说一个具class属性的值的形式就形如:“包文件名.类文件名(package_name.class_name)”。<jsp:useBeanid="myProductors"scope="application"class="datebase.ProductorBean"/>标记myProductors(由id属性来指定)来这个bean的实例,因为这个JavaBean的实例scope<jsp:useBeanid="myProductors"scope="application"class="datebase.ProductorBean"/>JSPJavaBeanjsp:setProperty元素。使用符串常量或者请求参数或者是表达式等。表7-1概述了使用jsp:setProperty元素来设置JavaBean组件的属性的各种方法:7-1:用String值给BeanString常<jsp:setPropertyproperty="propName"value="stringRequest<jsp:setPropertybeanRequest<jsp:setPropertyname="beanName"<jsp:setPropertyname="beanName"<jsp:setPropertyname="beanName"property="propName"value="expression"/><jsp:setPropertyname="beanName"property="propName"<jsp:attributename="value">jsp:setPropertyJavaBean组件的属性时,要注意以下几点,首先,beanName必须和useBean属性里面定义的id属性值相同;其次JavaBean组件中必须有一个setPropName方法;最后,paramNamerequest参数名。者请求(request)参数是字符串(String)类型的,Web容器会自动的把值的类型转换成属7-2所示。7-2Bean使用setAsText(string-liboolean或byte或char或double或int或float或long或shortnewString(string-li<jsp:setPropertyname=" o"property="name"value="<%=request.getParameter("UserName")%>"<jsp:setPropertyname=" o"property="name"value="<%=request.getParameter("UserName")%>"/><jsp:getProperty o"JavaBean<jsp:getProperty o"它将会去自动调用oBean的getName()方法,并且将获得的值打印到页面。我们也JSPScriptlet来完成一样的功能: 下面我们来看如何在JSP中调用oBean7-2JSP<%@<%@pagelanguage="java" oBean;"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBean o" oBean"scope="page"<jsp:setProperty o"property="name"value="Tom <metahttp-equiv="Content-Type"content="text/html;<body <p<p<font<jsp:getProperty o"pageimportchap07.oBean引入,然useBean动作创建一个oBean的实例,实例名称为“o”,并且同时给这个7-1JSPIE图7-1程序 oBean.jsp执行结Bean属性和request参数关我们首先来看一下如何使用表达式设置Bean的属性。我们还是使用上面定义的oBeanBeanint7-3JavaBean源文件 packagepackagepublicclass privateStringname="";privateString privateprivateintage=public }publicvoidsetName(Stringname){=name;}publicStringgetName(){return;}publicvoid ( ;}publicStringgetreturnthis.};publicint{return}publicvoidsetAge(int{this.age=}}HTML名、和去设置NewoBean的属性值源文件:<metahttp-equiv="Content-Type"content="text/html;<body<div<formmethod="post" oBean.jsp"<inputtype="text" <select <optionvalue="先生">先生<option<inputtype="text"<inputtype="submitname="Submit"value="提交 图7-2是这个HTML表单的显示效果它将会把表单体交给 oBean.jsp来处理图7- oBeanFormhtml显示效JSPBean7-5JSP源文件 <%@<%@pagelanguage="java" oBean;"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBean<jsp:useBeano"oBean"scope="page"<jsp:setPropertyname=" o"property="name"<jsp:setPropertyname=" o"property=" intage=0;{age=}catch(NumberFormatException{}<jsp:setProperty o"property="age" <metahttp-equiv="Content-Type"content="text/html;<body <p<font<jsp:getProperty o"传递过来的数据,并且用这些值来设置JavaBean的属性。因为request.getParameter()方法得到的值一定是String类型,而NewoBean的age属性是int类型的数据,所以,我们需要将从页面接收到的数据使用Integer的parseInt()方法进行转换,将String类型的数据转换成int类型。setPropertyparamJavaBeanString类型JavaBeanString类型属JavaBean属性的时候,将属性和参数相关联,自动执行从paramJavaBean的JavaBean属性的值。paramJavaBean属性关联,来完成上个例子7-6setPropertyJavaBean<%@<%@pagelanguage="java" oBean;"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBeano"oBean"scope="page"<jsp:setProperty<jsp:setProperty<jsp:setPropertyo"property="name"o""o"property="age" <metahttp-equiv="Content-Type"content="text/html;<body <p<fontsize="4"><font<jsp:getProperty o"<jsp:setProperty<jsp:setProperty<jsp:setProperty<jsp:setPropertyo"property="name"o""o"property="age"paramJavaBeanJSPJavaBean属null到相关联的属性。<jsp:setProperty<jsp:setProperty<jsp:setPropertyo"property="name"o""o"property="age"JavaBean的属性名称一致,那么,还可以更进一步的将“param”<jsp:setProperty<jsp:setProperty<jsp:setPropertyo"property="name"o""o"property="age"JavaBean名称去寻找对应的请求参数。<jsp:setProperty o"JavaBeanparam“<jsp:setProperty o"JavaBean的属性和请求参数关联起来。如果有部分的JavaBean属性无法找到对应的请求参数,则不会采取任何行动。我们可以将对JavaBean属性的赋值分成几步来完成,每次只完成其中的一部分属性的赋值。<jsp:useBeanid="cart"scope="page" oBean"在JSP页面中使用jsp:useBean元素来一个在某一个范围内可存取的JavaBean,这applicationsession,request<jsp:useBeanid="cart"scope="page" oBean"这条语句就设置了一个作用范围为page的JavaBean。“page”范围的JavaBean是默认的范围范围的JavaBean只能在实例化它的页面中使用JSP动作定义的JavaBeanPageContext对象中。当属性scope的值为request时,JSP动作定义的JavaBean实例就会到ServletRequestJSPjsp:forwardRequestDispatcherinclude(forward(JSPServletJavaBean当属性scope的值为session时JSP动作定义的JavaBean实例就会到HttpSessionHTTPJavaBean(session)过程中存在。当属性scope的值为application时,JSP动作定义的JavaBean实例就会被到ServletContextJavaBean中的任何对象(JSPServlet)scope设置下,JavaBeanJavBen的方法很简单,只需要调用pageContextremoveAtribute(StringbeanI)JavaBendrequest是在两个或多个有请求关系的JSP/Servlet页面中起作用的我们来看一个例子JavaBean的属性,最示例7-7:Bean定源文件:packagepackagepublic privateStringname="";privateintage=0;privateStringpwd="";}publicvoidsetName(Stringname){=name;}publicStringgetName(){return;}publicint{return}publicvoidsetAge(int{this.age=}publicString{return}publicvoidsetPwd(String{this.pwd=}}}JavaBean很简单,其中定义了三个可读写属性:name、age和pwd。HTML表单,用于接收信息:<metahttp-equiv="Content-Type"content="text/html;<body<div 数据<formmethod="post"action="PageBeanForm1.jsp"<tableborder="0"<td><inputtype="text"<td><inputtype="password"<td><inputtype="text"<inputtype="submitvalue="提交 <%@<%@pagelanguage="java"Bean;"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBean " Bean"scope="request"<jsp:setProperty "<jsp:forward在这个程序中,将请求参数和JavaBeanJavaBean示例7-10:在JSP中JavaBean属<%@<%@pagelanguage="java"Bean;"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBean " Bean"scope="request"<jsp:setProperty "<metahttp-equiv="Content-Type"content="text/html;<body<div<h1>登陆名:<jsp:getProperty ":<jsp:getProperty ":<jsp:getProperty " 出这个JavaBean的属性值。因为我们在PageBeanForm1.jsp中将Bean的scope定义为“request”,所以在这个从PageFormBean1.jsp跳转过来的PageFormBean2.jsp中,它会直接使用已经存在的JavaBean实例而不会重新产生实例也就是说这个时候得到的Bean如果需要移除request范围的JavaBean可以使用request的removeAttribute(String关于session和application范围的JavaBean,请读者自行参考上面的例子来实现,在此不再赘述。移除session范围的JavaBean,可以使用session的removeAttribute(StringbeanId)的方法,而移除application范围的JavaBean,可以使用application的removeAttribute(StringJSPServlet的交WebJSPServletWeb项目中JSPServlet,这就涉及到一个问题:JSPServlet之间如何交互和传递信息?其实,相关的方法面我们已经都学习过了JSPServeltJSPforward7-11JSPServlet<jsp:forward <jsp:forward<jsp:forward <jsp:paramname="pName"这样,在Servlet中,就可以使用HttpServletRequest的getParameter("pName")方法来获ServletJSPHttpServletgetServletConfig()ServletConfigURLServletConfig的getRequestDispatcher()方法的参数,得到一个RequestDispatcher对象,最后,调用RequestDispatcher的forward()HttpServletRequest和HttpServletResponsedoXXX方法中的两个参数传递给它即可。7-12ServletJSPimportjava.io.*;importimportjava.io.*;importjavax.servlet.*;importpublicclassservletToJspextendsHttpServlet{publicpublicclassservletToJspextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)tryrequest.setAttribute("applet","servlet"); o.jsp").forward(request,}catch(Exceptione){}}}源文件 <%@<%@page<title>ServletJSP的通信<%=servlet7-37-3ServletMVC设计模JavaBean来实现。JavaBeanJSP代码和网页标签混合起来的情况在阅读和的时候会带来很大的方便将公用的代码封装在JavaBeanJavaBean来封JSPJava代码,当需要处理的商业逻辑JavaJSP页面变得非常臃肿,前端的Model-2模式”。目前流行的StrutsMVCWeb应用架构。JSP页面。JSP页面处于表现层,也就是视图(View即“V”)JavaBean负责数据的处理,也就是模型(Model即“M”)7-4MVC指定isbn号的书籍资料,这个servlet接受到请求后,根据isbn号从数据库中获得对应的书籍资料并将书籍资料保存到一书籍的JavaBean中然后转向到一个JSP程序中,这个JSP程序负责从作用域中取出代表书籍的JavaBean对象,并从这个JavaBean中出对应的属性,显示到网页上。这是一个典型的MVC应用:Model-表示书籍的JavaBean,V-显示书籍信息的JSP程序,C-ISBN的书籍记录。首先我们来看这个表示书籍的、扮演“Model”的JavaBean-7-14MVCpackagepackagepublicclassBookBean//ISBNprivateStringprivateStringprivateStringprivateStringprivateintpublicBookBean()}publicBookBean(Stringisbn,Stringtitle,StringStringpublisher,int{this.isbn=isbn;this.title=title;this.author=author;this.publisher=publisher;this.price=price;}publicStringgetIsbn(){returnisbn;}publicvoidsetIsbn(Stringisbn){this.isbn=isbn;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}publicStringgetPublisher(){returnpublisher;}publicpublicvoidsetPublisher(Stringpublisher){this.publisher=publisher;}publicintgetPrice(){returnprice;}publicvoidsetPrice(intprice){this.price=price;}}接下来,我们来看看扮演“Controllerservletpackagepackagechap07.servlet;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importimportchap07.db.DBUtil;importpublicclassQueryBookServletextends{publicvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{finalStringSQL="select*fromBookListwhereisbn=?";Connectionconn=null;PreparedStatementstmt=null;ResultSetrs=null;Stringaddress=//JavaBeanBookBeanbook=newBookBean();{conn=DBUtil.getConnection();stmt=conn.prepareStatement(SQL);//rs=if(rs!={//改变JavaBean中的属性address= }}catch(SQLException{}RequestDispatcherdis=request.getRequestDispatcher(address);}}这个程序的作用就是从数据库中取出数据,然后放到JavaBean并且将JavaBean保存requestJSPISBN的书籍存在,就跳转到disyBook.jsp中,否则跳转到unknownBook.jsp。在这个程序中,还用到了一个用于DBUtil.java,它的代码如下:packagepackagechap07.db;importjava.sql.*;publicclass{staticStringserverName=staticStringsDBDriver="oracle.jdbc.driver.OracleDriver";staticStringdbInstance="nitpro";staticString=staticStringdbUser="system";staticStringuserPwd="manager";*Connection*@returnpublicstaticConnection{Connectionconn=null;{conn=dbUser,}catch(ClassNotFoundException{}catch(SQLException{}return}*@pa

温馨提示

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

评论

0/150

提交评论