学习SSH问题总结

来源:互联网 发布:cmmi软件成熟度 编辑:程序博客网 时间:2024/04/30 15:30

昨天动手写了一个简单的ssh应用例子,用户登陆的功能,  遇到了很多问题? 汗!

环境:sqlserver 2005, myeclipse 8.5, tomcat 6.0, jdk 1.6

框架:struts1.2, spring2.0, hibernate3.0

 

1.java.lang.ClassNotFoundException: org.springframework.web.filter.Charact erEncodingFilter .......
我检查了web.xml 文件,原来是类名是错了,中间多了个空格, 可能是使用eclipse 开发中,光标乱跳导致的

2.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]:

在网上搜了下,原来是jar包冲突, 由于Spring中的“asm-2.2.3.jar”和Hibernate中的“asm.jar”包冲突。解决办法是移除Spring2.0 AOP Libraries中的“asm-2.2.3.jar”即可,展开web-info/lib 下,删除asm-2.2.3.jar 运行即可,终于看到了成功运行页面, ^0^

3. "operate" in production environments was not found on the java.library.path ......

我猜想是jsp 向 DispatchAction 发送请求是没有指定operate 参数, DispatchAction 不知道调用哪个方法来处理请求

我在页面的form 标签action  属性改为login.do?operate = login, form 没有指定method 表单提交方法(struts标签默认是post),试了下,还是报这个错

没办法,只好用了<html:hidden property="operate" value="login"/>,好象就可以了....?????

4.使用Hql 查询没有结果?执行出错?

我用控制台输出的sql 语句在数据库中执行是成功的,不知是什么原因

userdao:

    /**
     * 验证用户登陆信息
     * @param user
     * @return 存在返回实体类对象,不存在返回null
     */
    public UserInfo Validate(UserInfo user)
    {
        UserInfo u = null;
        Session session =  null;
        try
        {
            u = new UserInfo();
            session = this.getSession();
            Transaction tx = session.beginTransaction();
            String hql = "from UserInfo as u where u.uname = ? and u.password = ?";
            Query q = session.createQuery(hql);
            q.setParameter(0, user.getUname());
            q.setParameter(1, user.getPassword());
            List list = q.list();
            u = (UserInfo)q.list().get(0);
            tx.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            session.close();
        }
        return u;
    }

点击登陆后,会报错,index 0 ,size 0、好像是数组超出范围,

原因我在表单输入了错误的用户名和密码,这些数据在数据库中根本不存在,执行查询返回null,

再取值肯定会报错,正确的方法是在取值前做个决断,值是否为null,

        if(list.size() > 0)
            {
                u = (UserInfo)q.list().get(0);
            }


5.问题解决 ,进入下一步,输入错误的用户名和密码, 怎么也能进入主页面????

调试后发现,问题出现在这里,   u = new UserInfo(); 这个实体类实例化后,它有具有了初始值,所以它满足不

为null 的条件, 业务层决断返回的实体类对象不为null , 以为取到了值, 所以返回true , action 就返回了index.jsp


未完待续..............