求教一个用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){}