实现高可维护的有效途径是要实现软件的低耦合、高内聚。
软件设计分层的概念就是主要将软件各个部分进行解耦合设计,对于JSP动态开发技术而言,Java Bean是最基础的分层技术。Bean是一种软件组件,在JSP开发中经常用来封装逻辑、数据库操作等。
JavaBean的含义
编写一个JAVABean就是编写一个JAVA类(这类必须带有包名),这个类创建一个对象称为Bean,为了让JSP引擎(比如Tomca)知道这个bean的属性和方法,javaBean必须遵守以下规则:
1.如果类的成员变量的名字是name,那么为了获取或更改成员变量的值,类中必须提供两个方法:
getName(),用来获取属性name.
setName(),用来修改属性name
即方法的名字用get或set为前缀,后缀是首字母大写的成员变量的名字。
(成员变量不等于属性)
2.对于boolean类型的成员变量,允许使用is代替上面的get。不可以代替set
3.类中方法的访问权必须是public
4.如果有构造方法,必须提供一个无参数的构造方法。–即构造方法可以有也可以没有

在开发软件过程中,尽量把业务逻辑和表现层分开,从而达到完全解耦,这是软件分层设计的基本理念。在JSP中,经常利用JAVA BEAN实现核心的业务逻辑,而JSP页面用于表现层
JAVA BEAN形式上是纯JAVA代码,它是可以重复使用的一个组件。JSP页面只用于接收用户的输入以及显示处理之后的结果,因此不再需要在JSP页面中嵌入大量的JAVA代码,这不仅提高了系统的可维护性,而且方便工作的分工。
package com.bean;//jsp的类必须放在包里面
public class Rectangle {
private double length;
private double width;
public Rectangle(){ //创建了一个无参数的方法
length = 20;
width = 10;
}
public double getLength(){
return length;
}
public void setLength(double length){
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double computerArea(){
return length*width;
}
public double computerLength(){
return (length+width)*2;
}
}
成员变量不等于属性,有getXXX,setXXX就叫属性,属性是由get和set来决定的,get和set不一定是都要有,可以有一个、
如何用
在jsp页面中使用bean时,首先要使用page指令的import属性导入创建bean的类,例如
<%@ import="com.bean.*```%>

动作标记useBean
useBean动作标记是用来查找或者实例化一个javaBean
useBean标记的格式:
<jsp:useBean id=“bean的名字” class=“创建bean的类” scope=“bean的有效范围”/>
或<jsp:useBean id="bean的名字 type="创 建bean的类” scope=“bean的有效范围”/>
scope有四个范围,从小到大为:page|request|session|application"
在页面中导入相应的Bean类,并用jsp:useBean标签获取Bean对象
形式如下
<jsp:useBean
id="beanInstanceName"
scope="page|request|session|application"
{
class="package.class"|
type="package.class"|
class="package.class" type="package.class"|
beanName="{package.class|<%=expression%>}"
type="package.class"
}
</jsp:useBean>
不一定要用Import
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%-- <%@ page import="com.bean.*"> --%>这里已经注释掉了
<html>
<head>
<meta charset="UTF-8">
<title>example5_2.jsp</title>
</head>
<body>
<jsp:useBean id="rectangle" class="com.bean.Rectangle" scope="page"/>
<p>矩形的长是:<%=rectangle.getLength() %>
<p>矩形的宽是:<%=rectangle.getWidth() %>
<p>矩形的面积是:<%=rectangle.computerArea() %>
<p>矩形的周长是:<%=rectangle.computerLength() %>
</body>
</html>




出现的是这个

为什么:
这里有class表,里面有完整的包名,上面的就可以不用了。即可以不用Import
不可以只写上面的不写下面的。@page可以不写,但下面的uesBean必须要写。
class把包名写清楚,也可以在上面访问包,之后下面声明一下即用java声明一下。
动作标记 取得属性getProperty
使用getProperty动作标记可以获得bean的属性值。使用该动作标记之前,必须事先使用useBean动作标记获得一个相应的bean.getProperty动作标记语法格式如下:
< jsp:getProperty name="bean的name” property="bean的属性”/>
或
< jsp:getProperty name=“bean的name” property=“bean的属性”></ jsp:getProperty>
获得属性setProperty
1.用表达式或字符串设置bean的属性
(1)用表达式设置bean的属性
< jsp:setProperty name=“bean的名字” property=“bean的属性 value=”<%=expression%>"/>
(2)用字符串设置bean的属性
< jsp:setProperty name=“bean的名字” property="bean的属性” value=“字符串”/>
用表达式修改bean属性值时,表达式值的类型必须与bean的属性类型一致。用字符串修改bean属性值时,字符串会自动被转化为bean的属性类型,不能转化成功的就可能抛出NumberFormatException异常
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTFa-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="pig" class="com.bean.NewRectangle" scope="page"/>
<%pig.setLength(30);%>
<%pig.setWidth(20);%>
<p>矩形的长是:<jsp:getProperty property="length" name="pig"/>
<p>矩形的宽是:<jsp:getProperty property="width" name="pig"/>
<p>矩形的面积是:<jsp:getProperty property="rectangleArea" name="pig"/>
<p>矩形的周长是:<jsp:getProperty property="rectangleLength" name="pig"/>
</body>
</html>
6819

被折叠的 条评论
为什么被折叠?



