SimpleBean.java:
package cn.mldn.lxh.demo ; public class SimpleBean { private String name ; private int age ; /* public SimpleBean(){ System.out.println("============ 一个新的实例化对象产生 ===========") ; } */ public void setName(String name){ System.out.println("----------------------") ; this.name = name ; } public void setAge(int age){ System.out.println("**********************8") ; this.age = age ; } public String getName(){ return this.name ; } public int getAge(){ return this.age ; } }
input_bean.html:
name,age和JavaBean里的名字一样
<html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <form action="input_bean.jsp" method="post"> 姓名:<input type="text" name="name"><br> 年龄:<input type="text" name="age"><br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> </body> </html>
input_bean.jsp:
第一种方法:
原始方式手工定义JavaBean的对象,之后用request接收所有的参数
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="cn.mldn.lxh.demo.SimpleBean"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ;
SimpleBean simple=new SimpleBean();
simple.setName(request.getParameter("name"));
simple.setAge(Integer.parseInt(request.getParameter("age")));
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
第二种方法,用标签完成
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% request.setCharacterEncoding("GBK") ; %>
<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean"/>
<jsp:setProperty name="simple" property="*"/>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年龄:<%=simple.getAge()%></h3>
</body>
</html>
发现,通过一个<jsp:setProperty>标签就可以完成所有请求参数的自动设置,而且可以自动将输入的String型变成int型的数据,这个标签的语法如下:
<jsp:setProperty>:表示操作指定JavaBean中的属性,里面定义了两个属性。
name:表示使用JavaBean中的id的定义
property:表示设置里面的属性内容,如 *, 表示与表单相匹配。
如果把input_bean.htm里的name改成name1,则name将不能被自动设置。
如果想让表单的参数可以设置到JavaBean中的话,需要让参数的名称与属性一致,但是还有一个概念。
在编写java的时候一致强调,类中的属性必须封装,封装之后的属性需要按照指定的格式编写对应的setter,getter方法。
使用这种操作,最终调用的是JavaBean中的setter方法,setter方法有严格的命名要求,所以要求参数名称与属性名称一致。
这种操作原理依然是反射机制,在java开发经典中一直强调通过反射,将指定属性名称的setter方法进行调用。
这种操作有个问题,如果要输入的内容是int型的话,则必须输入数字,否则会出现问题。
总结:
1. 通过JavaBean可以自动完成参数的设置问题
2. 完成的原理依靠的是反射机制