首页 中间件技术4_JSP

中间件技术4_JSP

举报
开通vip

中间件技术4_JSPnull第4章 JSP第4章 JSP本节内容本节内容了解什么是JSP 理解如果处理JSP页面 学习如何使用JSP构件 熟悉JSP预定义变量和JSP指令 在JSP中使用JavaBeans组件 使用JSP开发数据库应用程序 了解如何从JSP传递请求1. 简单的 JSP页面1. 简单的 JSP页面 CurrentTime Current time is 2. 如何处理JSP页面?2. 如何处理JSP页面?2. 如何处理JSP页面?2. 如何处理JSP页面?当第一次请求JSP网页时,该网页翻译成Servle...

中间件技术4_JSP
null第4章 JSP第4章 JSP本节内容本节内容了解什么是JSP 理解如果处理JSP页面 学习如何使用JSP构件 熟悉JSP预定义变量和JSP指令 在JSP中使用JavaBeans组件 使用JSP开发数据库应用程序 了解如何从JSP传递请求1. 简单的 JSP页面1. 简单的 JSP页面 CurrentTime Current time is <%= new java.util.Date() %> 2. 如何处理JSP页面?2. 如何处理JSP页面?2. 如何处理JSP页面?2. 如何处理JSP页面?当第一次请求JSP网页时,该网页翻译成Servlet。 如果没有修改该网页,则不翻译它。 为了保证第一个访问JSP网页的用户不受延时的影响,JSP开发者应该在安装完JSP网页后先测试一下。3. JSP 脚本构件3. JSP 脚本构件 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式 小脚本 声明 有三种类型的脚本构件,它们用于在生成的 servlet中插入Java代码:JSP表达式用于将Java表达式直接插入到输出流中,形式如下: <%= Java-expression %> 计算表达式的值,然后将其转换成字符串,传送给servlet输出流。 3. JSP 脚本构件3. JSP 脚本构件表达式 小脚本 声明 有三种类型的脚本构件,它们用于在生成的 servlet中插入Java代码:JSP小脚本可以将Java语句插入到 servlet 的 jspService 方法中,该方法有service方法调用。JSP小脚本具有如下形式: <% Java statement %> 3. JSP 脚本构件3. JSP 脚本构件表达式 小脚本 声明 有三种类型的脚本构件,它们用于在生成的 servlet中插入Java代码:JSP声明用于在 servlet 中声明方法或属性域,它具有如下形式: <%! Java method or field declaration %> 3. JSP 注释3. JSP 注释HTML 注释具有如下形式: 如果不想让注释出现在生成的 HTML 文件中,使用下列 JSP 注释: <%-- JSP Comment --%> 举例1:计算阶乘举例1:计算阶乘 Factorial   <% for (int i = 0; i <= 10; i++) { %> Factorial of <%= i %> is <%= computeFactorial(i) %>
<% } %>   <%! private long computeFactorial(int n) { if (n == 0) return 1; else return n * computeFactorial(n - 1); } %>   JSP 小脚本JSP 表达式JSP 声明程序说明程序说明如果程序第9行替换为下面种形式,有什么区别?<% int i; %> <% for (i=0 ; i <= 10; i++) { %><%!int i; %> <% for ( i=0 ; i <= 10; i++) { %>两个 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 都运行得很好,区别在于: 方案a)中,i是servlet中的一个局部变量; 方案b)中,当转换成servlet时,i是一个实例变量(属性)a)b)4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。代表客户的请求,是 HttpServletRequest的实例。 使用 request 可以访问请求参数和 HTTP 头,比如cookie和主机名。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。代表servlet的响应,是HttpServletResponse的实例。 使用response可以设置响应的类型,并向客户发送输出。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。代表字符串输出流,是由response.getWriter()方法得到的PrintWriter实例。 使用out可以向客户发送字符串内容。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。表示与请求关联的HttpSession对象,它可以由 request.getSession()方法得到。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。表示为所有客户存储持久数据的ServletContext 对象。 Session和application的不同之处是, session是捆绑到一个客户的,而 application 是为所有客户共享持久化数据的。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。代表页面的 ServletConfig 对象。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。表示PageContext对象。 PageContext是JSP中引入的一个新类,为访问许多网页属性提供了一个中心。4. JSP 预定义变量4. JSP 预定义变量request response out session application config pagecontext page 在JSP中也可以使用变量。JSP中提供八个预定义变量,可以与 JSP表达式和小脚本一起使用。这些变量也称为JSP隐含变量。page 是 this关键字的替代词。程序举例2:计算贷款支付额程序举例2:计算贷款支付额做一个HTML网页输入贷款总量,每月利息和还款年份。 按下Compute Loan Payment按钮后调用 JSP页面去计算和显示每月和总共要支付的金额。 ComputeLoan Compute Loan Payment  

Loan Amount
Annual Interest Rate
Number of Years

null预定义变量 ComputeLoan <% double loanAmount = Double.parseDouble( request.getParameter("loanAmount")); double annualInterestRate = Double.parseDouble( request.getParameter("annualInterestRate")); double numberOfYears = Integer.parseInt( request.getParameter("numberOfYears")); double monthlyInterestRate = annualInterestRate / 1200; double monthlyPayment = loanAmount * monthlyInterestRate / (1 - 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12)); double totalPayment = monthlyPayment * numberOfYears * 12; %> Loan Amount: <%= loanAmount %>
Annual Interest Rate: <%= annualInterestRate %>
Number of Years: <%= numberOfYears %>
Monthly Payment: <%= monthlyPayment %>
Total Payment: <%= totalPayment %>
程序说明程序说明如果将第7行的JSP小脚本 <% double loanAmount = Double.parseDouble( 替换成: <%! double loanAmount = Double.parseDouble( 会怎么样? 预定义变量(比如request、response和out)对应servlet中doGet和doPost方法中的局部变量。这些预定义变量必须出现在JSP小脚本中,而不是出现在JSP声明中。也就是说只能放在 “<%” 的后面。5. JSP 指令5. JSP 指令JSP指令是一种语句,提供关于 JSP 网页的JSP引擎信息。 例如,如果 JSP网页使用 java.lang 包之外另外一个包中的Java类,则必须使用JSP指令导入这个包。 <%@ page import= “java.util.*, java.text.*” %> 导入java.util.* 和 java.text.* 5. JSP 指令5. JSP 指令JSP指令的语法结构: <%@ directive attribute="value" %> 或 <%@ directive attribute1="value1" attribute2="value2" ... attributen="valuen" %> 5.可能的JSP指令5.可能的JSP指令page include tablib有三种JSP指令:page 可以为网页提供信息,比如,导入类和设置内容类型等。 指令page可以出现在 JSP文件的任何位置。5.可能的JSP指令5.可能的JSP指令page include tablibinclude 当网页翻译为 servlet时,可以将文件插入该servlet中。 指令 include 必须放置到文件应该插入的位置。有三种JSP指令:5.可能的JSP指令5.可能的JSP指令page include tablibtablib 可以定义自定义标记。有三种JSP指令:程序举例3: Loan类实现贷款功能程序举例3: Loan类实现贷款功能使用自定义的 Loan 类实现程序2的简化。 调用Loan类中定义的monthlyPayment() 和 totalPayment()静态方法完成计算导入一个类,这个类必须放在自定义的包中。null ComputeLoan Using the Loan Class <%@ page import = "chapter4.Loan" %> <% double loanAmount = Double.parseDouble( request.getParameter("loanAmount")); double annualInterestRate = Double.parseDouble( request.getParameter("annualInterestRate")); int numberOfYears = Integer.parseInt( request.getParameter("numberOfYears")); Loan loan = new Loan(annualInterestRate, numberOfYears, loanAmount); %> Loan Amount: <%= loanAmount %>
Annual Interest Rate: <%= annualInterestRate %>
Number of Years: <%= numberOfYears %>
Monthly Payment: <%= loan.monthlyPayment() %>
Total Payment: <%= loan.totalPayment() %>
导入一个自定义类Loan,这个类必须放在自定义的包中。Loan程序配置要点程序配置要点将ComputeLoan1.html和ComputeLoan1.jsp放入以下目录中: \Tomcat 6.0\webapps\lynweb\ 将Loan.class放入以下目录中: \Tomcat 6.0\webapps\lynweb\WEB-INF\classes\chapter4\5.指令page 的一些有用属性5.指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage指定该网页要导入的一个或多个包。 例如:指令 <%@ page import="java.util.*, java.text.*" %> 表示导入包java.util.* 和 java.text.* 5.指令page 的一些有用属性5.指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage为生成的 JSP 网页制定内容类型。 默认情况下, 对于JSP而言,内容类型是 text/html 对于servlet而言,内容类型是text/plain5.指令page 的一些有用属性5.指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage制定一个布尔值,指明网页是否会话的一部分。 默认情况下,session 的值为 true. 5. 指令page 的一些有用属性5. 指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage指定输出流缓冲区的大小。默认为 8KB。 例如,指令 <%@ page buffer="10KB" %> 指定输出流缓冲区的大小是10KB。 指令 <%@ page buffer="none" %> 指定不使用缓冲区。5. 指令page 的一些有用属性5. 指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage指定一个布尔值,指明当输出缓冲区满的时候,缓冲区是否自动刷新;或者指明当输出缓冲区溢出时,是否提出异常。 默认情况下,autoFlushe的值是 true 在这种情况下, buffer属性不能设置为 none5. 指令page 的一些有用属性5. 指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPage指定一个布尔值,指明是否可以同时访问网页而不破坏数据。 默认情况下,isThreadSafe的值为true。 如果将isThreadSafe设置为 false, 那么将 JSP 网页翻译成 servlet 时要实现 SingleThreadModel 接口。5. 指令page 的一些有用属性5. 指令page 的一些有用属性import contentType session buffer autoFlush isThreadSafe errorPage isErrorPageerrorPage 指定一个 JSP 网页,当前网页发生异常时,处理这个指定的页面。 比如,指令: <%@ page errorPage="HandleError.jsp" %> 指定在发生异常时,跳转到HandleError.jsp ·  isErrorPage 指定一个布尔值,指明该网页是否可以作为错误网页使用。默认情况下,这个值为false。程序举例4 :使用错误页面程序举例4 :使用错误页面本例提示用户输入一个整数值 ,显示该数的阶乘。如果用户错误的输入一个非整数值,则显示一个处理错误的页面。null FactorialInput
Enter an integer

null ComputeFactorial <%@ page import ="java.text.*" %> <%@ page errorPage = "FactorialInputError.jsp" %> <% NumberFormat format = NumberFormat.getNumberInstance(); int number = Integer.parseInt(request.getParameter("number")); %> Factorial of <%= number %> is <%= format.format(computeFactorial(number)) %>

<%! private long computeFactorial(int n) { if (n == 0) return 1; else return n * computeFactorial(n - 1); } %> Error page有可能抛出一个异常,异常被捕获,则跳转到错误页面。null FactorialInputError   Error -- Input is not an integer.   6. 在JSP中使用JavaBeans6. 在JSP中使用JavaBeans在上述两个程序中,都使用了computeFactorial方法计算阶乘。 可以定义一个包含该方法的类,并使这两个例子共享该类。 JSP允许在不同的网页中共享一个对象。 为了确保对象可以共享,对象所属的类必须是JavaBeans组件。 6. 在JSP中使用JavaBeans6. 在JSP中使用JavaBeans如果一个类具有下列三个特点,则这个类就是JavaBeans组件。 这个类是公用的 这个类有一个公用的无参构造方法 这个类是可序列化的 (在JSP中整个 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 不是必须的) 6. 在JSP中使用JavaBeans6. 在JSP中使用JavaBeans要创建JavaBeans组件的实例,使用下列语法结构: 除了scope属性指定对象范围之外,这种语法结构等价于: <% ClassName objectName = new ClassName() %>Scope 属性值Scope 属性值application session page request指定该对象绑定到应用程序。 该对象可以被应用程序的所有会话共享。Scope 属性值Scope 属性值application session page request指定该对象绑定到客户会话。 Web浏览器和Web服务器之间的客户会话是自动创建的。 当同一个浏览器的客户访问同一个服务器上的两个servlet或者两个JSP网页时,会话是相同的。Scope 属性值Scope 属性值application session page request这是默认的范围,指出对象限制在页面上。Scope 属性值Scope 属性值application session page request指定对象绑定到客户请求上。 JSP寻找对象的方法JSP寻找对象的方法处理下列指令时: JSP引擎首先查找具有相同id和scope的class对象。如果找到,使用已经存在的bean;如果找不到,则创建一个新的bean。创建bean的另一种语法结构创建bean的另一种语法结构下面是创建bean的另外一种语法结构: some statements 创建bean时执行其中的语句。如果在指定范围内以及存在相同ID和类名的bean,则不执行其中的语句。程序举例5: Testing Bean Scope程序举例5: Testing Bean Scope程序创建一个名为Count的JavaBeans组件,用它来统计访问JSP网页的次数。若多次打开窗口则返回不同的session号null <%@ page import = "chapter4.Count" %> TestBeanScope

Testing Bean Scope in JSP (Application)

<% count.increaseCount(); %> You are visitor number <%= count.getCount() %>
From host: <%= request.getRemoteHost() %> and session: <%= session.getId() %> package chapter4;   public class Count { private int count = 0;   /** Return count property */ public int getCount() { return count; }   /** Increase count */ public void increaseCount() { count++; } }程序说明程序说明scope="application" 指出bean活动在JSP引擎中,并且所有的客户都可以访问。 也就是说,所有客户都可以共享bean。 客户首次访问TestBeanScope.jsp时创建count对象,此后,每个客户访问TestBeanScope.jsp一次,计数器就加1。 null如果采用其他scope : session bean的范围将限制到用一浏览器的会话上。只有同一浏览器请求网页时,计数器才会增加。 page bean的范围将限制到该网页,任何其他网页都不能访问该bean,该网页计数器将一直显示为1。 request bean的范围将限制为客户的请求信息,并且网页上其他请求的计数器都显示为1.程序6:保存计数值程序6:保存计数值如果注销网页,计数器将从0开始重新计数。 将计数器值存储到随机读写文件或数据表中,可以解决这个问题。(CountUsingFile.java) 假设已经将计数器值存储到数据库中的Count表内,该Count表包含名为countValue的属性。 Count类被改为:nullpackage chapter4; import java.sql.*; public class Count { private int count = 0; private Statement statement = null; public Count() { initializeJdbc(); } /** Return count property */ public int getCount() { try { ResultSet rset = statement.executeQuery ("select countValue from Count"); rset.next(); count = rset.getInt(1); } catch (Exception ex) { ex.printStackTrace(); } return count; }Count.javanullpublic void increaseCount() { count++; try { statement.executeUpdate( "update Count set countValue = " + count); } catch (Exception ex) { ex.printStackTrace(); } } /** Initialize database connection */ public void initializeJdbc() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection( "jdbc:odbc:exampleMDBDataSource"); statement = connection.createStatement(); } catch (Exception ex) { ex.printStackTrace(); } } } 7. 读取和设置属性 7. 读取和设置属性JavaBeans组件提供访问和修改私有属性的读取和设置方法,可使用如下结构读取JSP中的属性: 这个语法结构等价于: <%= beanId.getSample() %> 7. 读取和设置属性7. 读取和设置属性可以使用下述语法结构设置 JSP 中的属性: 这个语法结构等价于: <% beanId.setSample("test1"); %> 7. 建立属性与输入参数的关联7. 建立属性与输入参数的关联通常属性与输入参数是关联的。 假设获取名为score的输入参数的值,并将该值赋予名为 score的JavaBeans属性,可以如下书写: <% double score = Double.parseDouble( request.getParameter("score")); %> 7. 建立属性与输入参数的关联7. 建立属性与输入参数的关联JSP提供了一种可以简化上述代码的语法结构: 当建立bean属性与输入参数的关联时,会自动执行简单的类型转换。 7. 与所有的属性关联7. 与所有的属性关联 通常,bean属性和参数具有相同的名字。 使用下列语句,可以方便地建立beanId中所有bean属性与同名参数之间的关联: 程序7 通过建立bean属性与输入参数关联程序7 通过建立bean属性与输入参数关联通过建立bean属性与输入参数关联,使用JavaBeans来简化程序3 ComputeLoan Using the Loan Class <%@ page import = "chapter4.Loan" %> Loan Amount: <%= loan.getLoanAmount() %>
Annual Interest Rate: <%= loan.getAnnualInterestRate() %>
Number of Years: <%= loan.getNumOfYears() %>
Monthly Payment: <%= loan.monthlyPayment() %>
Total Payment: <%= loan.totalPayment() %>
建立bean各个属性与输入参数值之间的关联,并自动进行类型转换。对Loan类创建一个名为loan的bean.null ComputeLoan Using the Loan Class <%@ page import = "chapter4.Loan" %> <% double loanAmount = Double.parseDouble( request.getParameter("loanAmount")); double annualInterestRate = Double.parseDouble( request.getParameter("annualInterestRate")); int numberOfYears = Integer.parseInt( request.getParameter("numberOfYears")); Loan loan = new Loan(annualInterestRate, numberOfYears, loanAmount); %> Loan Amount: <%= loanAmount %>
Annual Interest Rate: <%= annualInterestRate %>
Number of Years: <%= numberOfYears %>
Monthly Payment: <%= loan.monthlyPayment() %>
Total Payment: <%= loan.totalPayment() %>
对比前面 的程序3程序8 使用JavaBeans计算数的阶乘程序8 使用JavaBeans计算数的阶乘创建一个名为FactorialBean 的JavaBeans组件 ,用它来计算一个数字的阶乘。null <%@ page import = "chapter4.FactorialBean" %> FactorialBean

Compute Factorial Using a Bean

Enter new value:

Factorial of is <%@ page import="java.text.*" %> <% NumberFormat format = NumberFormat.getNumberInstance(); %> <%= format.format(factorialBeanId.getFactorial()) %> 建立bean各个属性与输入参数值之间的关联。这里是number属性。得到输入数字,第一次运行number初值为0nullpackage chatper4; public class FactorialBean { private int number; public int getNumber() { return number; }   public void setNumber(int newValue) { number = newValue; }   public long getFactorial() { long factorial = 1; for (int i = 1; i <= number; i++) factorial *= i; return factorial; } }GettingFactorialBean.java需要将class文件放 置到chapter4目录下。8. JSP网页中转交请求信息8. JSP网页中转交请求信息JSP提供了一种转交标记,可以把一个页面提交给另一个页面,语法结构如下: 实例学习9 浏览数据库中的表实例学习9 浏览数据库中的表当运行该程序时,第一个网页提示用户输入数据库的JDBC驱动器、URL、用户名和密码。实例学习9 浏览数据库中的表(续)实例学习9 浏览数据库中的表(续)登陆进入数据库后,可以选择要浏览的表,单击按钮则显示表的内容.实例学习9 浏览数据库中的表(续)实例学习9 浏览数据库中的表(续)DBBean.javaDBLogin.htmlBrowseTable.jspDBLoginInitialization.jspTable.jsp上机作业1上机作业1使用JSP实现乘法表上机作业2上机作业2使用JSP改写servlet那一章HTML窗体的例子(见第3章幻灯片45页,运行效果见49页)。 创建一个HTML窗体,与程序Student_Registration_From.html几乎完全相同,只是为了获取参数值,将action替换成/lynweb/JSP2.jsp 上机作业3上机作业3编写一个JSP程序,允许用户从HTML窗体中输入学生信息。对输入信息进行确认后,将输入的内容写入数据表中。要求写一个JavaBean,完成学生信息的访问其存储工作。 上机作业3上机作业3学生表中的字段包括: lastName,firstName,mi,telephone,email ,street,city,state,zip 均为字符串类型。 JavaBean起名为“StudentBean.java”,包含上述几个属性,以及对应属性的get/set方法,另外还包含数据库的打开和访问,以及学生信息存储等方法。

本文档为【中间件技术4_JSP】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_240534
暂无简介~
格式:ppt
大小:688KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-06-08
浏览量:15