




已阅读5页,还剩100页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第十二章JSP JAVA语言程序设计 2 目录 12 1JSP简介12 2JSP与JavaBean12 3JSP标签库12 4JSP与Servlet12 5本章小结 3 12 1JSP简介 servlet和JSP JavaServerPage 已成为开发电子商务等动态网站的首选技术 它们都是运行在服务器上的Java程序servletHTML的编写和维护都比较困难 使用print语句生成HTML并不容易 非Java开发人员很难处理这些HTMLJSP静态内容的输出都采用标准的HTML 只用java语言编写页面中生成动态内容的代码提供了对Java编程语言以及针对动态部分的servlet技术的完全访问 4 12 1 1什么是JSP程序 JSP简单的说 就是嵌入了Java代码的HTML 由静态HTML 专用的JSP标签和Java代码组成服务器端的技术 在后台被自动转换成servlet仅在修改后的第一次被访问时 才会被转换成servlet并进行编译 创建JSP唯一的一个一实例 并调用 jspInit完成初始化 之后每个用户请求都会创建一个调用JSP实例的 jspService方法的线程 因而多个并发请求会导致多个线程同时调用 jspServiceTomcat中 默认目录下的JSP文件被转换生成的servlet文件及编译后生成的class文件被放在install dir work Catalina localhost org apache jsp目录下 JSP简介 5 12 1 1什么是JSP程序 JSP页面被请求后的操作 JSP简介 6 JSP文件在服务器的部署可以和常规的HTML页面放在相同的目录中 并使用和常规HTML相同的URL访问它们除了不允许将WEB INF和META INF作目录名之外 可以使用任何喜欢的目录名Tomcat中JSP的默认目录是install dir webapps ROOT 我们只要把编写好的JSP文件直接放在此目录下即可例如install dir webapps ROOT SomeDirectory Some则对应的URL为http host port SomeDirectory Some 12 1 1什么是JSP程序 JSP文件在服务器的部署 JSP简介 7 12 1 2JSP语法概述 除了标准的HTML以外 JSP主要包括三类组件脚本元素 scriptingelements 使你可以向JSP文件产生的servlet文件中插入代码指令标签 directives 将影响由JSP页产生的servlet的总体结构动作标签 actions 影响JSP运行时的功能 JSP简介 8 脚本元素 向JSP文件产生的servlet文件中插入代码 主要有三种形式表达式一个JSP页面可以有许多 它们将被插入到生成的servlet文件的 jspService方法中每次客户端请求都会新开一个线程 调用servlet的service方法 service方法再调用 jspService方法 JSP简介 12 1 2JSP语法概述 脚本元素 9 声明语句声明的内容包括变量和方法 将被插入到生成servlet的类体中 在 jspService方法之外 成为类变量和类方法 直到服务器关闭才被释放当多个客户请求一个JSP页面时 多个线程将共享这些变量和方法 因而任何一个用户对这些变量操作的结果 都会影响到其他用户 12 1 2JSP语法概述 脚本元素 JSP简介 10 指令标签将影响由JSP页产生的servlet的总体结构其格式为directive代表指令名称attribute代表该指令中可选的属性名称value代表属性值并且总是用单引号或双引号括起来 要想在属性值value中输出引号 可在该引号前用一个反斜杠 在JSP中 有三种类型的指令pageincludetaglib JSP简介 12 1 2JSP语法概述 指令标签 11 page指令可放在文档内的任何位置 该指令对整个页面有效可以定义一个或多个大小写敏感的属性 包括import contentType isThreadSafe Session buffer等import属性为JSP页面引入Java核心包中的类 这样就可以在脚本部分使用这些类 如 可以为import属性指定多个值 这些值用逗号分割 这样就可以引入若干个包或类 如 JSP页面默认import属性已经有如下的值 java lang javax servlet javax servlet jsp javax servlet http 除import属性外 Page指令的其它属性只能指定一个值 JSP简介 12 1 2JSP语法概述 指令标签 page指令 12 contentType属性定义JSP页面相应的MIME MultipurposeInternetMailExtension 多用途Internet邮件扩展 类型和JSP页面字符编码其属性使用以下两种格式之一或者例如其属性默认值为 JSP简介 12 1 2JSP语法概述 指令标签 page指令 13 isThreadSafe属性用来设置JSP页面是否可多线程访问设为true时 JSP页面能同时响应多个客户的请求设为false时 同一时刻只能处理一个客户的请求 其它客户须等待其默认值为truesession属性表示当前的JSP页面是否参与HTTP会话设为true时 可以使用内置的javax Servlet HttpSession类型的一个名为session的对象设为false时 则该对象不被创建默认值为true JSP简介 12 1 2JSP语法概述 指令标签 page指令 14 buffer属性指定jsp内置输出流out变量使用的缓冲区的尺寸 如果设置为none 则不使用缓冲区默认值是8kbout变量是JspWriter类型的 JspWriter是java io Writer类的子类 累计输出内容超过了这里设定的大小 完成了此页 或者输出被明确清除 如使用response flushBuffer 文档才被发送给客户显示例如autoflush属性控制out的缓冲区在装满时的处理 默认为true设为true时 装满时则自动清除缓冲区设为false时 装满后则会出现异常buffer的值是none时将autoflush设为false是不合法的 JSP简介 12 1 2JSP语法概述 指令标签 page指令 15 info属性定义了一个通过getServletInfo方法可从servlet中检索到的串格式为isErrorPage属性指明当前页是否能充当其它JSP页面的错误页 采用以下两种格式之一或者 errorPage属性指定一个处理当前页未被捕获的任何异常的页面格式为这个URL指定的错误页的isErrorPage属性必须被设为true方可使用 JSP简介 12 1 2JSP语法概述 指令标签 page指令 16 include指令与page指令不同 该指令应该放在你想要将外部文件插入的位置 它可以将文件整体插入到该处其格式为Jsp文件被转换成servlet文件时 外部文件就被插入了 然后统一进行编译当外部文件发生改变时 当前页面无法得到通知 要想得知外部文件的任何改变 当前页面必须重新编译 由上一节jsp的操作过程可知 必须重新保存该jsp文件 12 1 2JSP语法概述 指令标签 include指令 JSP简介 17 taglib指令JSP1 1规范中新增的指定一个标记库 用于扩充标准的JSP标记集完成三个任务首先 它通知JSP服务器 页面使用一个标记库其次 它指定包含标记库标志符的特殊jar文件的位置最后 它指定一个用于唯一区分这些新标记的标记前缀格式为 uri属性 一个引用标记库描述符文件 后缀名为TLD TagLibraryDescriptor 的绝对或相对URLprefix属性 指定一个将要在TLD文件定义的标记名前面使用的前缀如果TLD文件定义了一个名为tag1的标记 并且prefix属性的值设为test 那么实际的标记名将为test tag1 12 1 2JSP语法概述 指令标签 taglib指令 JSP简介 18 动作标签一种特殊的标签 影响JSP运行时的功能格式为action name代表动作名称attribute代表属性名称value代表属性值分为两类Resource动作JavaBean动作 JSP简介 12 1 2JSP语法概述 动作标签 19 Resource动作include动作标签告诉JSP页面动态包含一个文件 即JSP页面运行时才将文件加入 例如 如果包含的是普通的文本文件 就将文件的内容发送到客户端 由客户端负责显示如果包含的是JSP文件 JSP引擎就执行这个文件 然后将执行的结果发送到客户端显示如果修改了被包含的文件 那么运行时将看到修改后的结果 这一点和include指令不同可结合param指令 向要包含的文件传送信息 被包含的文件通过JSP的内置对象request调用getParameter方法获得参数值 格式为 JSP简介 12 1 2JSP语法概述 动作标签 Resource动作 20 forward动作标签告诉JSP页面从该指令处停止当前页面的继续执行 而转向其他的一个页面 当前页面后边的内容将不被执行 例如 该标签也可结合param指令 向要转到的页面传送信息 格式同include标签 JSP简介 12 1 2JSP语法概述 动作标签 Resource动作 21 plugin动作标签用于插入Applet或JavaBean到JSP页面 组件必须被下载到浏览器并且在客户端执行param元素可以用于发送参数到Applet或JavaBean 一个可重复使用的软件组件 实际上就是一个Java类 如 promptmessage当客户访问含该段代码的JSP文件时 如果客户端不支持applet 将导致下载Javaplug插件 出现客户选择是否下载插件的界面 用户下载安装后 就可以使用Java虚拟机加载执行Javaapplet小应用程序A class了fallback元素可用于指定组件失败时发送到客户端的错误信息字符串 12 1 2JSP语法概述 动作标签 Resource动作 JSP简介 22 JavaBean动作useBean动作标签格式为或者服务器将加载该bean类的一个对象setProperty动作标签设置bean的属性getProperty动作标签获取bean属性的值并输出 12 1 2JSP语法概述 动作标签 JavaBean动作 JSP简介 23 12 1 3JSP内置对象 JSP的内置对象在JSP页面的脚本元素中 有些不用声明就可以使用的对象包括out request response session application等out对象是javax servlet jsp JspWriter类的实例 JspWriter包含的方法大多数与java io PrintWriter类一样这个输出流对象用来向客户端输出数据 其可调用的方法如下表 JSP简介 24 12 1 3JSP内置对象 续 out对象可使用的方法 JSP简介 25 request对象是javax servlet http HttpServletRequest的实例客户每次请求页面时 JSP引擎创建一个request对象代表该请求封装了用户提交的信息 这些信息包括HTTP请求的请求行HTTP头信息体调用相应的方法可以获取封装的信息 最常用的方法是request getParameter param name 12 1 3JSP内置对象 续 request对象 JSP简介 26 12 1 3JSP内置对象 续 request对象的常用方法 JSP简介 27 response对象javax servlet http httpServletResponse的实例与request对象相对应 我们可以用response对象对客户的请求做出动态响应 向客户端发送数据 类似于HTTP请求 HTTP响应也由三个基本部分组成状态行 包括使用的协议以及状态代码 表示请求是否成功头 包含关于服务器和返回的文档的消息 例如服务器名称和文档类型等信息体使用这个对象的一些方法可以完成如下任务动态设置contentType属性页面重定向设置返回状态码等 JSP简介 12 1 3JSP内置对象 续 response对象 28 JSP简介 12 1 3JSP内置对象 续 resnponse对象的常用方法 29 会话的概念从一个客户打开浏览器连接到服务器的某个服务目录 到客户关闭浏览器离开该服务目录称为一个会话每个会话只对应于一个客户 并且可以跨多个页面session对象javax servlet http HttpSession的实例 对应于会话的概念用于在使用无状态连接协议 如HTTP 的情况下跟踪关于某个客户的信息 对识别客户是非常重要的在客户首次访问某服务目录中的任何一个JSP页面时创立 并且具有一个独一无二的Id号 直到客户关闭浏览器或这个session对象达到了最大生存时间 服务器端该客户的session对象才被取消调用相应的方法可以存储客户在访问各个页面期间提交的各种信息 比如姓名 编号等 JSP简介 12 1 3JSP内置对象 续 session对象 30 JSP简介 12 1 3JSP内置对象 续 session对象的常用方法 31 application对象javax servlet ServletContext的实例 比session对象的生存时期更长 服务器启动后 就产生了这个application对象 直到服务器关闭 该对象才被取消所有客户共享这个内置的application对象 所以任何客户对该对象中存储的数据的改变都会影响到其他客户 因此 在某些情况下 对该对象的操作需要同步处理 12 1 3JSP内置对象 续 application对象 JSP简介 32 12 1 3JSP内置对象 续 application对象的常用方法 JSP简介 33 12 1 4一个简单的JSP程序 在表单中输入一个自然数 计算从1到该数的累加和 JSP简介 34 12 1 4一个简单的JSP程序 续 计算连续和请输入一个自然数 的连续和是 JSP简介 35 12 1 4一个简单的JSP程序 续 例12 1运行结果 JSP简介 36 12 2JSP与JavaBean 指令标签和动作标签都可以嵌入代码 前者实际上是将代码插入行内 后者是将另一个页面的输出插入原来的页面这些方法无助于分离表示逻辑和业务逻辑 它们都造成了显著的可伸缩性问题 不利于开发人员分工合作JavaBean解决了这个问题 它将一系列相关的属性和方法组合在一个Java类中 构成了一个组件在JSP程序中 只要使用JavaBean动作标签调用该组件就可以了 37 12 2 1JavaBean简介 JavaBean其实就是Java类必须使用一组相当简单而又标准的设计和命名约定 因而调用它们的应用程序无须理解其内部工作原理 就可以很容易的使用JavaBean的方法JavaBean类的一个实例叫做一个bean通常我们将JavaBean文件取名为XxxBean JSP与JavaBean 38 12 2 1JavaBean简介 续 JavaBean的设计要求 对于JSP中使用的JavaBean 有三个设计要求必须拥有一个默认 无参数 的构造函数如果未声明任何构造函数 默认的构造函数会被自动创建JSP元素创建bean时 会调用默认构造函数类中不应该有公开的属性对于类内的属性 通常应该提供设置和获取其值的方法publicvoidsetXxx Objec typevalue 方法进行设置publicObject typegetXxx 方法进行获取 如果该属性是布尔类型的 允许使用publicbooleanisXxx 获取属性值如果某个属性只有getXxx或isXxx方法 叫做只读属性 JSP与JavaBean 39 可以使用JSP脚本元素访问类的任意方法访问bean的标准JSP动作只能使用那些遵循getXxx setXxx或isXxx setXxx命名约定的方法 12 2 1JavaBean简介 续 JSP对JavaBean的访问 JSP与JavaBean 40 设计一个描述员工信息的JavaBean类 包括编号 姓名 性别 工资 职务属性packagemyBeans publicclassEmployeeBean privateintid 0 salary 0 privateStringname none occupation none privatebooleanmale true publicintgetId returnid publicvoidsetId intid this id id publicStringgetName returnname publicvoidsetName Stringname this name name publicbooleanisMale returnmale publicvoidsetMale booleanmale this male male publicintgetSalary returnsalary publicvoidsetSalary intsalary this salary salary publicStringgetOccupation returnoccupation publicvoidsetOccupation Stringoccupation this occupation occupation JSP与JavaBean 12 2 1JavaBean简介 续 例12 2 41 EmployeeBean类满足成为JavaBean的条件没有公开的实例变量没有声明任何显式的构造函数 从而也就拥有了一个默认的无参数的构造函数它的属性的设置和获得都使用了标准的形式 JSP与JavaBean 12 2 1JavaBean简介 续 例12 2说明 42 12 2 2在JSP程序中使用JavaBean JavaBean类在Web应用中的部署不能放在含有JSP文件的目录中 而应该放在安装servlet的目录中 且一定要使用包单个JavaBean类的字节码文件的正确位置是webAppDir WEB INF classes PackageName 含有bean类的JAR文件应该放在webAppDir WEB INF lib 目录中在JSP页面中 可以使用三种JavaBean动作标签构建和操作JavaBean组件useBean动作标签setProperty动作标签getProperty动作标签 JSP与JavaBean 43 表示建立一个bean类的对象class指定的bean类的类名id指定该实例的名字scope属性表示bean的有效范围 有4个可选值PageRequestSessionApplication如果已经存在scope和id相同的实例 则访问现存的实例 JSP与JavaBean 12 2 2在JSP程序中使用JavaBean 续 建立JavaBean 44 Page默认值 有效范围是当前请求访问的JSP页面表示每次请求访问JSP页面时都会创建新的bean 并将其放在PageContext对象中servlet可以通过预定义变量pageContext的getAttribute方法访问它Request有效范围是当前的请求将bean放在HttpServletRequest对象中 如果已经存在 则调用之 可通过getAttribute方法访问在使用jsp include jsp forward 或者RequestDispatcher的include或forward方法时 两个JSP页面 或JSP页面和servlet将会共享该bean 12 2 2在JSP程序中使用JavaBean 续 建立JavaBean JSP与JavaBean 45 Session有效范围是客户的会话期间表示要将bean实例存储到与当前请求相关的HttpSession对象中如果这个客户在多个页面中相互链接 每个页面都包含有一个useBean标签 这些useBean标签中id的值相同 并且scope的值都是session 那么该客户在这些页面得到的bean是相同的一个Application表示要将bean实例存储在ServletContext中 ServletContext由Web应用中多个servlet和JSP页面共享所有客户共享这个bean 如果一个客户改变这个bean的某个属性的值 那么所有客户的这个bean的属性值都发生了变化这个bean直到服务器关闭才被取消 JSP与JavaBean 12 2 2在JSP程序中使用JavaBean 续 建立JavaBean 46 表示读取bean属性的值bean的名称由name项指定 与useBean标签的id项对应property项指定属性名称该语法只能读取在JavaBean类文件中有getXxx方法的属性也可用JSP脚本元素得到相同的结果 JSP与JavaBean 12 2 2在JSP程序中使用JavaBean 续 取得Bean的属性值 47 表示设置bean的属性值name项指定bean的名称 与useBean标签的id相对应property项指定属性名称value项指定属性的值该语法只能设置JavaBean类文件中有setXxx方法的属性也可以用JSP脚本元素得到相同的结果 JSP与JavaBean 12 2 2在JSP程序中使用JavaBean 续 设置Bean的属性值 48 建立JSP文件Ex12 3 jsp使用上节建立的EmployeeBean使用JavaBean初始值 名字是 编号是 是否男性 工资是 元职务是 修改后 名字是 编号是 是否男性 工资是 元职务是 12 2 2在JSP程序中使用JavaBean 续 例12 3 JSP与JavaBean 49 首先显示初始值 修改后 显示新值 JSP与JavaBean 12 2 2在JSP程序中使用JavaBean 续 例12 3运行结果 50 通过表单使用上节建立的EmployeeBean 使用JavaBean姓名 性别 男女编号 职务 工资 名字是 编号是 是否男性 工资是 元职务是 12 2 2在JSP程序中使用JavaBean 续 例12 4 JSP与JavaBean 51 12 2 2在JSP程序中使用JavaBean 续 例12 4运行结果 在表单中填入信息后 将显示填入的信息 JSP与JavaBean 52 12 3JSP标签库 JSP标签库除了使用JavaBean JSP还可以使用定制的标记 便于Web开发人员实现内容和功能的分离相对于使用JavaBean 用户自定义的标签库有如下优点beans不可以操纵JSP的内容 但标签库可以使用标签比bean可以用更加简单的形式完成复杂的功能 JSP通过指令标签中的taglib指令使用标签库 53 12 3JSP标签库 续 使用自定义标签比使用bean要复杂一些 它需要3个部分实现标签行为的标签处理类将XML元素名称映射到标签实现上的标签库描述文件 后缀名为tld 使用标签的JSP程序 JSP标签库 54 12 3 1标签处理类 标签处理类是一个Java类 用来告诉系统在JSP程序中遇到标签后应该做些什么必须实现javax servlet jsp tagext Tag接口通常通过扩展如下两类来实现javax servlet jsp tagext TagSupportjavax servlet jsp tagext BodyTagSupport JSP标签库 55 12 3 1标签处理类 续 TagSupport类及其doStartTag方法如果在taglib指令标签中没有属性或标签体 即标签的引用形式为 这样的标签类应该扩展TagSupport类该类实现Tag接口并包含基本标签所需的大量标准功能 只须重载改该类的doStartTag方法 这个方法中的代码将在页面请求时期遇到标签头时执行为了产生输出 doStartTag方法应该调用pageContext类变量的getOut方法获得JspWriter对象除此之外 调用pageContext的别的一些方法 还可以获得和请求相关的别的数据结构 例如getRequest getResponse getServletContext getSession如果标签没有体 doStartTag方法应该返回SKIP BODY常量 这将告诉系统忽略标签起始和结束之间的内容 JSP标签库 56 实现一个标签处理类 当JSP程序遇到相应标签 可插入一个100以内的随机整数和一行文本packagetags importjavax servlet jsp importjavax servlet jsp tagext importjava io publicclassExampleTagextendsTagSupport publicintdoStartTag try JspWriterout pageContext getOut out print int Math random 100 out print Myfirsttagtest catch IOExceptionioe System out println ErrorinExampleTag ioe return SKIP BODY 12 3 1标签处理类 续 例12 5 JSP标签库 57 12 3 2标签库描述文件 标签库描述文件定义了标签处理类后 接下来就是在服务器上为这个类命名 并将其和一个专门的XML标签名关联起来 通过标签库描述文件可以完成这个任务该文件包括一个XML版本声明 一个DOCTYPE声明 以及一个taglib容器元素重点是taglib容器元素中的tag元素 对于没有属性的标签 tag元素又应该包括以下四个子元素name 该元素定义了将在JSP文件中使用的tagname tag class 该元素给出了标签处理类的完整类名 包括包名 body content 对于没有体的标签应该取值为EMPTY description 一个简短的说明 JSP标签库 58 建立一个标签库描述文件 将上例建立的标签处理类和example名关联 将其存储在Chapter12 web WEB INF tlds example tld1 0example WEB INF tlds exampleexampletags ExampleTagemptyInsertarandominteger 12 3 2标签库描述文件 续 例12 6 JSP标签库 59 12 3 3在JSP文件中使用标签 已经有了标签处理类和标签库描述文件 接下来就可以在JSP文件中使用自定义的标签了在首次使用标签之前 需要使用taglib指令标签uri属性是一个引用标签库描述符文件的绝对或相对URLprefix属性指定一个将要在标签库描述符文件定义的标签名前面使用的前缀接下来就可以使用引用标签了 JSP标签库 60 建立一个JSP文件 使用刚刚建立的标签处理类和标签库描述文件使用标签 12 3 3在JSP文件中使用标签 续 例12 7 JSP标签库 61 每次按刷新后结果都是随机的 12 3 3在JSP文件中使用标签 续 例12 7运行结果 JSP标签库 62 12 3 4自定义标签库 有时我们需要在JSP文件中指定标签的一些属性例如我们希望能输出1000以内 而不是100以内的随机整数这时的引用形式应该是相应的需要修改标签处理类和标签库描述文件 JSP标签库 63 12 3 4自定义标签库 续 修改标签处理类NewExampleTag java 使用attribute1将导致调用标签处理类的setAttribute1方法 所以为了在Ex12 7中能够指定随机整数的范围 我们为属性取名为range 并修改标签处理类ExampleTag java为NewExampleTag java如下publicclassNewExampleTagextendsTagSupport protectedintrange 100 publicintdoStartTag try JspWriterout pageContext getOut out print int Math random range out print Tagtestwithattribute catch IOExceptionioe System out println ErrorinExampleTag ioe return SKIP BODY publicvoidsetRange Stringrange try this range Integer parseInt range catch NumberFormatExceptionnfe this range 100 JSP标签库 64 此外还需要修改标签库描述文件 在12 3 2节中介绍的tag元素中再增加attribute子元素 这个子元素又包括三个孙元素name 定义了属性名称 这个例子中 属性名为rangerequired 指出是否必须提供该属性 true是必须提供 false是可以不提供 这个例子中 range属性是可选的 如果不选 则默认为100 所以我们将其设定为falsertexprvalue 是一个可选孙元素 表示属性值是否可以是JSP表达式 以便在请求时期动态确定 默认状态下是false 表示只能是一个静态字符串 12 3 4自定义标签库 续 修改标签库描述文件NewExample tld JSP标签库 65 将刚刚建立的标签处理类和newexample名关联 将其存储在Chapter12 web WEB INF tlds NewExample tld1 0newexample WEB INF tlds NewExamplenewexampletags NewExampleTagemptyInsertarandomintegerwithinsomerangerangefalse 12 3 4自定义标签库 续 修改标签库描述文件newexample tld JSP标签库 66 最后 我们修改例12 7的Jsp文件如下 使用标签使用默认范围 1000以内 10000以内 12 3 4自定义标签库 续 修改JSP文件Ex12 7 new jsp JSP标签库 67 将会出现三个不同范围内的随机数 每次刷新后结果都将不同 12 3 4自定义标签库 续 Ex12 7 new jsp运行结果 JSP标签库 68 12 3 4自定义标签库 续 此外我们还可以在标签中使用标签体其形式为body body里的内容可以是JSP脚本元素 指令标签 动作标签这时需要修改标签处理类doStartTag方法不能再返回SKIP BODY 而应该返回EVAL BODY INCLUDE如果需要在读取body内容后进行一些处理 还需要重载doEndTag方法如果在标签内容显示完之后还想继续处理后面的页面内容 doEndTag方法应该返回EVAL PAGES 否则应该返回SKIP PAGEJSP标签库还可以实现嵌套标签 有兴趣的读者可以查找介绍JSP高级应用的教材 JSP标签库 69 12 4JSP与Servlet JSP与ServletJSP不过是编写Servlet的另一种不同的方式而已 JSP归根到底也要转化为Servlet二者各有所长Servlet擅长数据处理 如读取并检查数据 与数据库通信JSP擅长表示 即构建HTML来表示请求的结果通常一个大型的项目需要综合使用JSP与Servlet 70 通常 我们可以将一个Web应用程序的结构分为三个部分显示层 Presentationlayer 包括前端的HTML XML和Applet 主要用作用户的操作接口 负责让用户输入数据以及显示数据处理后的结果商业逻辑层 Businesslogiclayer 负责数据处理 连接数据库 产生数据等控制层 Controllayer 控制整个网站的流程这三个部分分别对应模型 视图 控制器 ModelViewController MVC 构架的视图 模型 控制器 12 4 1Web应用程序的一般结构 JSP与Servlet 71 SUN在JSP出现早期制定了两种规范 称为Model1和Model2 12 4 1Web应用程序的一般结构 续 两种规范 72 Model1设计模块 开发快速 适合于小型系统 其处理方式还可分为两种完全使用JSP来开发用户发出一个请求到服务器端 就是由JSP页面来接收处理 接着将执行结果响应到客户端由于JSP页面包括了大量的Java语法 程序可读性降低 不易维护 而且不利于重复利用使用JSP JavaBean将可重用的组件抽出来写成JavaBean 通过JSP调用JavaBean来存取数据和进行逻辑运算依然缺乏流程控制 每个JSP文件都要完成验证参数正确性 确认用户的身份权限 异常处理等任务 因此对将来的维护造成了困难 12 4 1Web应用程序的一般结构 续 Model1设计模块 JSP与Servlet 73 Model2MVC架构对于大型系统的开发 大多采取Model2MVC架构的开发模式MVC最主要的精神就是Model和View的分离 因而可以使网页设计师和程序员独立工作 互不影响Model代表的是应用程序的商业逻辑 通过JavaBean EJB等组件来实现 View是系统的显示接口 使用JSP来输出HTML Controller提供应用程序的处理过程控制 通常是servlet 12 4 1Web应用程序的一般结构 续 Model2MVC架构 JSP与Servlet 74 使用Model2MVC架构的优点使开发流程更为明确 由Controller控制整个流程能减少本需要JSP撰写的许多条件判断逻辑和流程控制的程序代码 因此便于维护目前有很多可供使用的MVC框架 由于Struts具有完整的文件 且开发源代码 因此获得了广泛的应用Model2MVC架构示意图 12 4 1Web应用程序的一般结构 续 Model2MVC架构 JSP与Servlet 75 12 4 2JSP与Servlet间的信息共享 JSP与Servlet间的信息共享在MVC方案中 由专门的servlet负责响应初始请求 这个servlet调用读取或创建数据的代码 将这些数据存放在bean中 并将请求转发到提供结果的JSP页面servlet可以将bean存储在HttpServletRequest对象中 对应jsp useBean动作标签的scope属性为requestHttpSession对象中 为同一客户保存结果 对应scope为sessionServletContext对象中 为整个Web应用保存结果 对应scope为application下面 我们以将bean存在HttpSession对象为例介绍 另外两种方式与此类似 只要改变servlet程序中setAttribute方法的执行者和useBean动作标签的scope属性就可以了 JSP与Servlet 76 importjava io importjavax servlet importjavax servlet http publicclassEmployeeServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException HttpSessionsession request getSession myBeans EmployeeBeanbean myBeans EmployeeBean session getAttribute employee if bean null bean newmyBeans EmployeeBean session setAttribute employee bean Stringname request getParameter name Stringid request getParameter id bean setName name bean setId Integer parseInt id Stringaddress ShowEmployee jsp RequestDispatcherdispatcher request getRequestDispatcher address dispatcher forward request response 12 4 2JSP与Servlet间的信息共享 续 例12 8 利用例12 2创建的EmployeeBean 通过将bean存储在HttpSession对象中实现JSP与Servlet间的信息共享 首先建立一个servlet文件EmployeeServlet java 负责响应初始请求 JSP与Servlet 77 再建立一个JSP文件ShowEmployee jsp负责显示结果 即员工的姓名和编号在session中传递变量员工姓名 员工编号 12 4 2JSP与Servlet间的信息共享 续 例12 8 JSP与Servlet 78 在浏览器中输入 结果为 在浏览器中输入 结果为 12 4 2JSP与Servlet间的信息共享 续 例12 8运行结果 JSP与Servlet 79 例12 8说明首先将输入参数输入到servlet中 为一个JavaBean对象的属性进行赋值然后将这个JavaBean对象放在session中 传递给JSP页面 这样就实现了Servlet和JSP的信息共享 如将数据存储在HttpServletRequest对象中 使用语法如下SomeClassvalue newSomeClass request setAttribute key value 如将数据存储在ServletContext对象中 使用语法如下 SomeClassvalue newSomeClass getServletContext setAttribute key value 在JSP文件中可以通过引用刚刚存储的对象 12 4 2JSP与Servlet间的信息共享 续 例12 8说明 JSP与Servlet 80 12 4 3JSP与Servlet间的控制传递 Model2MVC通常使用Servlet来做流程控制检查请求和设置bean需要进行大量的编程与JSP文档相比 在Servlet中更便于编程Servlet可以发送请求给JSP页另一个servlet静态的HTML页 该HTML页只能使用get请求 不能使用post请求 JSP与Servlet 81 RequestDispatcher接口ServletAPI中的一个接口允许将请求转交给JSP网页Servlet将数据的输出一并加入到原来的输出流中有两种方式可获得RequestDispatcher对象RequestDispatcherrd request getRequestDispatcher someURL 或者rd getServletContext getRequestDispatcher someURL 其中URL是相对于服务器根的URL 可以是JSP Servlet HTML使用forward方法将控制权完全传递给相关的URL使用include方法输出相关URL的内容 JSP与Servlet 12 4 3JSP与Servlet间的控制传递 续 RequestDispatcher接口 82 HttpServletResponse对象调用sendRedirect方法不能自动保留所有请求的数据将产生一个不同的最终URLRequestDispatcher类的forward方法可以保留请求的数据保留servlet的URL 12 4 3JSP与Servlet间的控制传递 续 两种重定向页面方法的区别 JSP与Servlet 83 从JSP中发送请求到别处使用动作标签 配合可将控制权转交给别处 并提供额外的参数其中page属性可以包含JSP表达式 使得目的地可以在请求时被计算出来 12 4 3JSP与Servlet间的控制传递 续 由JSP发送请求 JSP与Servlet 84 12 4 4Web应用程序举例 例12 9使用Model2MVC架构创建一个网上书店两个JSP页面Shopping jsp 显示网上书店所提供的书籍目录Checkout jsp 显示用户购买的商品清单和价格一个JavaBeanBookBean java 一个JavaBean 包括书名 出版社 作者 价格 购买数量一个servlet ShoppingServlet java 扮演流程控制的角色 具有增加购物车内容和结帐功能 JSP与Servlet 85 Shopping jsp为初始输入界面 显示商店所提供的书籍目录欢迎光临网络书店网络书店书名作者出版社价格数量 12 4 4Web应用程序举例 续 Shopping jsp JSP与Servlet 86 Java编程思想侯捷机械工业出版社99 12 4 4Web应用程序举例 续 Shopping jsp JSP与Servlet 87 JavaApplet编程实例何梅清华大学出版社36 12 4 4Web应用程序举例 续 Shopping jsp JSP与Servlet 88 JSP基础教程耿祥义清华大学出版社22 12 4 4Web应用程序举例 续 Shopping jsp JSP与Servlet 89 JSP高级开发与应用David科学出版社42 12 4 4Web应用程序举例 续 Shopping jsp JSP与Servlet 90 使用表单负责采集数据 并提交到指定的ShoppingServlet中进行处理 form 和 form 表单标签 用于声明表单 定义采集数据的范围 里面包含的数据将被提交到服务器表单中使用了文本框 隐藏域 提交按钮 例如 12 4 4Web应用程序举例 续 Shopping jsp说明 JSP与Servlet 91 ShoppingServlet java用来控制流程importjava io importjava util importjavax servlet importjavax servlet http publicclassShoppingServletextendsHttpServlet publicvoiddoPost HttpServletRequestreq HttpServletResponseres throwsServletException IOException HttpSessionsession req getSession VectorbuyList Vector session getAttribute shoppingcart Stringaction req getP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安达市2025-2026学年七年级下学期语文月考测试试卷
- 2025 年小升初温州市初一新生分班考试语文试卷(带答案解析)-(部编版)
- Python大模型基础与智能应用(微课版)课件第9章 云服务器微调训练大模型应用案例
- 2025年小学美术教师的教学总结3篇
- 2025数学个人教学任务总结范文
- 陕西省咸阳市三原县2024-2025学年八年级(下)期末物理试卷(含答案)
- 第十三章 三角形 单元试卷(含答案) 2025-2026学年人教版数学八年级上册
- 买卖介绍居间合同范本
- 购买养殖围网合同范本
- 房房出租合同范本
- 学校栏杆工程施工方案
- 餐厅转包合同范本
- 2024年锅炉操作工(技师)职业鉴定理论考试题库(含答案)
- 人力资源许可证制度(服务流程、服务协议、收费标准、信息发布审查和投诉处理)
- 外研版(2024)七年级上册英语Starter教学设计
- 湖南省益阳市安化县古楼乡龙马教学点2023-2024学年五年级下学期7月期末语文试题
- 考研保录取合同
- CJ∕T 453-2014 地铁隧道防淹门
- 2019译林版高中英语全七册单词总表
- 《湖北省安全生产条例》考试复习题库80题(含答案)
- 《义务教育语文课程标准》(2022年版)原文
评论
0/150
提交评论