当前位置: 代码迷 >> Java Web开发 >> 上面代码是JAVA中登录验证模块,有几行代码不清楚,帮忙详细解释一上
  详细解决方案

上面代码是JAVA中登录验证模块,有几行代码不清楚,帮忙详细解释一上

热度:3030   发布时间:2013-02-25 21:07:58.0
下面代码是JAVA中登录验证模块,有几行代码不清楚,帮忙详细解释一下。
public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
AdminsDAO dao = new AdminsDAO();
ActionMessages messages = this.getMessages(request);
String md5password = MD5.MD5(loginForm.getPassword());
//管理员登录验证:
if(loginForm.getType().equals("admin"))
{
List list = dao.getSession().createQuery("from Admins where adminId = '"+loginForm.getUserId()+"' and password = '"+md5password+"' and type = '"+loginForm.getType()+"'").list();
if(list.size()==1)
{
Admins admin = (Admins)list.get(0);
request.getSession().setAttribute("user",admin);
dao.closeSession();
return mapping.findForward("success");
}
else
{
messages.add(Globals.ERROR_KEY,new ActionMessage("login.failed"));
this.addErrors(request, messages);
dao.closeSession();
return mapping.getInputForward();
}
}


//ActionMessages messages = this.getMessages(request);
这句话中的ActionMessages类是什么,获取ruquet的参数值是什么?
/*List list = dao.getSession().createQuery("from Admins where adminId = '"+loginForm.getUserId()+"' and password = '"+md5password+"' and type = '"+loginForm.getType()+"'").list();
这句话是不是调用AdminsDAO类的createQuery()方法查询数据库,还有getSession()和list在这里做什么用?

messages.add(Globals.ERROR_KEY,new ActionMessage("login.failed"));
这句话里面的两个参数是做什么的?



this.addErrors(request, messages);
还有这句话是什么意思?
------最佳解决方案--------------------------------------------------------

1)这句话中的ActionMessages类是什么,获取ruquet的参数值是什么?
 看看你是否定义了该类,this.getMessages(request);这句话说明LoginAction类里面有getMessage方法,该方法一request作为参数,不难想象该方法体是根据request来获取jsp页面的信息,并封装在ActionMessages类中返回,例如
    public ActionMessages getMessages(HttpServletRequest request){
                  ActionMessages am = new ActionMessages();
                  String info = request.getPareameter("xx");
                  am.setXX(Info);
                 return am
        }

2)这句话是不是调用AdminsDAO类的createQuery()方法查询数据库,还有getSession()和list在这里做什么用?
     不是调用了AdminDao的createQuery(),而是该类中有一个返回Session的方法getSession()通过此方法返回Session对象,然后调用Session对象的createQuery()。
     list()方法顾名思义,可以简单的理解为执行查询语句后返回的结果是list类型
3)messages.add(Globals.ERROR_KEY,new ActionMessage("login.failed"));
这句话里面的两个参数是做什么的?
  键值对,以Globals.ERROR_KEY作为键,以new ActionMessage("login.failed")这个对象作为该键对应的值

this.addErrors(request, messages);
还有这句话是什么意思?
把m错误信息保存起来,然后可以拿到jsp页面显示
------其他解决方案--------------------------------------------------------
这个应该是struts1+hibernate的代码吧,对struts1用得不多,用百度加关键字struts+ActionMessages可查到ActionMessages类的解释和使用。
而getSession()调用hibernate的session,用此session创建查询,list用于返回查询结果,注意这个代码存在sql注入漏洞。
------其他解决方案--------------------------------------------------------
  相关解决方案