JSP与JavaBean

本文介绍了JSP中如何编写和使用JavaBean,包括创建bean、设置和获取bean属性,以及辅助类的使用。JavaBean作为数据容器,常用于封装业务逻辑和数据,与JSP结合能实现页面与逻辑的解耦。示例展示了如何在JSP页面中创建bean、设置和获取属性,以及通过辅助类方便地访问bean数据。
摘要由CSDN通过智能技术生成

系列文章目录

5.1编写和使用JavaBean

5.2获取和修改bean的属性

5.3bean的辅助类

5.4jsp与bean结合的简单例子

5.5总结

5.1编写和使用JavaBean

5.1.1编写JavaBean

编写 JavaBean 指的是编写一个 Java 类,将其属性进行封装,提供公共的 getter、setter 方法,以及无参构造方法,并支持序列化,以便能够在网络传输中进行传递和持久化。

以下是一个简单的 JavaBean 类:

public class User {
  private String name;
  private int age;

  public User() {
  }

  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;
  }
}

我们可以将该类编译成字节码文件 User.class,然后在 JSP 页面中使用 useBean 和 setProperty 标签设置其属性值:

<jsp:useBean id="user" class="com.example.User" scope="page" />

<jsp:setProperty name="user" property="name" value="Tom" />
<jsp:setProperty name="user" property="age" value="20" />

然后在 JSP 页面中使用 getProperty 标签获取属性值,并在代码中调用该 JavaBean 的方法:

<p>Welcome, <%=user.getName()%>!</p>
<p>You are <%=user.getAge()%> years old.</p>

这个例子展示了 JSP 页面如何创建和使用 JavaBean,在页面中设置其属性值以及在代码中调用其方法进行业务逻辑处理。

5.1.2保存bean的字节码

保存 bean 的字节码指的是将编写好的 JavaBean 类文件编译成字节码文件,通常使用 javac 命令进行编译。编译后的字节码文件可以被其他程序引用和使用。

5.1.3创建与使用bean

创建和使用 bean 需要在 JSP 页面中定义该 bean 的 useBean 标签,通常包括 id、class 和 scope 属性。其中 id 属性指定 bean 对象的名称,class 属性指定 bean 的完整类名,scope 属性指定 bean 对象的作用域。使用 jsp:setProperty 标签设置 bean 的属性值,使用 jsp:getProperty 标签获取 bean 的属性值,并在代码中调用 bean 的方法进行业务逻辑处理。

5.2获取和修改bean的属性

5.2.1getproperty动作标记

JSP 页面中显示。该标记通常包含 name 和 property 两个属性,其中 name 属性指定 JavaBean 对象的名称,property 属性指定要获取的属性名称。 例如,以下是一个使用 getProperty 标记获取 JavaBean 属性值的示例:

<jsp:useBean id="user" class="com.example.User" scope="page" />

<p>Welcome, <%=user.getName()%>!</p>
<p>You are <%=user.getAge()%> years old.</p>

在上述示例中,我们使用 useBean 标签创建了一个名为 user 的 JavaBean 对象,并使用 <%=user.getName()%> 和 <%=user.getAge()%> 获取其属性值并在页面中显示。

5.2.2setproperty动作标记

 setProperty 动作标记用于设置 JavaBean 对象的属性值。该标记通常包括 name、property 和 value 三个属性,其中 name 属性指定 JavaBean 对象的名称,property 属性指定要设置的属性名称,value 属性指定要设置的属性值。 例如,以下是一个使用 setProperty 标记设置 JavaBean 属性值的示例:

<jsp:useBean id="user" class="com.example.User" scope="page" />

<jsp:setProperty name="user" property="name" value="Tom" />
<jsp:setProperty name="user" property="age" value="20" />

在上述示例中,我们使用 useBean 标记创建了一个名为 user 的 JavaBean 对象,并使用 setProperty 标记设置了其 name 和 age 属性值。

5.3bean的辅助类

在JSP中,可以使用JavaBean来封装业务逻辑和数据,使得JSP页面与Java代码解耦,可以更加方便地进行维护和开发。为了更方便地使用JavaBean,我们可以创建一个辅助类,它可以在JSP页面中直接使用,通过该类的方法来访问JavaBean中封装的数据和方法。 下面是一个简单的JSP中的JavaBean辅助类及示例代码:

package com.example.jsp.utils;

import com.example.jsp.entities.User;

import javax.servlet.http.HttpServletRequest;

/**
 * User 实体辅助类
 */
public class UserHelper {

    /**
     * 获取当前登录的用户
     *
     * @param request HttpServletRequest
     * @return 当前登录的用户,如果未登录则返回null
     */
    public static User getCurrentUser(HttpServletRequest request) {
        return (User) request.getSession().getAttribute("currentUser");
    }

    /**
     * 判断用户是否已登录
     *
     * @param request HttpServletRequest
     * @return true表示已登录,false表示未登录
     */
    public static boolean isLogin(HttpServletRequest request) {
        return getCurrentUser(request) != null;
    }

    /**
     * 获取用户的显示名称
     *
     * @param user User实体
     * @return 用户的显示名称,如果为空则返回用户名
     */
    public static String getDisplayName(User user) {
        if (user.getDisplayName() != null && !user.getDisplayName().isEmpty()) {
            return user.getDisplayName();
        }
        return user.getUsername();
    }
}

在JSP页面中使用该辅助类时,可以通过JSP的

<%@ page import="..." %> 

指令导入该类,然后直接使用该类的方法,例如:

<%@ page import="com.example.jsp.utils.UserHelper" %>
<%
// 判断用户是否已登录
if (UserHelper.isLogin(request)) {
    // 获取当前用户
    User currentUser = UserHelper.getCurrentUser(request);
    // 获取用户的显示名称
    String displayName = UserHelper.getDisplayName(currentUser);
    %>
    <p>当前登录用户: <%= displayName %> </p>
    <%
}
%>

在上面的示例中,我们首先导入了

UserHelper 

类,然后使用该类的

isLogin 

方法判断用户是否已登录。如果用户已经登录,则使用

getCurrentUser 

方法获取用户信息,再调用

getDisplayName 

方法获取用户的显示名称,最后将显示名称输出到页面上。如果用户未登录,则不显示任何信息。 这是一个简单的示例,实际上JavaBean辅助类的功能可以更加丰富,可以根据实际需要进行扩展,来方便地访问JavaBean中的数据和方法。

5.4jsp与bean结合的简单例子

下面是一个简单的JSP与JavaBean结合的示例。假设我们有一个名为

User 

的JavaBean,它封装了用户的信息,包括用户名、密码、Email等。我们可以创建一个JSP页面来展示用户的信息,并通过JavaBean来获取用户信息。 User.java:

package com.example.jsp.bean;

public class User {
    
    private String username;
    private String password;
    private String email;
    
    // 构造函数
    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }
    
    // getter和setter方法
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

user.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.example.jsp.bean.User" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户信息</title>
</head>
<body>
    <h1>用户信息</h1>
    <%-- 创建一个User对象 --%>
    <% User user = new User("Alice", "123456", "alice@example.com"); %>
    <p>用户名: <%= user.getUsername() %> </p>
    <p>邮箱: <%= user.getEmail() %> </p>
</body>
</html>

在上面的

user.jsp 

页面中,我们首先通过

<%@ page import="com.example.jsp.bean.User" %> 

导入了

User 

类,然后使用

<% User user = new User("Alice", "123456", "alice@example.com"); %> 

语句创建一个User对象,再通过

<%= user.getUsername() %> 

<%= user.getEmail() %> 

输出用户的用户名和邮箱。 这只是一个简单的示例,实际上我们可以将

User 

对象作为JSP页面的参数传递,或者将其保存在请求或会话中,以便在不同的页面中使用。通过这种方式,我们可以更加方便地使用JavaBean封装业务逻辑和数据,使得JSP页面与Java代码解耦,提高代码的可维护性和可重用性。

5.4.1三角形bean

“三角形Bean”是JSP页面中常见的一种Bean结构,它用于在页面中展示由多个对象组成的数据结构,比如一个订单中包含多个商品。通常,我们会用一个JavaBean来表示单个商品,然后将多个商品封装在一个“三角形Bean”中,以便在JSP页面中展示和处理。 下面是一个简单的“三角形Bean”示例,假设我们有一个名为

OrderItem 

的JavaBean,代表一个订单中的单个商品。然后我们创建一个名为

Order 

的三角形Bean,它包含多个

OrderItem 

对象: OrderItem.java:

package com.example.jsp.bean;

public class OrderItem {
    
    private String name;
    private double price;
    private int quantity;
    
    // 构造函数
    public OrderItem(String name, double price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }
    
    // getter和setter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

Order.java:

package com.example.jsp.bean;

import java.util.ArrayList;
import java.util.List;

public class Order {
    
    private List<OrderItem> items = new ArrayList<>();
    
    // 添加一个商品到订单中
    public void addItem(OrderItem item) {
        items.add(item);
    }
    
    // 获取订单中所有商品数量
    public int getSize() {
        return items.size();
    }
    
    // 获取订单中指定位置的商品
    public OrderItem getItem(int index) {
        return items.get(index);
    }
    
    // 获取订单中所有商品的总价
    public double getTotalPrice() {
        double total = 0;
        for (OrderItem item : items) {
            total += item.getPrice() * item.getQuantity();
        }
        return total;
    }
}

order.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.example.jsp.bean.OrderItem" %>
<%@ page import="com.example.jsp.bean.Order" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>订单详情</title>
</head>
<body>
    <h1>订单详情</h1>
    
    <%-- 创建一个订单对象,包含3个商品 --%>
    <% Order order = new Order(); %>
    <% order.addItem(new OrderItem("商品1", 10.0, 2)); %>
    <% order.addItem(new OrderItem("商品2", 20.0, 1)); %>
    <% order.addItem(new OrderItem("商品3", 30.0, 3)); %>
    
    <%-- 在页面中展示所有商品 --%>
    <table>
        <tr>
            <th>名称</th>
            <th>单价</th>
            <th>数量</th>
            <th>小计</th>
        </tr>
        <% for (int i = 0; i < order.getSize(); i++) { %>
            <% OrderItem item = order.getItem(i); %>
            <tr>
                <td><%= item.getName() %></td>
                <td><%= item.getPrice() %></td>
                <td><%= item.getQuantity() %></td>
                <td><%= item.getPrice() * item.getQuantity() %></td>
            </tr>
        <% } %>
        <tr>
            <td colspan="3">总价:</td>
            <td><%= order.getTotalPrice() %></td>
        </tr>
    </table>
</body>
</html>

在上面的

order.jsp 

页面中,我们首先通过

<%@ page import="com.example.jsp.bean.OrderItem" %> 

<%@ page import="com.example.jsp.bean.Order" %> 

导入了

OrderItem 

Order 

类,然后使用

<% Order order = new Order(); %> 

语句创建一个

Order 

对象,并通过

<% order.addItem(new OrderItem("商品1", 10.0, 2)); %> 

等语句添加三个商品到订单中。接着,我们通过

<% for (int i = 0; i < order.getSize(); i++) { %> 

循环展示所有商品信息,并计算出总价。注意,我们可以通过

<%= item.getPrice() * item.getQuantity() %> 

来计算每个商品的小计,这里使用了JSP中的EL表达式。 通过上面的示例,我们可以看到如何使用“三角形Bean”来封装多个对象的数据结构,并在JSP页面中展示和处理这些数据。这种结构可以大大简化JSP页面的编写,提高代码的可维护性和可读性。

总结


JSP是一种Java服务器端网页开发技术,它可以嵌入Java代码和动态网页标签,用来生成动态的网页内容。 JavaBean是一种Java语言编写的可重用组件,它提供了一种简单的封装机制,用来封装数据和业务逻辑。JavaBean通常被用作数据传输对象(DTO),用来传递和存储数据,同时也可以被用作业务逻辑对象(BO),用来处理业务逻辑。 JSP和JavaBean之间的关系是很密切的,JSP页面通常会使用JavaBean来获取和处理数据,然后生成动态的网页内容。我们可以使用<jsp:useBean>标签在JSP页面中声明JavaBean对象,并使用<jsp:setProperty>标签来设置JavaBean属性的值,使用<jsp:getProperty>标签来获取JavaBean属性的值。在JavaBean中,我们可以使用JavaBean的get和set方法来获取和设置属性的值。 JSP和JavaBean的优点是可以很好地将业务逻辑和显示逻辑分离,提高了代码的可重用性和可维护性。同时,它们也提供了一种有效的数据封装和数据传输机制,以便进行数据的安全传输和处理。 总之,JSP和JavaBean是Java Web开发过程中非常重要的组件,它们的使用可以极大地提高开发效率和代码质量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值