图片服务器设计文档

本文档介绍了图片服务器的项目背景、设计与实现,包括数据库设计、JDBC连接、Servlet服务和前端页面渲染。项目涉及HTTP协议、MySQL操作、MD5校验等知识点,并实现了防盗链和图片去重机制。
摘要由CSDN通过智能技术生成
           **基于Java Servlet 构建的图片服务器**

一.项目概述

1.1项目背景

用过的很多app中,每次去更换头像都会让你从本地相册中选择图片进行更换,还有前几天在学习通上传实验截图,也是点击后选择本地图片进行上传,还有博客的插入图片功能,还有等等等很多地方都用到了此功能,所以这个图片上传功能应用好广啊,俗话说,学以致用,我也想自己实现一个图片服务器,来让大家分享自己的各种有趣的,好玩的照片,美食,美景,美人都来进到我的服务器中吧。
如果感兴趣,那让我们往下接着看。
在这里插入图片描述

1.2项目介绍

1.实现一个web程序,通过url进入到图片服务器首页,直接展示所有人上传过的图片。
2.选择上传就可以从本地文件或者相册中去选择图片,点击提交后,页面会展现出你提交的图片。
3.对单张图片进行删除,会提示用户删除成功。
4.每张图片可以单击放大,左右滑动来浏览。

这就是这个简陋的图片服务器的一个介绍。

二.项目设计

2.1项目整体架构

核心就是一个 HTTP 服务器, 提供对图片的增删改查能力,同时搭配简单的页面辅助完成图片上传/展示功能。需要用到tomcat,IDEA,MySQL。
后面还会通过打war包的形式将项目部署在linux上,更好的展现项目功能。

2.2项目涉及知识点

  1. 简单的Web服务器设计能力
  2. Java 操作 MySQL 数据库
  3. 数据库设计
  4. 响应风格 API
  5. gson 的使用
  6. 加深对HTTP 协议的理解
  7. Servlet 的使用
  8. 基于 md5 进行校验
  9. 软件测试的基本思想和方法

2.3 项目具体实现

2.3.1 数据库的设计

使用mysql,创建一个表来存放图片的属性信息,包括:id,图片名,图片大小,上传时间,图片类型,它的路径,md5(后面优化会用到)。

CREATE TABLE image_table (
  imageId int(11) NOT NULL AUTO_INCREMENT,
  imageName varchar(50) DEFAULT NULL,
  size int(11) DEFAULT NULL,
  uploadTime varchar(50) DEFAULT NULL,
  contentType varchar(50) DEFAULT NULL,
  path varchar(1024) DEFAULT NULL,
  md5 varchar(1024) DEFAULT NULL,
  PRIMARY KEY (imageId)
) 

2.3.2 JDBC建立数据库连接

选择用单例模式的饿汉,将JDBC连接专门封装到一个类里面,方便后面调用。选择单例模式是因为这个类只能创建一个实例,节省资源。
千万不能忘了close方法,里面的关闭的顺序不能有错,遵循先打开的后关闭。

package dao;


import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {
   
    private static final String  url="jdbc:mysql://127.0.0.1:3306/image_picture?characterEncoding=utf8&&useSSL=true";
    private  static  final  String USERNAME="root";
    private static  final  String PASSWORD="mysql";
    //private static  final  String PASSWORD="LMJian521";
    //private static  final  String PASSWORD="";
    /**
     * DataSource创建的connection既有基本实现,也有连接池实现(可以复用,DataSource帮我们实现了复用机制
     */
    private  static DataSource dataSource=null;
    public  static  DataSource getDataSource(){
   
        //通过这个方法来创建DataSource的实例
        if(dataSource==null) {
   
            synchronized (DBUtil.class) {
   
                if (dataSource == null) {
   
                    dataSource = new MysqlDataSource();
                    MysqlDataSource tmpdataSource=(MysqlDataSource )dataSource;
                    tmpdataSource.setURL(url);
                    tmpdataSource.setUser(USERNAME);
                    tmpdataSource.setPassword(PASSWORD );
                    }
                }
            }
            return dataSource;
        }
        public  static Connection getConnection() {
   
            try {
   
                return  getDataSource() .getConnection();
            } catch (SQLException e) {
   
                e.printStackTrace();
            }
            return null;
        }
        public  static  void close(Connection connection, PreparedStatement statement, ResultSet resultSet)  {
   
                try {
   
                    if(resultSet!=null)
                    resultSet.close();
                    if(statement!=null){
   
                        statement.close();
                    }
                    if(connection!=null){
   
                        connection.close();
                    }
                } catch (SQLException e) {
   
                    e.printStackTrace();
                }
            }
        }

2.3.3 封装一个类对象表示图片

面向对象编程,首先就是如何抽象为对象,一张图片代表一个对象,所以用一个类来描述它的属性,也就是数据库表里面的属性,顺序必须一一对应。
这里属性都是private,封装起到了保护作用,外部只能通过调用get,set方法来进行操作。

package dao;

public class Image {
   
    /**
     * image保存图片的属性
     */
    private  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值