读书人

求教一个用spring+hibernate整合的一个

发布时间: 2012-04-10 21:03:56 作者: rapoo

求教一个用spring+hibernate整合的一个登陆注册程序
是这样的,我登陆时从数据库里面查找有没有相对应的登陆用户,如有而且密码正确便登陆成功,否则登陆失败。注册也一样,先查找数据库里面有没有相对应的用户,有便注册失败,没有便注册成功并保存到数据库里面。
下面是login.jsp页面

HTML code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP 'login.jsp' starting page</title>        <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->    <script type="text/javascript">                function regidt(){            targetForm = document.forms[0];            targetForm.action="servlet/Register";        }    </script>  </head>    <body>  <%=request.getParameter("msg") %><br/>   <form action="servlet/Mylogin" method="post">           <input type="text" name="username" value="请输入用户名"/><br/>           <input type="password" name="password" value=""/><br/>           <input type="submit" value="登录"/> <input type="submit" value="注册" onclick="regidt()"/>   </form>  </body></html>

下面是我的web.xml配置文件
XML code
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"     xmlns="http://java.sun.com/xml/ns/j2ee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>WEB-INF/applicationContext.xml</param-value>    </context-param>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>  <servlet>        <servlet-name>Mylogin</servlet-name>    <servlet-class>servlet.Mylogin</servlet-class>  </servlet>  <servlet>        <servlet-name>Register</servlet-name>    <servlet-class>servlet.Register</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Mylogin</servlet-name>    <url-pattern>/servlet/Mylogin</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>Register</servlet-name>    <url-pattern>/servlet/Register</url-pattern>  </servlet-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

下面是UserDao接口
Java code
package dao;public interface UserDao {        public int login(String name,String password);        public User query(String name);        public int regiter(String name);        public void insert(User user);} 


下面是UserDaoImpl
Java code
package daoImpl;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import dao.UserDao;import entity.User;public class UserDaoImpl extends HibernateDaoSupport implements UserDao {        User user=null;    private String hql="from User u where u.username=?";    public int login(String name,String password) {                user=query(name);        if(user!=null&&user.getPassword().equals(password)){            System.out.println("登录成功");            return 1;                    }else{            System.out.println("登录失败");            return 0;                    }    }    public User query(String name) {                if(this.getHibernateTemplate().find(hql, name).size()==0){            user=null;        }else{            user=(User)this.getHibernateTemplate().find(hql, name).get(0);        }        return user;    }    public int regiter(String name) {        user=query(name);        if(user==null){            System.out.println("注册成功");//            insert(user);            return 1;        }else{            System.out.println("已经存在此用户名");            return 0;        }            }    public void insert(User user) {        this.getHibernateTemplate().save(user);            }}

下面是实体类:User
Java code
package entity;public class User {    Integer id;    String username;    String password;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

下面是User.hbm.xml
XML code
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="entity">  <class name="User" table="user">  <!--定义id-->     <id name="id" column="id">            <generator class="native"/>        </id>      <!--定义用户名-->      <property name="username"/>      <!--定义密码-->       <property name="password"/>  </class></hibernate-mapping>

下面是Mylogin类
Java code
public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                String msg="";        int i;        String username=request.getParameter("username");        String password=request.getParameter("password");        UserDao user = (UserDaoImpl)WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()).getBean("userDaoImpl");        i=user.login(username,password);        if(i==1){            msg="登录成功";            request.setAttribute("msg", msg);            request.getRequestDispatcher("/login.jsp").forward(request, response);        }else if(i==0){            msg="登录失败";            request.setAttribute("msg", msg);            request.getRequestDispatcher("/login.jsp").forward(request, response);        }                                } 


下面是Register类
Java code
public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        String msg="";        UserDao userI = (UserDaoImpl)WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()).getBean("userDaoImpl");        User user=new User();        int i;                String username=request.getParameter("username");        String password=request.getParameter("password");                i=userI.regiter(username);        if(i==1){            user.setUsername(username);            user.setPassword(password);            userI.insert(user);            msg="注册成功";            request.setAttribute("msg", msg);            request.getRequestDispatcher("/login.jsp").forward(request, response);                    }else if(i==0){            msg="已经存在此用户名,请重新注册";            request.setAttribute("msg", msg);            request.getRequestDispatcher("/login.jsp").forward(request, response);        }    }

下面是spring的配置文件applicationContext.xml
XML code
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">    <bean id="connect" class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>        <property name="url" value="jdbc:mysql://localhost:3306/spring_hibernate"/>        <property name="password" value="root"/>        <property name="username" value="root"/>    </bean>        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="dataSource">            <ref local="connect"/>        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">                    org.hibernate.dialect.MySQLDialect                </prop>            </props>        </property>                <property name="mappingResources">            <list>                <value>entity/User.hbm.xml</value>            </list>        </property>    </bean>        <bean id="userDaoImpl" class="daoImpl.UserDaoImpl">        <property name="sessionFactory">            <ref local="sessionFactory"/>        </property>    </bean>                        </beans>


每次报错是:
Java code
2011-10-2 9:30:50 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [Mylogin] in context with path [/spring_hibernate] threw exceptionjava.lang.NullPointerException    at daoImpl.UserDaoImpl.query(UserDaoImpl.java:29)    at daoImpl.UserDaoImpl.login(UserDaoImpl.java:15)    at servlet.Mylogin.doPost(Mylogin.java:73)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:284)    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:322)    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1684)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)    at java.lang.Thread.run(Thread.java:717) 



各位高手看看

[解决办法]
这样估计没人会看的,建议把你代码共享一下,然后再帮你改改
[解决办法]
查找用户为什么要返回User对象呢,如果有这个用用户 ,你在前台提示一下不就行了吗?你返回一个User对象没有多大作用,这儿建议你如下做:

private String hql="from User u where u.username=?";

改成: private String hql="from User AS u where u.username=?";



public User query(String name) {

if(this.getHibernateTemplate().find(hql, name).size()==0){
user=null;
}else{
user=(User)this.getHibernateTemplate().find(hql, name).get(0);
}
return user;
}


改成:

public boolean query(String name) {

if(this.getHibernateTemplate().find(hql, name)>0){

return true ;
}
return false ;
}

然后再在DAO中把

public User query(String name){}

改成:
public boolean query(String name){}

读书人网 >J2EE开发

热点推荐