您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
24_登录案例_BeanUtils介绍(成员变量与属性的区别)
发布时间:2022-08-14 22:31:02编辑:雪饮阅读()
特殊情况下BeanUtils的手动映射赋值
上次虽然使用了BeanUtils.populate完成了请求参数与数据实体类的字段映射赋值。这样的操作根据哥多年经验来说,实际上属性名应该是要遵循某种规则的。那么比如一些特殊的字段有可能是映射赋值失败的,这里我只说有可能,是因为按照我目前所了解还不能完全断定是或否。
那么遇到这种特殊情况下也是(或许)可以但是手动设置的。
src/User/Login.java:
package User;
import dao.UserDao;
import domain.User;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/User/Login")
public class Login extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User loginUser=new User();
System.out.println("username:"+request.getParameter("username"));
System.out.println("password:"+request.getParameter("password"));
try {
//准备数据
//手动数据映射
BeanUtils.setProperty(loginUser,"username",request.getParameter("username"));
BeanUtils.setProperty(loginUser,"password",request.getParameter("password"));
//登录
UserDao ud=new UserDao();
User loginedUser= ud.login(loginUser);
if(loginedUser==null){
//注意,这里是从doPost中转发出去的,所以接收方也该是dopost
request.getRequestDispatcher("/failServlet").forward(request,response);
}
else{
request.setAttribute("user",loginedUser);
request.getRequestDispatcher("/successServlet").forward(request,response);
}
System.out.println("loginedUser:"+loginedUser);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
成员变量与属性的区别
上面手动设置的属性或者上篇中自动映射赋值都是基于数据实体类中对于我们设置属性时候的key值来的,比如setUsername=》Username=》username,这里最后的username就是映射赋值时候对应的key,其值就是映射赋值时候对应的值。就是set或get后面的部分转换为小写的值才叫做属性。那么一般情况下成员变量和属性是相同的,但是二般情况下,比如setUsername方法体内写错了,写成了赋值给password而不是赋值给username成员变量。可能还有其它情况(我的直觉),反之getter也是相同的。
那么这里setter倒是不好演示,但是getter能演示的。
setter时候,貌似就算对应的setter方法不存在也不会报错。但是对于getter则会的。
那么BeanUtils获取属性如:
System.out.println("BeanUtils.getProperty获取的username:"+BeanUtils.getProperty(loginUser,"username"));
BeanUtils.getProperty(loginUser,"password2");
这里实际上由于password2没有在数据实体类中有对应的getPassword2方法。
所以这里获取username属性时可以正常输出,而获取这个password2时候会报错提示大概意思是这个password2对应的getter方法不存在。
如:
BeanUtils.getProperty获取的username:xy
java.lang.NoSuchMethodException: Unknown property 'password2' on class 'class domain.User'
所以这就是成员变量与属性的区别
JavaBean
JavaBean:标准的Java类
JavaBean要求:其实也就是Java标准类就是这样的规范
(1)类必须被public修饰
(2)必须提供空参构造
(3)成员变量必须使用private修饰
(4)提供公共的setter和getter方法
JavaBean功能:封装数据(其实也就是Java标准类也拥有这样的功能)
关键字词:登录,案例,BeanUtils,介绍