JSP实用教程----第五章jsp与javabean

系列文章目录

第五章jsp与javabean



前言

第五章将介绍JSP(JavaServer Pages)与JavaBean的结合使用。JSP是一种用于开发动态Web应用程序的Java技术,而JavaBean是一种用于封装数据和业务逻辑的Java类。通过结合使用JSP和JavaBean,可以实现更加灵活和可维护的Web应用程序。


一、编写和使用Javabean

1.1、编写JavaBean

编写Javabean就是编写一个Java的类,所以只要会写类就能编写一个Javabean。这个类创建的一个对象称为一个Javabean,简称bean,分配给bean的变量(成员变量),也称bean的属性。为了能让使用bean的应用程序构建工具(比如Tomcat服务器)使用JSP动作标记知道bean的属性和方法,只须在类的方法命名上遵守以下规则:
(1)如果类的成员变量,也称bean的属性的名字是xxx,那么为了获取或更改bean的属性的值,类中必须提供两个方法:

getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx.。

也就是方法的名字用get或set为前缀,后缀是将属性(成员变量)名字的首字母大写的字符序列。
(2)类中定义的方法的访问权限都必须是public的。
(3)类中定义的构造方法必须是public、无参数的。

1.2、保存bean的字节码

■ch5 \WEB-INF\classes目录下,根据包名对应的路径,在classes下再建立相应的子目录。比如,包名tom.jiafei对应的路径是tom\jiafei,那么在classes下建立子目录结构:tom\jiafei。
■将创建bean的字节码文件,比如Circle.class,复制到
\WEB-INF\classes\tom\jiafei
★为了调试程序方便,可以直接按照bean的包名将bean的源文件,比如Circle.java,保存在\WEB-INF\classes\tom\jiafei目录中,然后用命令行进入tom\jiafei的父目录classes(不要进入tom或jiafei目录)编译Circle.java:

classes>javac tom\jiafei\Circle.java

1.3、创建于使用bean

1.使用bean
使用JSP动作标记useBean加载使用bean,语法格式是:

<jsp:useBean id=“bean的名字” class=“创建bean的类” scope=“bean有效范围”/> 或
<jsp:useBean id=“bean的名字” class=“创建bean的类” scope= “bean有效范围”>
</jsp:useBean>

例如:

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“page” />

需要特别注意的是,其中的“创建bean的类”要带有包名,比如:
class=“tom.jiafei.Circle”

2.bean的加载原理
Tomcat服务器首先在Tomcat服务器管理的pageContent内置对象中查找是否含有这样的bean。如果这样的bean存在,Tomcat服务器就分配这样的bean给用户,如果在pageContent中没有查找到JSP动作标记要求的bean,就根据class指定的类创建一个bean,并将所创建的bean添加到pageContent中。通过Tomcat服务器创建bean的过程可以看出,首次创建一个新的bean需要用相应类的字节码文件创建对象,当某些JSP页面再需要同样的bean时,Tomcat服务器直接将pageContent中已经有的bean分配给JSP页面,提高了JSP使用bean的效率。
如果修改了字节码文件,必须重新启动Tomcat服务器才能使用新的字节码文件。

3.bean的有效范围和生命周期
3.1page bean
scope取值为page的bean称为page bean.

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“page” />

■page bean的有效范围是用户访问的当前页面,存活时间直到当前页面执行完毕。
■不同用户(浏览器)的page bean是互不相同的。也就是说,当两个用户同时访问一个JSP页面时,一个用户对自己page bean的属性的改变,不会影响到另一个用户。
3.2session bean

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“session” />

■session bean的有效范围是用户访问的Web服务目录下的各个页面,存活时间是用户的会话期(session)间。
■如果用户访问Web服务目录多个页面,那么每个页面id相同的session bean是同一个bean。
■不同用户(浏览器)的session bean是互不相同的.
3.3request bean

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“request” />

■ bean的有效范围是用户请求的当前页面,存活时间是从用户的请求到请求结束。request bean存活时间略长于page bean的存活时间,原因是Tomcat服务器认为页面执行完毕后,响应才算结束。
■不同用户的request bean的也是互不相同的。也就是说,当两个用户同时请求一个JSP页面时,一个用户对自己request bean的属性的改变,不会影响到另一个用户。
3.4request bean

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“request” />

■ bean的有效范围是用户请求的当前页面,存活时间是从用户的请求到请求结束。request bean存活时间略长于page bean的存活时间,原因是Tomcat服务器认为页面执行完毕后,响应才算结束。
■不同用户的request bean的也是互不相同的。也就是说,当两个用户同时请求一个JSP页面时,一个用户对自己request bean的属性的改变,不会影响到另一个用户。
3.5application bean

<jsp:useBean id=“circle” class=“tom.jiafei.Circle” scope=“application”
/>

■application bean的有效范围是当前Web服务目录下的各个页面,存活时间直到Tomcat服务器关闭。
■Tomcat服务器为访问Web服务目录的所有用户分配一个共享的bean,即不同用户的application bean也都是相同的一个。也就是说,任何一个用户对自己application bean的属性的改变,都会影响到其他的用户(不同Web服务目录的application bean互不相同)。
例如:
在这里插入图片描述
运行结果·:

二、获取和修改bean的属性

2.1 getProperty动作标记

使用getProperty动作标记可以获得bean的属性值,并将这个值用串的形式发送给用户的浏览器。

<jsp:getProperty name="bean的id " property=“bean的属性” /> 或
<jsp:getProperty name="bean的id " property=“bean的属性”>
</jsp:getProperty>

其中,name取值是bean的id,用来指定要获取哪个bean的属性的值,property取值是该bean的一个属性的名字。
当JSP页面使用getProperty标记获取属性xxx的值时,必须保证bean有相应的getXxx方法,即对方法的名字的命名有特殊的要求。

2.2 setProperty动作标记

(1)将bean属性的值设置为一个表达式的值或字符序列。

<jsp:setProperty name="bean的id " property=“bean的属性”
value= “<%=expression%>”/>

<jsp:setProperty name="bean的id " property=“bean的属性”
value= “字符序列” />

value给出的值的类型要和bean的属性的类型一致。
(2)通过HTTP表单的参数的值来设置bean的相应属性的值。
● 用form表单的所有参数的值设置bean相对应的属性值的使用格式如下:

<jsp:setProperty name= “bean的id的名字” property=“*” />

在setProperty标记的上述用法中不具体指定bean属性的值将对应form表单中哪个参数指定的值,系统会自动根据名字进行匹配对应,但要求bean属性的名字必须在form表单中有名称相同的参数名字相对应,Tomcat服务器会自动将参数的字符串值转换为bean相对应的属性的值
● 用form表单的某个参数的值设置bean的某个属性值的使用格式如下:

<jsp:setProperty name= “bean的名字” property=“属性名” param= “参数名” />

setProperty标记的上述用法具体指定了bean属性的值将对应表单中哪个参数名(param)指定的值,这种设置bean的属性值的方法,不要求property给出的bean属性的名字和param给出的参数名一致,即不要求bean属性的名字必须和表单中某个参数。
例如:

运行结果:
在这里插入图片描述

三、bean的辅助类

写一个创建bean的类时,除了需要用import语句引入JDK提供的类,可能还需要自己编写一些其他的类,只要将这样类的包名和bean类的包名一致即可(也可以和创建bean的类写在一个Java源文件中)。
使用一个bean列出Tomcat服务器驻留的计算机上某目录中特定扩展名的文件。创建bean的ListFile类,需要一个实现FilenameFilter接口的辅助类FileExtendName,该类可以帮助bean列出指定扩展名的文件。
在这里插入图片描述

四、JSP与bean结合的简单例子

4.1 三角形bean

例子5_6使用request bean(Triangle类负责创建)完成三角形的有关数据的处理。例子中的JSP页面提供一个form表单,用户可以通过form表单将三角形三边的长度提交给该页面。用户提交form表单后,JSP页面将计算三角形面积的任务交给一个request bean去完成。
代码:

运行结果:
在这里插入图片描述

4.2 四则运算bean

例子5_7使用session bean(CompuerBean类负责创建)完成四则运算。例子中的JSP页面提供一个form表单,用户可以通过form表单输入两个数,选择四则运算符号提交给该页面。用户提交form表单后,JSP页面将计算任务交给session bean去完成。
代码:

运行结果:
在这里插入图片描述

4.3 日历bean

例子5_9使用session bean(Calendar类负责创建)显示某月的日历。用户单击“下一月”,“上一月”超链接可以翻阅日历。也可以输入年份,选择月份,单击 form表单中的提交键查看日历。
在这里插入图片描述
运行结果:
在这里插入图片描述

总结

在使用JSP与JavaBean时,需要注意以下几点:

定义JavaBean:JavaBean需要符合一定的规范,包括有无参构造方法、私有属性和公共的getter和setter方法。

实例化JavaBean:在JSP页面中,可以使用jsp:useBean标签来实例化JavaBean对象,并指定其属性和作用域。

调用JavaBean:通过JSP页面中的表达式、脚本和标签,可以调用JavaBean的属性和方法,实现数据展示和业务逻辑处理。

数据传递:可以通过JavaBean将数据从后端传递到前端的JSP页面,或者从前端传递到后端进行处理。

表单处理:可以使用JavaBean来处理用户提交的表单数据,进行数据验证和处理,然后将结果返回给JSP页面。

通过合理地使用JSP与JavaBean的结合,可以开发出高效、可维护的Web应用程序。这种分离模式使得代码更加清晰,降低了耦合度,提高了开发效率和代码复用性。无论是初学者还是有经验的开发者,掌握JSP与JavaBean的结合使用将为您的Web开发带来更多的便利和灵活性。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,我们需要定义一个JavaBean,用于存储复数的实部和虚部: ```java public class Complex { private double real; private double imag; public Complex() {} public Complex(double real, double imag) { this.real = real; this.imag = imag; } public double getReal() { return real; } public void setReal(double real) { this.real = real; } public double getImag() { return imag; } public void setImag(double imag) { this.imag = imag; } } ``` 接下来,我们可以编写JSP页面来实现复数的加减乘除运算。以下是完整的JSP代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.text.DecimalFormat" %> <%@ page import="java.util.*" %> <%@ page import="javax.servlet.*" %> <%@ page import="javax.servlet.http.*" %> <%@ page import="com.example.Complex" %> <html> <head> <title>复数运算</title> </head> <body> <h1>复数运算</h1> <form method="post" action="complex.jsp"> <table border="0"> <tr> <td>第一个复数:</td> <td> <input type="text" name="real1" size="5"> + <input type="text" name="imag1" size="5">i </td> </tr> <tr> <td>第二个复数:</td> <td> <input type="text" name="real2" size="5"> + <input type="text" name="imag2" size="5">i </td> </tr> <tr> <td>运算符:</td> <td> <select name="operator"> <option value="+">+</option> <option value="-">-</option> <option value="*">*</option> <option value="/">/</option> </select> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="计算"> <input type="reset" value="重置"> </td> </tr> </table> </form> <% String real1 = request.getParameter("real1"); String imag1 = request.getParameter("imag1"); String real2 = request.getParameter("real2"); String imag2 = request.getParameter("imag2"); String operator = request.getParameter("operator"); Complex c1 = new Complex(Double.parseDouble(real1), Double.parseDouble(imag1)); Complex c2 = new Complex(Double.parseDouble(real2), Double.parseDouble(imag2)); Complex result = null; switch (operator) { case "+": result = new Complex(c1.getReal() + c2.getReal(), c1.getImag() + c2.getImag()); break; case "-": result = new Complex(c1.getReal() - c2.getReal(), c1.getImag() - c2.getImag()); break; case "*": result = new Complex(c1.getReal() * c2.getReal() - c1.getImag() * c2.getImag(), c1.getReal() * c2.getImag() + c1.getImag() * c2.getReal()); break; case "/": double denominator = c2.getReal() * c2.getReal() + c2.getImag() * c2.getImag(); result = new Complex((c1.getReal() * c2.getReal() + c1.getImag() * c2.getImag()) / denominator, (c1.getImag() * c2.getReal() - c1.getReal() * c2.getImag()) / denominator); break; } if (result != null) { DecimalFormat df = new DecimalFormat("#.##"); out.println("<p>" + real1 + " + " + imag1 + "i " + operator + " " + real2 + " + " + imag2 + "i = " + df.format(result.getReal()) + " + " + df.format(result.getImag()) + "i</p>"); } %> </body> </html> ``` 在这个JSP页面中,我们定义了一个表单,用户可以输入两个复数和运算符。当用户点击“计算”按钮时,我们会从表单中获取用户输入的值,并根据运算符进行相应的复数运算。最后,我们将结果输出到页面上。 注意,这个JSP页面并没有进行任何输入检查和异常处理,实际应用中需要根据具体情况进行改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值