我的第一个javaweb----模仿社区网站(二)

本文介绍了Java Web项目的分层架构设计,包括前端页面层、servlet层、Dao层及数据库层的功能划分,并提供了数据库连接工具类DBUtils及密码加密工具类MD5的具体实现。

项目分层

在写后台之前我给分了四层,每一层负责不同的功能,如图

1345586-20180804101607425-867136799.png

. 前端页面层:也就是浏览器展示给人看的,直接与人交互的界面
. servlet层:受理前端页面发来的数据,由它接受前端发来的请求(request)做出不同的处理,然后给出不同的响应(reponse)返回给前台,然后将需要查询的请求交给Dao层
. Dao层:它的主要功能用于和数据库交互,执行增删改查的功能
. 数据库层:很明显就是存储数据的

建立各层

首先在eclipse上建立一个动态web project,然后建立不同的层(就是package包)

1345586-20180804102738816-509873748.png

工具包

####一个重要的包就是连接jdbc的工具包,我的工具类叫DBUtils

package com.utilDB;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtils {
    private static DBUtils db;
    String driver;
    String url;
    String username;
    String password;
    //让这里的构造器为私有的,就是不让外界能直接new这个类,因为连接数据库本身就是一个比较慢的过程,只需要加载连接一次就可以了
    private DBUtils() {
        Properties p=new Properties();
        try {
            //这里的连接数据库信息都放在一个properties文件中,方便我们修改
            p.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            driver=p.getProperty("driver");
            url=p.getProperty("url");
            username=p.getProperty("username");
            password=p.getProperty("password");
            System.out.println(password);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //这里就是单例模式(懒汉模式),外界只能通过这个公有的方法来访问这个类,注意:是静态方法
    public static DBUtils getIntstance() {
        //这类永远只new一次
        if(db==null) {
            return new DBUtils();
        }else {
            return db;
        }
    }
    
    //返回一个jdbc连接
    public Connection getConnection() throws SQLException, ClassNotFoundException {
        Class.forName(driver);
        Connection conn=DriverManager.getConnection(url,username,password);
        
        return conn;
        
    }
    //关闭对应连接
    public void close(Connection conn) {
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }
    public void close(PreparedStatement ps) {
        if(ps!=null) {
            try {
                ps.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public void close(ResultSet rs) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
        
}
这是properties文件内容,其中#号部分是连接oracle数据库的信息,其他是连接mysql的信息
# jdbcéç½®æä»¶ï¼é置驱å¨,url,username,password,éç¨key = valueçå½¢å¼é置信æ¯
# driver = oracle.jdbc.driver.OracleDriver
# url = jdbc:oracle:thin:@localhost:1521:neuedu
# username = scott
# password = tiger

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=UTF-8
username = root
password = ******
还有一个就是给我们密码加密的工具类,叫MD5,百度很多写法,这里就随便复制一个
package com.utilDB;

import java.security.MessageDigest;

public class MD5 {

    public static String MD5(String s) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(s.getBytes("utf-8"));
            return toHex(bytes);
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static String toHex(byte[] bytes) {

        final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
        StringBuilder ret = new StringBuilder(bytes.length * 2);
        for (int i=0; i<bytes.length; i++) {
            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
        }
        return ret.toString();
    }
}

转载于:https://www.cnblogs.com/liu-ya/p/9417817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值