《JavaBean》-----Java的内省机制

     在之前做过的项目中,都涉及到了前后台的交互,当我们将前台页面上获得的参数传递到后台的时候,我们可以利用很多方法,譬如用Ajax的表单提交,或者直接用JQuery封装的Ajax传递。当我们传递到后台的时候,我们还得一个个的接收参数,如果参数少,我们可以很快的解决,如果参数多,我们的代码量就大多了。在Java中,我们也可以用request对象的getParameter方法来接收参数,同理,也解决不了上面的问题。于是Java的内省机制就该出场了。

     1、什么是JavaBean

     Java的内省机制其实是基于JavaBean的,那么,什么是JavaBean哪?我们可以这样说,我们在项目中经常用到的Model可以充当JavaBean,其实我对于JavaBean的理解来说,JavaBean就是一个类,这个类中的一些代码满足这样一些规则。

      1.1、所有作为属性保存的成员变量私有化。

      1.2、有空参构造方法。

      1.3、属性由对应get/set方法。

      如果一个java类满足了上面的三种特性,那么我们可以将此java类叫做JavaBean。有了Javabean,我们就可以使用Java中的内省机制了。

      2、java中的内省机制——让后台的Model对象统一的接收表单提交过来的参数。

      我们分别创建一个Servlet、一个Demo.Jsp、一个JavaBean,代码如下

      Servlet代码

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		user u=new user();
		populate(request.getParameterMap(),u);
		System.out.println(u);
		
	}
	
	private void populate(Map<String,String[]> map,user u){
		try {
			Map<String,String[]> params=map;
			//1 获得 java Bean的描述信息
			BeanInfo info =Introspector.getBeanInfo(user.class);
			//2 获得 User中的属性信息
			PropertyDescriptor [] pds =info.getPropertyDescriptors();
			//3 遍历属性信息
			for (PropertyDescriptor pd : pds) {
				String[] param=params.get(pd.getName());
				if (param!=null && param.length>0) {
					pd.getWriteMethod().invoke(u, param[0]);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}<span style="font-family:KaiTi_GB2312;font-size:18px;">  
</span>

     JavaBean代码

public class user {
	private String name;
	private String password;
	public user(){
		
		super();
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "user [name=" + name + ", password=" + password + " ]";
	}

}

     Demo.jsp代码

<body>
    	<form action="/JavaBean/BServlet" method="post" >
    		用户名:<input type="text" name="name" /><br>
    		密码:<input type="password" name="password" /><br>
    	
    		<input type="submit" /><br>
    	</form>
 </body>

     我们首先访问Demo.Jsp,然后输入用户名和密码,当我们按下提交按钮之后,form中的name和password都存进了我们在后台实例化的user对象中(u),这样一来,我们就省去用request对象接收参数,然后分别给user对象u设置name和password了。这时候,如果表单上还有很多参数,比如说age、sex、birthday、等等,我们不用一一给他们赋值了,省去了很大的功夫。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值