JavaBean的初步认知

在JSP中使用JAVABEAN 假设JSP页面获取用户数据、与数据库交互,最后向用户显示结果。此JSP页面包括应用程序的业务和表示逻辑。业务逻辑包括与数据库交互的代码,而表示逻辑包括将结果格式化进行显示的代码。设计员可能不了解Java的任何知识,但由于页面上会嵌入Java代码,因而在开发表示逻辑时会遇到困难。同样,编写Java代码的程序员可能不熟悉在页面上创建用户界面的所有格式标记。JSP可以使用JavaBean将开发Web应用程序涉及的Web设计员和程序员的角色分开。 阅读详情

JavaBean的定义:

JavaBean是一个遵循特定写法的Java类;

JavaBean的特点:

  • 这个Java类必须具有一个无参的构造函数
  • 属性私有化。
  • 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

JavaBean的作用:

通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

JavaBean的属性:

  • JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
  • 属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
  • 一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。

JSP的三种封装数据的方式:

下面是一个User类,同时它也是一个JavaBean组件,接下来是实例代码:

package cn.study.bean;

import java.util.Date;

/**
 * User的JavaBean
 * @author 哎呦不错呦
 *
 */
public class User {
	private String username;
	private	String password;
	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;
	}
	
}

接下来写了一个login.jsp页面,在其中写了三个表单,分别用于jsp三种封装数据时的测试;

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>表单提交到JSP的页面</h3>
	<form action="/JSPStudy/bean/success.jsp" method="post">
		账号:<input type="text" name="username"/><br>
		密码:<input type="password" name="password"/><br>
		<input type="submit" value="登录"/>
	</form>
	
	<h3>表单提交到Servlet程序</h3>
	<form action="/JSPStudy/user" method="post">
		账号:<input type="text" name="username"/><br>
		密码:<input type="password" name="password"/><br>
		<input type="submit" value="登录"/>
	</form>
	
	<h3>表单提交到Servlet(BeanUtils)程序</h3>
	<form action="/JSPStudy/userBeanUtils" method="post">
		账号:<input type="text" name="username"/><br>
		密码:<input type="password" name="password"/><br>
		余额:<input type="text"	 name="money"/><br>
		生日:<input type="text" name="birthday"/><br>
		<input type="submit" value="登录"/>
	</form>
</body>
</html>

1.使用JavaBean组件的动作元素,即JSP标签,完成数据封装,它们分别为:

<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。

<jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。

<jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。

当我们使用JSP标签封装数据时,从ligin.jsp提交表单数据,跳转到success.jsp页面可以这样写:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="cn.study.bean.User"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>传统方式封装数据</h3>
	<%
		//获取请求参数,创建User对象,设置值
		//获取表单的内容
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//创建User对象,set设置值
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		
	%>
	<!-- <%=user.getUsername()+":"+user.getPassword() %> -->
	
	
    <!-- 下面是使用JSP动作标签完成数据封装-->
    <jsp:useBean id="u" class="cn.study.bean.User"></jsp:useBean>
    
    <!--    上述的id 是javabean组件的标识,可以任意取名   class属性中是javabean组件的完全路径名: 即上述User类的 包名+ 类名  -->
	<!-- 如果属性多可以使用下面一行代码色设置属性值   -->
	<!--	<jsp:setProperty property="*" name="u"/> -->


	<jsp:setProperty property="username" name="u"/>
	<jsp:setProperty property="password" name="u"/>
	
	<jsp:getProperty property="username" name="u"/>
	<jsp:getProperty property="password" name="u"/>
</body>
</html>

2.通过内省(Introspector) — JavaBean 完成数据封装

访问JavaBean属性的两种方式:

  • 直接调用bean的setXXX或getXXX方法。
  • 通过内省技术访问(java.beans包提供了内省的API)

什么是内省呢?

内省是基于反射的 ,通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

下面写了一个UserServlet类继承了HttpServlet,获取login.jsp中表单提交的数据,通过内省的方式进行封装;下面是实例代码;

package cn.study.servlet;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.study.bean.User;

/**
 * 获取请求参数,封装数据
 */
public class UserServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取请求参数,创建User对象,设置值
		/**
		 * //获取表单的内容
				String username = request.getParameter("username");
				String password = request.getParameter("password");
				//创建User对象,set设置值
				User user = new User();
				user.setUsername(username);
				user.setPassword(password);
		*/
		//获取输入的数据
		Map<String, String[]> map = request.getParameterMap();
		//创建User对象
		User user = new User();
		//自己编写封装数据的方法
		try {
			populate(user,map);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//完成数据封装
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
	}
	
	/**
	 * 完成数据的封装
	 * @param map
	 * @param user
	 * @throws Exception 
	 */
	private void populate(User user,Map<String, String[]> map) throws Exception {
		// TODO Auto-generated method stub
		//获取JavaBean类的信息
		BeanInfo info = Introspector.getBeanInfo(user.getClass());
		//获取属性描述
		PropertyDescriptor[] pds = info.getPropertyDescriptors();
		//循环遍历
		for (PropertyDescriptor pd : pds) {
			//获取属性的名称
			String name = pd.getName();
			//map的key
			if(map.containsKey(name)) {
				//获取属性的写的方法
				Method m = pd.getWriteMethod();
				//执行
				m.invoke(user, map.get(name)[0]);
			}
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

3.使用beanutils工具包完成数据封装(第二种方式封装数据我写的只能封装字符串数据,如要封装Double数据类型的画需要自己重新编写,或者直接使用第三种方式,使用beanutils工具包进行数据的封装)

在使用Beanutils工具包之前,需要在WEBINF/lib的目录中导入两个jar的包,才能进行数据的封装;如下图所示:

Beanutils工具包的常用类:

BeanUtils populate(Object bean, Map properties) 自定义转换器

ConvertUtils.regsiter(Converter convert, Class clazz) 传入日期类型的Date.class

如果属性是日期型数据,不能直接使用Beanutils工具包进行数据封装,注意:需要先把默认的字符串转换成日期型数据;过程分为以下两步:

1.编写一个类,实现Converter接口,重写该方法。把字符串转换成日期。

package cn.study.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.management.RuntimeErrorException;

import org.apache.commons.beanutils.Converter;

public class MyDateConverter implements Converter{
	/**
	 * 字符串转换成日期
	 */
	@Override
	public Object convert(Class type, Object value) {
		// TODO Auto-generated method stub
		//value表示输入的值
		//把输入的字符串,转换成日期,返回
		String dDate = (String) value;
		//把字符串转换成日期
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(dDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//throw new RuntimeException("转换日期错误");
		}
		return date;
	}

}

 

2.在封装数据之前进行注册。使用ConvertUtils类的 ConvertUtils.register(Converter converter, Class clazz)方法进行注册。 clazz的值是Date.class

package cn.study.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

import cn.study.bean.User;
import cn.study.utils.MyDateConverter;

/**
 * Servlet implementation class userBeanUtils
 * 使用BeanUtils完成数据封装
 */
public class userBeanUtils extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取数据
		Map<String, String[]> map = request.getParameterMap();
		//创建User对象
		User user = new User();
		
		//完成注册
		ConvertUtils.register(new MyDateConverter(), Date.class);
		
		//使用BeanUtils完成封装
		try {
			BeanUtils.populate(user, map);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//打印
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
		System.out.println(user.getMoney());
		System.out.println(user.getBirthday());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

参考: 传智播客  www.itcast.cn

在JSP中实现JAVABEAN 创建Web应用程序以连接数据库并检索作者名、地址、城市、州及邮政编码等与作者的详细信息。JavaBean组件应接受作者ID、驱动程序名及URL作为参数。信息要从authors表中检索。 阅读详情

相关推荐

JSPStudy:JSP学习的文件代码

JSPStudy JSP学习的文件代码 该代码包含了JSP以及service和servlet的使用,还有添加了JDBC数据库连接的项目练习 05是forward的代码 06文件夹是include的代码 07文件夹+UserEntity是javaBean的代码 08文件夹是out内置对象代码 09是request内置对象代码 10是response内置对象代码

Java bean 详解

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

qq_39273039的博客 1万+

基于Spring Boot在线远程考试系统的设计与实现

结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

ITbiyesheji的博客 1215

JavaBean

JavaBean

qq_58631644的博客 1202

SAP BAPI调用避坑指南:处理MD61/MD62计划独立需求时,这些参数和返回值你必须检查

本文详细解析了SAP BAPI调用中处理MD61/MD62计划独立需求的关键参数和返回值检查要点,包括版本控制、日期类型和删除标记等核心参数设置,以及常见错误排查和高级调试技巧,帮助开发者高效管理需求计划数据。

weixin_30316097的博客 610

【PLIO学习总结】laserMapping中的时间戳与状态更新逻辑

本文仅用于个人学习总结记录。如有错误,请批评指正。

larrydong的博客 1646

javaBean 练习

1、写一个javaBean 2、import 使用javaBean和javaBean使用javaBean index.jsp重定向到getl.jsp getl.jsp

tokyo97的博客 552

从零到一:YOLOv11高帧率模型在RDK X5上的ONNX转换与部署实战

本文详细介绍了将最新的YOLOv11高帧率模型部署到地平线RDK X5开发板的完整实战流程。内容涵盖从PyTorch模型导出ONNX、地平线工具链环境配置与模型量化编译,到编写高效的板端推理代码,并针对高帧率目标进行了后处理优化。通过实战避坑指南,帮助开发者在RDK X5上实现30FPS以上的实时目标检测。

weixin_29089057的博客 139

JAVA反射机制分析-------spring的通过反射创建bean实例对象以及属性注入的原理解析

JAVA反射机制 java反射机制是在运行状态中,对于任意一个类, 能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。 巧妙的利用java中的反射机制,能够帮助我们进行程序开发时达到意想不到...

拱白菜的猪的博客 1万+

基于SpringBoot 3 + Vue 3的全栈民宿预约管理系统设计与实现

文章将详细阐述系统的需求分析、架构设计、数据库设计、核心功能模块的实现(包括用户认证、房源管理、订单流程、支付集成等),并提供关键代码片段,最后对系统进行总结与展望。.requestMatchers("/api/admin/**").hasRole("ADMIN") // 管理员接口。.requestMatchers("/api/auth/**").permitAll() // 认证接口公开。.requestMatchers("/api/public/**").permitAll() // 公开资源。

2201_76125393的博客 272

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

JavaBean 初步(二) 之 JavaBean 的属性

Java bean 是一种可重复使用、且跨平台的软件组件。javabean可分为两种: 一种是有用户界面的(ui user interface)的java bean 。 还有一种是没有用户界面的,主要负责处理事务(如数据运算,操纵数据库的)java bean。 jsp通常访问的是最后一种java bean。 java bean 和jsp 一起使用的优点: 使得java代码和html代码分

稚枭天卓 2671

Redhawk: 为什么STA CHECK中switch cell覆盖率为0(STA file中switch control pin没有timing window)?

如题,做dynamic analysis时,不需要switch cell的timing window信息,但是做low power analysis需要做上电时switch cell的timing window就是必须的了,本文对switch cell control pin没有timing window (STA CHECK覆盖率为零)的这种现象做分析。

m0_61544122的博客 1197

Javabean初步学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1.Javabean定义2.Javabean规范3.Javabean的优点4.代码展示 前言 最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。特别是用于帮助厂家开发在综合开发环境(IDE)下使用的java软件部件。这些包括如Grid控件,用户可以将该部件拖放到开发环境中。从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB.

m0_62069822的博客 526

100天精通Python(爬虫篇)——第119天:基于selenium实现隐藏浏览器指纹特征(反反爬策略)

1. 什么是浏览器指纹? 2. 爬虫隐藏浏览器指纹特征的好处? 3. 手动打开浏览器指纹情况 4. 无界面模式打开浏览器 5. 脚本隐藏浏览器指纹特征

努力让自己发光,对的人才能迎着光而来 8万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JavaBean简介及使用

一、JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用,有以下的优点: 1.可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。

Joywy的专栏 23万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JavaBean的使用实例、原理

最近拿起之前看过的WEB书准备再翻看翻看,到了JavaBean这里觉得有必要写一点东西帮助刚接触的小白。一、JavaBean的含义       JavaBean是使用Java语言开发的一个可重用组件,能使Html代码与JAVA代码分离,并节省开发时间,简单的说就是一个包含了setter和getter以及至少一个无参构造方法的JAVA类,在框架中或其他方面也管它叫做PO,VO,TO等。例如:pack...

JUST DO IT,就是干IT! 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaBean详解

JavaBean的概念 JavaBean是一种可重复使用、且跨平台的软件组件。JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。 JSP与JavaBean搭配使用的优点 使得HTML与Java程序分离,这样便于维护代码。如果把所有的程序代码都写到JSP网页中,会使得代码繁杂,难以维护。 可以降低开发JSP网页人员对Java编程能

technologyleader的专栏 1万+

javaBean

javaBean 概述 起初,JavaBean的目的是为了将可以重复使用的代码进行打包,在传统的应用中,JavaBean主要用于实现一些可视化界面,如一个窗体、按钮、文本框等,这样的JavaBean称之可视化的JavaBean。随着技术的不断发展与项目的需求,目前JavaBean主要用于实现一此业务逻辑或封装一些业务对象,由于这样的JavaBean并没有可视化的界面,所以又称之为非可视化的Jav...

没有到不了的明天 7035

什么是JavaBean,JavaBean作用

JavaBean定义: 一个Java类满足以下2点 ,就可以称为JavaBean: public 修饰的类 ,public 无参构造 所有属性(如果有) 都是private,并且提供set/get (如果boolean 则get 可以替换成is) javaBean分两种 第一种:封装数据的JavaBean 这种JavaBean也被叫做实体类,一般来说对应的是数据库中的一张表,例如这样的↓: public class UserDemo { private int id; private Strin

qq_45895520的博客 1万+

JavaBean初步认识

JavaBean是一个非要重要的知识点在Java学习的过程中,它增加了代码的复用,让程序变得更加简单明了。本身是一个公共类,但是其中的属性都是。③JavaBean的每个属性最好是private的,每个属性有一对get和set方法,通过get和set方法来读取和设置属性。的,并且每一个属性都有对应的Get和Set方法,通过调用这两个方法,来进行属性值得输入输出,从而形成了一种安全的输入输出流。④JavaBean中可以增加业务方法,来进行数据库的访问操作。①JavaBean是一个public的类;...

weixin_44914079的博客 469

java bean property_JavaBean 初步(二) 之 JavaBean的属性

Java bean 是一种可重复使用、且跨平台的软件组件。javabean可分为两种:一种是有用户界面的(ui user interface)的java bean 。还有一种是没有用户界面的,主要负责处理事务(如数据运算,操纵数据库的)java bean。jsp通常访问的是最后一种java bean。java bean 和jsp 一起使用的优点:使得java代码和html代码分离,这样便于维护代码...

weixin_39605706的博客 597

JavaBean技术之JavaBean工具、规范和属性

一、JavaBean概述 JavaBean组件就是利用Java语言编写的组件,它好比一个封装好的容器,使用者并不知道其内部是如何构造的,但它却具有适应用户要求的功能,每个JavaBean都实现了一个特定的功能,通过合理地组织不同功能的JavaBean,可以快速生成一个全新的应用程序。如果将一个应用程序比做一间空房间,那么这些JavaBean就好比房间中的家具。 JavaBean的技术特点: 1.一次性编写 一个成功的JavaBean组件重用时不需要重新编写,开发者只需要根据需求修改和升级代码即可。 2.任何

qq_44111805的博客 3547
上一篇: JSP技术的学习总结
下一篇: 重识java反射
coder150806
博客等级 码龄8年 79粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值