Logo

郎哥编程

在JSP中使用JavaBean

2021-10-02 270

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的属性名称一致。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论