`

登录系统-基于servlet+hibernate分层架构

阅读更多



 本实验使用
servlet+hibernate
分层结构,目的是可以更好地进行ssh整合的准备,可以参考《登录系统-基于servlet+hibernate》和《登录系统-基于struts2的分层架构》两篇文章。

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.创建如图所示的包结构:



 

 

3.使用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”。

4. 使用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的持久化工作已准备就绪。所有的工作基本上是自动完成的。

5.在“book.common”包放置工具类用于建立获取SessionFactory和管理Session,在此添加HibernateUtil.java文件:

 

package book.common;

import org.hibernate.Session;

 import org.hibernate.SessionFactory;

 import org.hibernate.cfg.Configuration;

 

public class HibernateUtil {   

    private static Configuration configuration = new Configuration();

    private static SessionFactory sessionFactory = null;

   

    static{

        try{

            configuration.configure();

            sessionFactory = configuration.buildSessionFactory(); 

        }catch(Exception e){          

        }

    }

    public Session getSession(){

        Session session = null;

        try{

            session = sessionFactory.openSession();

        }catch(Exception e){           

}

        return session;

    }

    public void closeSession(Session session){

        try{

            if(null != session)

                session.close();

        }catch(Exception e){           

        }

    }

}

6.包“book.idao”放置数据访问接口,添加IUserDao接口文件:

package book.idao;

import book.model.User;

public interface IUserDao {

    User fineOne(String userName,String userPassword);

}

7. 包“book.dao”放置数据访问类,添加UserDao.java文件,实现IUserDao接口,完成数据访问:

package book.dao;

 

import book.common.DB_Conn;

import book.model.User;

import book.idao.IUserDao;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class UserDao implements IUserDao{

      

    //创建公用数据库连接类对象

    DB_Conn db_conn=new DB_Conn();

    //通过用户名称获取用户信息

    @Override

    public User fineOne(String username, String password) {

       db_conn.ConnectDB();

       ResultSet rs = null;

       try {

            String sql = "select * from admin where u_Name ='"

                     + username + "' and u_Pass='" + password + "'";

            rs = db_conn.sm.executeQuery(sql);        // 执行sql语句

            User user = null;

            if (rs.next()) {

                user = new User();                     

              user.setUsername(username);

              user.setPassword(rs.getString("u_Pass"));                       

              return user;

            }

            return user;

        }catch (SQLException SqlE) {

            return null;

        }catch (Exception E) {

            return null;

       }finally {

            // 关闭连接,释放数据库资源:

            db_conn.CloseDB();

       }

    }    

}

8.在包“book.iservice”中放置数据的逻辑访问接口,在此添加IUserService.java接口文件:

package book.iservice;

import book.model.User;

public interface IUserService {

    User findUserByNameAndPassword(String userName,String userPassword);

}

9. 包“book.service”放置数据逻辑访问类,添加UserService.java文件,实现IUserService,调用UserDao类的功能,完成对数据逻辑访问:

package book.service;

import book.iservice.IUserService;

import book.model.User;

import book.idao.IUserDao;

import book.dao.UserDao;

public class UserService implements IUserService{

    private IUserDao userDao=new UserDao();

    @Override

    public User findUserByNameAndPassword(String userName,String userPassword){

        return userDao.fineOne(userName, userPassword);

    }   

}

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

 

 




 
 

 

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

package book.servlet;

 

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import book.iservice.IUserService;

import book.service.UserService;

import book.model.Admin;

public class LoginServlet extends HttpServlet {

    private IUserService userService=new UserService();

    Admin user=null;

   

    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");

        user=userService.findUserByNameAndPassword(UserName, Password);

        if (user.getUName() != null) {

            request.setAttribute("username", user.getUName());

            try {

                request.getRequestDispatcher("index.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());

            }

        }

    }

11. 创建如下两个页面:

Login.jsp:

<%@ page pageEncoding="gb2312" %>

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

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

<%@ page language="java" %>

<html>  

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

       <body>

       <form method="POST" action="UserAction.action">

 

       <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="userName" 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="userPassword" size="20">

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

           </tr>

         </table>

       </form>

       </body>

       </html>

在这个页面中,下面的form标记语句:

<form method="POST" action="UserAction.action">

表示该页面提交一个名为:"UserAction"action,注意和struts.xml文件中的actionname相对应。

index.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 World!</h1>

        <div id="content">

            <center>

                <br/><%=request.getAttribute("msg")%>

            </center>

        </div>

    </body>

</html>

该页面的标记语句:

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

表示接收来自actionmsg字符串。

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

 

 

   

 

 

0
0
分享到:
评论

相关推荐

    基于Servlet+JSP+Struts2+Hibernate4开发的房屋租赁系统.zip

    综上所述,"基于Servlet+JSP+Struts2+Hibernate4开发的房屋租赁系统"是一个综合运用多种Java Web技术的实践项目,它体现了Java EE开发中的分层架构思想,对于学习和理解Web应用开发具有很高的参考价值。通过这个项目...

    使用struts+spring+hibernate+Mysql架构的在线订餐系统!!!

    本系统采用的是经典的“Struts+Spring+Hibernate+Mysql”架构,也被称为SSH框架,这是一套广泛应用于Java Web开发的技术栈,具有良好的分层设计和组件化特性。 **Struts** 是一个基于MVC(Model-View-Controller)...

    轻量级Java EE企业应用实战(第3版)-Struts2+Spring3+Hibernate全本 part1

    《轻量级Java EE企业应用实战:Struts2+Spring3+Hibernate整合开发(第3版)》是《轻量级Java EE企业应用实战》的第3版,第3版保持了第2版内容全面、深入的特点,主要完成全部知识的升级。  《轻量级Java EE企业...

    在线拍卖系统hibernate+servlet+三层模式

    总的来说,这个在线拍卖系统利用Hibernate简化了数据库操作,Servlet实现了业务逻辑,三层架构保证了系统的可扩展性和可维护性。对于学习和理解Java Web开发或者想要了解在线拍卖系统运作原理的开发者来说,这是一个...

    Struts+Spring+Hibernate+WebService集成架构.doc

    综上所述,Struts+Spring+Hibernate+WebService集成架构通过合理的分层设计,充分利用了各框架的优势,构建出了一个既高效又灵活的企业级应用开发框架。这种架构模式不仅提高了开发效率,降低了维护成本,还提升了...

    基于Struts+Hibernate+Spring的CRM客户管理系统源码.zip

    这表明系统设计遵循了分层架构,包括表现层(Struts)、业务逻辑层(Spring)和数据访问层(Hibernate)。 【标签】进一步细化了技术点,包含“毕业设计”,意味着这套代码可能是学生在完成学业时的项目,用于展示...

    J2EE电子商务系统开发从入门到精通--基于Struts和Hibernate技术实现

    #### 第五章 员工登录系统 **5.1 系统分析和设计** - **5.1.1 需求分析** - 需求分析阶段需要明确系统的目标用户、功能需求、非功能性需求等。 - **5.1.2 登录页面** - 设计简洁易用的登录页面,确保用户体验...

    struts2.3.37+spring-framework-5.1.0+hibernate-release-5.3.1.Final

    Struts2是基于MVC(Model-View-Controller)设计模式的Web应用框架,它强化了Java Servlet API的功能,提供了一种更加结构化和可维护的开发方式。Struts2.3.37是该框架的一个稳定版本,包含了一些重要的安全修复和...

    jsp+servlet+Javabean实现得博客网

    在Web开发领域,Java技术栈中的JSP(JavaServer Pages)、Servlet和Javabean是构建动态网站的常用工具,尤其适合创建数据驱动的博客系统。这个“jsp+servlet+Javabean实现的博客网”项目,是通过这三者结合来实现一...

    基于Spring+Struts+Hibernate的报备系统的设计与实现

    ### 基于Spring+Struts+Hibernate的报备系统的设计与实现 #### 一、项目背景及功能概述 在当前全球经济一体化与信息技术快速发展的背景下,推进政府信息化建设已成为提升管理水平的重要途径。针对注册会计师协会而...

    Struts_2+Spring_3+Hibernate整合开发.part5.rar

    因为这本电子书太大了,只能分开上传,需要下载完 Struts_2+Spring_3+Hibernate整合开发.part1....该案例既提供了IDE无关的、基于Ant管理的项目源码,也提供了基于Eclipse IDE的项目源码,最大限度地满足读者的需求。

    jsp+servlet+javaBean构成的MVC-员工管理系统.zip

    【标题】:基于JSP、Servlet和JavaBean的MVC架构在员工管理系统中的应用 【描述】:在软件开发中,MVC(Model-View-Controller)架构模式被广泛应用于构建Web应用程序,尤其是员工管理系统这样的业务系统。在这个...

    基于Struts2+Hibernate+Spring框架的超市信息管理系统.rar

    系统的设计应遵循分层架构,通常分为表现层、业务逻辑层和数据访问层,保证各层职责清晰,便于维护和升级。 在实际部署时,还需要考虑安全性问题,如防止SQL注入、XSS攻击等,可以利用Struts2的安全插件或者Spring ...

    基于Struts,Hibernate和Spring的J2EE架构研究

    ### 基于Struts、Hibernate和Spring的J2EE架构研究 #### 一、引言 随着互联网技术的发展和企业需求的日益多样化,软件开发领域面临着越来越多的挑战。为了解决这些问题,J2EE(Java 2 Platform, Enterprise ...

    eclipse下整合struts2+hibernate

    通过上述步骤,可以在 Eclipse 中成功地整合 Struts2 和 Hibernate,实现基于 MVC 架构的 Web 应用程序开发。这种整合方式不仅提高了开发效率,还使得代码更加模块化和易于维护。此外,通过合理的分层设计,可以更好...

    springMVC+hibernate+maven整合

    Spring MVC、Hibernate 和 Maven 是Java开发中常用的三大框架,它们分别负责不同的职责,共同构建了一个高效、模块化的Web应用程序。让我们深入探讨这三个框架以及如何将它们整合在一起。 **Spring MVC** Spring ...

    Struts_2+Spring_3+Hibernate整合开发

    因为这本电子书太大了,只能分开上传,需要下载完 Struts_2+Spring_3+Hibernate整合开发.part1....该案例既提供了IDE无关的、基于Ant管理的项目源码,也提供了基于Eclipse IDE的项目源码,最大限度地满足读者的需求。

    Struts_2+Spring_3+Hibernate整合开发.part1

    因为这本电子书太大了,只能分开上传,需要下载完 Struts_2+Spring_3+Hibernate整合开发.part1....该案例既提供了IDE无关的、基于Ant管理的项目源码,也提供了基于Eclipse IDE的项目源码,最大限度地满足读者的需求。

    项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5)130223.rar

    Struts2是ActionServlet的升级版,是一个强大的MVC框架,它提供了一种分层架构,使得开发者可以更专注于业务逻辑的实现。Struts2通过拦截器机制处理HTTP请求,提供了丰富的结果类型和插件支持,简化了页面跳转与数据...

Global site tag (gtag.js) - Google Analytics