1、了解JavaBean
JavaBean是Java类,它把实体对象和业务逻辑封装在一起,使JSP页面的业务逻辑更加清晰,JSP页面可直接操作JavaBean,改变了HTML网页代码与Java代码混乱的编写方式,提高了代码的可重用性,可读性和可维护性。
一个Java类要成为JavaBean在JSP页面中使用,必须满足下面三个条件:
1、JavaBean类必须具有不带参数的构造函数,在JSP元素创建JavaBean时会调用该构造函数。
2、JavaBean类应该没有任何公用的实例变量,访问类的属性必须通过属性的get或set方法进行,不允许直接访问实例变量。
3、通过getXxx和setXxx方法应该获得一致的值。例如,如果Car类存储了乘客的当前数量,就可能包含方法getNumPassengers和setNumPassengers。在这种情况下,就认为Car类具有一项属性,称为NumPassengers。
案例1:创建名称为Car的JavaBean类,用于封装汽车的乘客人数,Car类在案例com.example.bcxly包下。
package com.example.bcxly;
public class Car {
private int numPassengers;
public Car() {
numPassengers = 20;
}
public int getNumPassengers() {
return numPassengers;
}
public void setNumPassengers(int numPassengers) {
this.numPassengers = numPassengers;
}
}Car类拥有一个属性numPassengers,表示乘客人数。该属性在类构造函数内初始化,也可以调用setNumPassengers方法设置属性的值。
创建名称为car.jsp页面,该页面在项目案例webapp目录下。
<%@ page import="com.example.MyWeb.Car" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <div> <% //实例化car对象 Car car = new Car(); %> <div>汽车乘客:<%=car.getNumPassengers()%></div> </div> </body> </html>
2、 访问Bean的属性
在JSP页面使用JavaBean,最简单的语法是:
<jsp:useBean id=”car” class=” com.example.bcxly.Car”/>
这通常意味着“实例化class所指定的类对象,并将其绑定到由id指定名称的变量”。该语法等价于下面的JSP小脚本:
<% com.example.bcxly.Car myCar = new com.example.bcxly.Car() %>
案例2:创建名称为usecar的JSP页面,使用jsp:useBean语法获取Car实例的numPassengers属性。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <jsp:useBean id="tcar" class="com.example.bcxly.Car"/> <div>乘客人数:<jsp:getProperty name="tcar" property="numPassengers" /></div> </body> </html>
在JSP页面定义了Bean后,就可以使用jsp:getProperty访问它的属性,如案例2所示,jsp:getProperty标签的name属性值应和jsp:getProperty标签的id属性值相同,jsp:getProperty标签的property属性是Bean类的属性名称。
3、 设置Bean的属性
要修改Bean属性,通常可以使用jsp:setProperty,使用jsp:setProperty设置Bean属性通常分为两种情况。
一种情况是jsp:setProperty标签在jsp:useBean内,即下面的方式:
<jsp:useBean id="tcar" class="com.example.bcxly.Car"> <jsp:setProperty property="numPassengers" name="tcar" value=”20”/> </jsp:useBean>
这种设值方式,只有新建Bean实例时才会执行,如果时使用现有实例则不会执行jsp:setProperty。
jsp:setProperty标签的name属性的值与jsp:useBean标签id属性的值相同,即为实例化的Bean对象,property属性为要赋值的Bean对象属性名称,value属性为要赋值的Bean对象属性的值。
另外一种情况是jsp:setProperty标签在jsp:useBean标签外部,即下面的方式:
//标签已经关闭 <jsp:useBean id="tcar" class="com.example.bcxly.Car"/> //在useBean标签外 <jsp:setProperty property="numPassengers" value=”20”/>
这种在jsp:useBean标签外的设置Bean对象属性方式,jsp:setProperty一定会执行。
4、 JSP表单输入参数封装到Bean对象
JSP表单是个容器,用来收集客户端要提交给服务器端的信息,表单内一般包含一个或多个HTML表单控件,用户可以在表单控件内输入信息,表单的action 属性指定表单数据要提交的URL。当用户单击表单的提交按钮时,action指定的URL会被调用,表单数据会被提交到该URL。
JSP内置request对象的getParameter(name)方法可以获取名称为name的表单数据,给实例化的Bean对象属性赋值。当然我们也可以使用jsp:useBean、jsp:setProperty、jsp:getProperty标签将表单数据封装到实例化的Bean对象。
案例3:创建User类存储用户信息,创建login.jsp用户登录表单页面,页面包括用户名和登录密码两个表单元素(密码采用明文),然后再创建dologin.jsp页面,用于接收login.jsp提交的表单数据,实例化User类,将表单数据存储到User对象。
在项目Java目录bcxly包下创建bean包,在bean包下创建User类。
User.java代码。
package com.example.bean;
public class User {
// 用户名
public String name;
// 登录密码
public String psw;
public User() {
}
public String getName() {
return name;
}
public String getPsw() {
return psw;
}
public void setName(String name) {
this.name = name;
}
public void setPsw(String psw) {
this.psw = psw;
}
}User类有两个属性,一个属性是name,用于存储用户名,一个属性是psw,用于存储登录密码。
在项目webapp目录下,建立beansample目录,用于存储JavaBean技术的相关案例。在beansample目录建立login.jsp表单。
login.jsp表单代码文件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>用户登录页面</title> </head> <body> <form action="dologin.jsp" method="post"> <div>用户名:<input type="text" name="name"></div> <div>登录密码:<input type="text" name="psw"></div> <div><input type="submit" value="登录"></div> </form> </body> </html>
表单信息中的属性名称最好设置为JavaBean中的属性名称,这样就可以通过<jsp:setProperty property=”*”/> 的形式来接收所有参数。这种方式可以减少程序的代码量。如将表单用户名元素的name属性值设置为name,将表单登录密码元素的name属性值设置为psw。
在beansample目录建立dologin.jsp页面。
dologin.jsp代码文件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>处理登录请求</title> <jsp:useBean id="user" class="com.example.bean.User"> <jsp:setProperty name="user" property="*"/> </jsp:useBean> </head> <body> <div>用户名:<jsp:getProperty name="user" property="name"/></div> <div>用户名:<jsp:getProperty name="user" property="psw"/></div> </body> </html>
dologin.jsp页面的<jsp:useBean>标签实例化了JavaBean,然后通过<jsp:setProperty name="user" property="*"/>对JavaBean的所有属性进行赋值,使用这种方式要求表单元素的名称属性值与JavaBean的属性名称一致。