系列文章目录
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开发过程中非常重要的组件,它们的使用可以极大地提高开发效率和代码质量。