登录系统-基于servlet+hibernate



 

 1.
新建一个java web项目,在步骤4中选择Hibernate3.2.5选项(如果没有建好数据库连接,可以在此建立连接):



 

 

这时netbeans自动生成hibernate.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/book</property>

    <property name="hibernate.connection.username">root</property>

    <property name="hibernate.connection.password">123456</property>

  </session-factory>

</hibernate-configuration>

这个文件在系统中添加了连接数据库的驱动程序以及所连接的数据库、用户名和密码。

2. 使用Hibernate逆向工程向导生成hibernate.reveng.xml文件,如图所示添加选中的数据表。

 

 

 

自动生成的文件:hibernate.reveng.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd " >

<hibernate-reverse-engineering>

  <schema-selection match-catalog="book"/>

  <table-filter match-name="admin"/>

</hibernate-reverse-engineering>

这个文件在系统中注册了数据库“book”和数据表“admin”。

3. 使用Hibernate向导生成Hibernate映射文件和POJOPlain Ordinary Java Object)文件:

 

 


 
 

生成的POJO文件是:

 

Admin.java

package javahibernate;

// Generated 2011-11-19 10:57:36 by Hibernate Tools 3.2.1.GA

 

/**

 * Admin generated by hbm2java

 */

public class Admin  implements java.io.Serializable {

     private int UId;

     private String UName;

     private String UPass;

   

public Admin() {

    }

    public Admin(int UId) {

        this.UId = UId;

    }

    public Admin(int UId, String UName, String UPass) {

       this.UId = UId;

       this.UName = UName;

       this.UPass = UPass;

    }

  

    public int getUId() {

        return this.UId;

    }

   

    public void setUId(int UId) {

        this.UId = UId;

    }

    public String getUName() {

        return this.UName;

    }

   

    public void setUName(String UName) {

        this.UName = UName;

    }

    public String getUPass() {

        return this.UPass;

    }

   

    public void setUPass(String UPass) {

        this.UPass = UPass;

    }

}

生成的Hibernate映射文件是:

Admin.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2011-11-19 10:57:36 by Hibernate Tools 3.2.1.GA -->

<hibernate-mapping>

    <class name="javahibernate.Admin" table="admin" catalog="book">

        <id name="UId" type="int">

            <column name="u_id" />

            <generator class="assigned" />

        </id>

        <property name="UName" type="string">

            <column name="u_Name" length="20" />

        </property>

        <property name="UPass" type="string">

            <column name="u_Pass" length="20" />

        </property>

    </class>

</hibernate-mapping>

 

此时Hibernate配置文件hibernate.cfg.xml中,在<session-factory>标记内增加了映射信息:

<mapping resource="javahibernate/Admin.hbm.xml"/>

这两个文件构成了hibernate框架的核心基础:关系数据库到对象的映射,通过映射我们可以在项目中使用面向对象的编程技术。

到此为止,基于Hibernate的持久化工作已准备就绪。所有的工作基本上是自动完成的。

4.添加一个servlet类:LoginServlet,在步骤3中选中“将信息添加到部署描述符”选项。如图:



 

LoginServlet.java文件加入如下代码:

package hibernate;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import org.hibernate.Criteria;

import org.hibernate.criterion.Expression;

import java.util.List;

 

public class LoginServlet extends HttpServlet {

 

    /**

     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.

     * @param request servlet request

     * @param response servlet response

     * @throws ServletException if a servlet-specific error occurs

     * @throws IOException if an I/O error occurs

     */

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        // 获取提交的用户名:

       String UserName = request.getParameter("logname");

       // 获取提交的密码:

       String Password = request.getParameter("logpwd");         

 

              //核对用户名和密码,决定是否通过登陆验证

       Configuration cfg=new Configuration().configure();

        SessionFactory sessionFactory=cfg.buildSessionFactory();

        Admin user=new Admin();       

        Session session1=sessionFactory.openSession();

        Criteria criteria=session1.createCriteria(Admin.class);

        criteria.add(Expression.eq("UName",UserName));

        criteria.add(Expression.eq("UPass",Password));

        List list=criteria.list();       

        session1.close();

        sessionFactory.close();

       if (list.size()>=1) {

            // 登录成功时,strUserName设成session变量UserName

            request.getSession(true).setAttribute("username", UserName);

            try {

                request.getRequestDispatcher("accesspage.jsp").forward(request,response);

            }catch (Throwable t) {

              getServletContext().log(t.getMessage());

            }

       } else {

            // 否则(记录集为空),表明失败:

            request.setAttribute("error", "用户名与密码不匹配,登录失败,请重试!");

            try {

              request.getRequestDispatcher("Login.jsp").forward(request, response);

            }

            catch (Throwable t) {

                getServletContext().log(t.getMessage());

            }

       }

   }

 

 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**

     * Handles the HTTP <code>GET</code> method.

     * @param request servlet request

     * @param response servlet response

     * @throws ServletException if a servlet-specific error occurs

     * @throws IOException if an I/O error occurs

     */

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        processRequest(request, response);

    }

 

    /**

     * Handles the HTTP <code>POST</code> method.

     * @param request servlet request

     * @param response servlet response

     * @throws ServletException if a servlet-specific error occurs

     * @throws IOException if an I/O error occurs

     */

    @Override

    protected void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        processRequest(request, response);

    }

 

    /**

     * Returns a short description of the servlet.

     * @return a String containing servlet description

     */

    @Override

    public String getServletInfo() {

        return "Short description";

    }// </editor-fold>

}

 

打开web.xml文件,可以看到如下关于servlet的部署设置:

<servlet>

        <servlet-name>LogServlet</servlet-name>

        <servlet-class>hibernate.LoginServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>LogServlet</servlet-name>

        <url-pattern>/LoginServlet</url-pattern>

    </servlet-mapping>

 

5.创建如下两个页面:

login.jsp

<%@ page pageEncoding="UTF-8" %>

<%@ page contentType="text/html; charset=gb2312" %>

<% request.setCharacterEncoding("gb2312"); %>

<%@ page language="java" %>

<html>  

         <head><title>登录网页</title></head>

       <body>

       <form method="POST" action="./LoginServlet">

 

       <table  >

           <tr>

             <td width="890" align="left" colspan="2">

              <b><font size="5">系统登录</font></b>

               <hr>

             </td>

           </tr>

            <% if (request.getAttribute("error") != null){ %>

       <tr>

              <td width=100% align=center colspan=4 height=36>

                   <font color=red><b><%=request.getAttribute("error")%></b></font>

              </td>

       </tr>

       <%

     }

       %>

           <tr>

             <td width="75" align="center">

               <p align="right">账号:</p>

             </td>

             <td width="809" align="center">

               <p align="left">

                <input type="text" name="logname" size="20"></td>

           </tr>

           <tr>

             <td width="75" align="center">

               <p align="right">密码:</p>

             </td>

             <td width="809" align="center">

               <p align="left">

               <input type="password" name="logpwd" size="20">

               <input type="submit" value="登录" name="loginButton"></td>

           </tr>

         </table>

       </form>

       </body>

       </html>

accesspage.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>登录成功</title>

    </head>

    <body>

        <h1>Hello

            <% if (request.getAttribute("username") != null){ %>       

              <font color=red>

                     <b>

                         <%=request.getAttribute("username")%>

                     </b>

                </font>  

            <%

                }

            %>

         !</h1>

    </body>

</html>

6.生成项目,并运行http://localhost:8080/login/login.jsp

只供学习交流使用,版权所有,请勿侵权。有任何疑问可以通过下文的邮件或QQ联系我本人。 这是我做的第一个Web网站,前台页面主要利用JSP、jQuery(数据验证),部分页面用到Ajax。控制转发采用Servlet,数据访问采用Hibernate(bean和dao是由Hibernate逆向工程自动生成)。 系统采用分架构,由上到下分为视图、控制转发、业务、服务、数据库访问。运用了一些基本设计模式,系统可扩展性还是非常良好的。 具体安装运行方法见readme.txt文件。附带了建表sql文件。最好先看下文档目录下的架构文档、需求概要文档以及几个类图,有助于快速理解整个项目。下面是readme.txt中的内容: 本项目是一个健身俱乐部系统,面向三类:会员(家庭会员和个人会员)、俱乐部经理、俱乐部服务员。 一、项目尚存在的缺陷: 1.上次支付日期,记录的是上次缴纳月供的时间。扣除月供由一个SQL存储过程完成。 2.Cookie记住密码 3.活动海报提供点击看大图功能 4.添加活动的日期用jQuery日期插件(datepicker) 5.为表格添加更多的CSS样式,让表格更美观点 6.某些页面应该提供分页显示(时间紧没处理) 7.由于是第一次做网站,且时间比较紧(这段时间期末考试),所以对于一些细节问题,如防止表单重复提交、某些页面的访问权限控制(基本的访问权限控制已经实现,但是有些比如像俱乐部服务员可以不登陆直接通过URL访问会员管理页面,而实际上是应该不允许的。实现也非常简单,使用过滤器对指定页面处理即可,有点累了,不再折腾了) 8.页面风格统一的问题,比如登录页面、注册页面和主页面的风格可能不太统一 PS: 上面几点是我个人目前认为的不足之处,具体的就请各位自己斟酌了。另外除了注册页面也非常详细的数据验证,其他页面如添加活动页面基本没有数据验证(不想重复劳动,代码基本非常类似). 代码中用到了较多的jQuery和部分Ajax(借助jQuery实现),在阅读代码的时候如果不熟悉jQuery和Ajax的话,还是先去稍微学习几个入门实例较好。 二、运行方式: a. 创建数据库:我用的是MySQL 5.1版本,不同版本之间可能存在不兼容问题,可能得对sql文件做少许修改。先去MySQL下(cmd或可视化工具)下创建一个数据库health_club。然后利用mysql命令导入sql文件: mysql -u root -p health_club < health_club.sql b. 将源代码下的整个文件夹复制到Tomcat的app目录下,我用的是Hibernate ORM框架,且我的MySQL密码是123456。如果你的MySQL密码不是123456,则必须去src目录下打开hibernate.cfg.xml,找到下面这行: 123456 修改密码为你的数据库对应密码就好了 c. 在浏览器中访问:http://localhost:8080/HealthClubProject/index.jsp 即可访问健身俱乐部系统主页 d. 当然也可以直接在MyEclipse中导入项目,我用的是MyEclipse Version 8.5 版权所有,只供学习交流使用,欢迎指正,有任何疑问可以通过下面方式联系我。 email feichexia@yahoo.com.cn QQ 735973629@qq.com
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值