#JSP中的封装
public class User(){
private String username;
private String password;
public void setUsername(){
}
public void getUsername(){
}
public void getPassword(){
}
public void getInfo(){
}
}
* 作用:封装数据。
把数据封装到JavaBean中(JSP页面中完成的)
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
<jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean>
<jsp:setProperty property="username" name="u"/>
<jsp:setProperty property="password" name="u"/>
或者
<jsp:setProperty property="*" name="u"/>
<jsp:getProperty property="username" name="u"/>
<jsp:getProperty property="password" name="u"/>
#内省的方法
* 内省 (Introspector)
@Test
public void run() throws Exception{
User user = new User();
// 获取类的信息
BeanInfo info = Introspector.getBeanInfo(user.getClass());
// 获取属性的描述
PropertyDescriptor [] pds = info.getPropertyDescriptors();
// 循环遍历,获取属性的名称
for (PropertyDescriptor pd : pds) {
// System.out.println(pd.getName());
// 属性:
class
password
username
// 找到不为class 属性的方法。
// class没有写的方法。
if(!"class".equals(pd.getName())){
// 获取写的方法
Method m = pd.getWriteMethod();
m.invoke(user, "admin");
}
}
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
* 完成封装的实例
// 获取输入的数据
Map<String, String []> map = request.getParameterMap();
// 创建User对象
User user = new User();
// 自己编写封装数据的方法
try {
populate(map,user);
} catch (Exception e) {
e.printStackTrace();
}
// 完成数据的封装
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
/**
* 完成的数据
* @param map
* @param user
* @throws Exception
*/
private void populate(Map<String, String[]> map, User user) throws Exception {
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]);
}
}
}
#BeanUtils的使用方法# ##1.导入jar包##
- commons-beanutils
- commons-logging ##2.代码应用##
public class User{
private String username;
private String password;
public String getUsername(){
return username;
}
public String setUsername(String username){
this.username = username;
}
......
}
public class UserBeanUtilServlet extends HttpServlet{
private static final long serialVersionUID = 365288211;
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
//获取数据
Map<String, String[]>map = request.getParameterMap();
//创建User对象
User user = new User();
//完成封装
try{
BeanUtils.populate(user,map);
}catch(IllegalAccessException e){
e.printStackTrace();
}catch(InvocationTargetException e){
e.printStackTrace();
}
//打印
System.out.println(user.getUsername());
System.out.println(user.getPassword());
##Beanutils的限制##
/*某些类型不能直接转换
例如
- String => Date类
*/
- 解决方法
- 实现Converter接口。复写该方法,把字符串转换日期
- 在封装数据之前,进行注册。ConvertUtils.register(Converter converter, Class clazz)
public class MyDateConverter implements Converter{
public Object convert(Class clazz, Object obj){
String sDate = (String) obj;
SimpleDAteFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
Date date;
try{
date = sdf.parse(dDate);
}catch(){
}
return date;
}
}
/*
*使用自定义的转换器之前要先注册
*ConvertUtils.register(Converter converter, Class clazz)
*/
public class UserBeanUtilServlet extends HttpServlet{
private static final long serialVersionUID = 365288211;
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
//获取数据
Map<String, String[]>map = request.getParameterMap();
//创建User对象
User user = new User();
//完成注册
ConvertUtils.register(new MyDateConverter(),Date.class);
//完成封装
try{
BeanUtils.populate(user,map);
}catch(IllegalAccessException e){
e.printStackTrace();
}catch(InvocationTargetException e){
e.printStackTrace();
}
//打印
System.out.println(user.getUsername());
System.out.println(user.getPassword());