本章导读
主要内容
1.编写和使用javabean
2. 获取和修改Bean的属性
3. Bean的辅助类
4. jsp与Bean结合的简单例子
5.1 编写和使用javabean
JavaBean是一种符合JavaBean规范的Java类,它具有以下特点:
- 公共的无参构造方法
- getXXX()
- setXXX()
- 类中定义的方法方法访问权限都是public
- 类中必须有一个构造方法方法访问权限是public,无参的
下面是一个简单的JavaBean示例:
public class Person {
String name;
int age;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
5.1.2. 保存bean的字节码
在Tomcat目录下,JavaBean的字节码通常保存在WEB-INF/classes目录下。根据包名对应的路径,可以在该目录下建立相应的子目录。
5.1.3 创建与使用bean
- 使用bean
使用jsp动作标记usebean加载使用bean的格式如下:
<jsp:useBean id="beanName" class="packageName.className" scope="scopeType" />
其中,id为指定的JavaBean对象的名称,class为JavaBean类的全限定名,scope为JavaBean对象的作用域,可以取值为page(页面作用域)、request(请求作用域)、session(会话作用域)和application(应用程序作用域)。
例如,以下代码加载了一个名为user的JavaBean对象:
<jsp:useBean id="user" class="com.example.User" scope="session" />
这个JavaBean对象的类为com.example.User,作用域为会话作用域。在jsp页面中,可以通过${user}来访问这个JavaBean对象。
- bean的加载原理
当使用jsp:useBean标记加载JavaBean对象时,JSP容器会检查是否已经存在指定名称和作用域的JavaBean对象。如果存在,则直接返回该对象;如果不存在,则创建一个新的JavaBean对象,并将其存储到指定作用域中。
具体的加载过程如下:
- 检查指定名称和作用域的JavaBean对象是否已经存在。
- 如果存在,则返回该JavaBean对象。
- 如果不存在,则创建一个新的JavaBean对象。
- 根据指定作用域,将新创建的JavaBean对象存储到相应作用域中。
- 返回新创建的JavaBean对象。
- bean的有效范围和生命周期
JavaBean对象的有效范围和生命周期取决于所指定的作用域。常见的作用域有以下三种:
- page:JavaBean对象只在当前JSP页面中有效,一旦离开该页面就会被销毁。
- request:JavaBean对象在同一次HTTP请求中有效,即在同一次请求中的多个JSP页面或Servlet中都可以使用该对象。一旦请求结束,该对象就会被销毁。
- session:JavaBean对象在整个用户会话期间有效,即用户在浏览器中打开网站期间都可以使用该对象。一旦用户关闭浏览器或会话超时,该对象就会被销毁。
5.2 获取和修改bean的属性
5.2.1 getProperty动作标记
getProperty动作标记是JSP页面中用于获取JavaBean对象属性值的标记。它的语法格式为:
<jsp:getProperty name="beanName" property="propertyName"/>
其中name属性指定JavaBean对象的名称,property属性指定需要获取的属性名称。
5.2.2 setProperty动作标记
JSP页面中用于设置JavaBean对象属性值的标记。它的语法格式为:
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>
其中name属性指定JavaBean对象的名称,property属性指定需要设置的属性名称,value属性指定需要设置的属性值。
5.3 bean的辅助类
JavaBean是一种符合特定规范的Java类,它通常用于封装数据,提供对数据的访问和操作方法。在JSP页面中使用JavaBean对象时,可以通过辅助类来简化代码编写和管理。
辅助类通常包含用于创建和管理JavaBean对象的方法,例如创建、获取、销毁等方法。在JSP页面中使用辅助类可以更加方便地操作JavaBean对象,同时也可以减少代码冗余和错误。
例如,假设有一个名为PersonHelper的辅助类,其中包含创建和获取Person对象的方法:
public class PersonHelper {
public static Person createPerson() {
return new Person();
}
public static Person getPerson(HttpServletRequest request) {
HttpSession session = request.getSession();
Person person = (Person) session.getAttribute("person");
if(person == null) {
person = createPerson();
session.setAttribute("person", person);
}
return person;
}
}
在JSP页面中可以使用以下代码来创建和获取Person对象:
<jsp:useBean id="person" class="com.example.Person" scope="session" />
<%
Person person = PersonHelper.getPerson(request);
person.setName("John");
%>
在上面的代码中,首先使用<jsp:useBean>
标记创建名为person的JavaBean对象,并将其作用域设置为session。然后使用PersonHelper辅助类的getPerson方法获取Person对象,并设置其名称为John。
5.4 JSP与bean结合的简单例子
下面简单以一个例子来实现JSP和bean的结合
例:使用request bean(Triangle类负责创建)完成三角形的有关数据的处理。
例子中的jsp页面提供一个form表,单用户可以通过form表单将三角形的三边的长度提交给该页面用户,提交form表单后,jsp页面将计算三角形面积的任务交给一个request
bean去完成。
JavaBean
Triangle.java(负责创建request bean)
package red.star;
public class Triangle {
double sideA=-1,sideB=-1,sideC=-1;
String area;
boolean isTriangle;
public void setSideA(double a) {
sideA=a;
}
public double getSideA() {
return sideA;
}
public void setSideB(double b) {
sideB=b;
}
public double getSideB() {
return sideB;
}
public void setSideC(double c) {
sideC=c;
}
public double getSideC() {
return sideC;
}
public String getArea() {
double p=(sideA+sideB+sideC)/2.0;
if(isTriangle){
double result= Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
area = String.format("%.2f",result);//保留2位小数。
}
return area;
}
public boolean getIsTriangle(){
if(sideA<sideB+sideC&&sideB<sideA+sideC&&sideC<sideA+sideB)
isTriangle=true;
else
isTriangle=false;
return isTriangle;
}
}
JSP页面
example5_6.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
#textStyle{
font-family:宋体;font-size:36;color:blue
}
</style>
<% request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="triangle" class="red.star.Triangle" scope="request"/>
<HTML><body id = textStyle bgcolor=#ffccff>
<form action="" method="post" >
输入三角形三边:
边A:<input type=text name="sideA" id = textStyle value=0 size=5/>
边B:<input type=text name="sideB" id = textStyle value=0 size=5/>
边C:<input type=text name="sideC" id = textStyle value=0 size=5/>
<br><input type=submit id = textStyle value="提交"/>
</form>
<jsp:setProperty name="triangle" property="*"/>
三角形的三边是:
<jsp:getProperty name="triangle" property="sideA"/>,
<jsp:getProperty name="triangle" property="sideB"/>,
<jsp:getProperty name="triangle" property="sideC"/>.
<br><b>这三个边能构成一个三角形吗?<jsp:getProperty name="triangle" property="isTriangle"/>
<br>面积是:<jsp:getProperty name="triangle" property="area"/></b>
</body></HTML>
运行结果:
总结
JSP与JavaBean的结合可以方便地实现数据的封装和操作,提高代码的可维护性和可读性。JSP与JavaBean的结合是Web开发中常用的技术,掌握它们可以让我们更加高效地开发Web应用程序。