private User user=new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
在dao层要进行数据库的交互,进行相关的查询,代码:
public List
List
try{
String hql ="from User as user where user.userName=? and user.userPwd=?";
userList=getHibernateTemplate().find(hql, new String[]{user.getUserName(),user.getUserPwd()});
}catch(RuntimeException ex){
logger.error("find by property name failed", ex);
throw new DAOException();
}
return userList;
}
这里对将传入的对象作为查询条件,将查询到的结果作为一个List集合返回到service层进行数据的加工。其中getHibernateTemplate().find()方法有多种重载方式,这里用的是getHibernateTemplate().find(HQLString,Object[]),这里第一个参数是HQL语句,可以有占位符,第二个参数是一个数组,用来设置语句中占位符的值。
service层代码:
public boolean checkLoginUserInfo(User user) throws ServiceException {
List
for(int i=0;i
if(userLogin!=null && !userLogin.getUserName().equals("")){
return true;
}
}
return false;
}
程序进行处理的是action,所以写一个类,继承自DispatchAction类,在里面写一个checkUserLogin()方法,由于web层依赖于service层,采用的是注入的方式,所以必须提供set()方法。代码如下:
private ManagerUserService managerUserService;
public void setManagerUserService(ManagerUserService managerUserService) {
this.managerUserService = managerUserService;
}
checkUserLogin()方法代码如下:
public ActionForward checkUserLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserLoginForm userLoginForm = (UserLoginForm)form;
HttpSession session = request.getSession(true);
boolean loginOk=managerUserService.checkLoginUserInfo(userLoginForm.getUser());
if(loginOk){
session.setAttribute("user", userLoginForm.getUser());
return mapping.findForward("loginsuccess");
}else{
return mapping.findForward("loginfailed");
}
}
最终返回值为Boolean类型,验证成功后将user对象放入session中,可以方便在下级页面当中显示当前登录用户。然后进行相应的转发。
struts-config.xml文件的action-mappings结点下添加如下配置:
当struts拦截到userlogin请求时,将其交由DelegatingActionProxy进行处理转发,applicationContext.xml文件里添加如下配置:
DelegatingActionProxy会根据配置文件里的依赖关系,最终将请求交由UserLoginAction处理。
前台登录页面中form的action属性应该是userLogin?dispatch=checkUserLogin,这里dispatch的值要和UserLoginAction验证登录的方法名相一致。用户名和密码表单的name值应当是UserLoginForm中User对象的相应属性。要不然ActionForm不会自动进行数据的封装!
由于在action中已经将登录时实例化的对象放到了Session当中:
session.setAttribute("user", userLoginForm.getUser());
所以当登录成功后,就可以在转发到的页面当中通过EL表达式${user.userName}获取当前登录的用户。
虽然说这只是一个简单的用户登录功能,但是出现的知识点很多,而且很容易出错!比如今天我就在前台的页面中写错了表单的name属性,导致在登录页面一点登录就错误,也没法下手设置断点进行调试……所以,在以后的项目中,一定要细心!