图片服务器项目

图片服务器项目

项目源码:image server

一.核心功能

1.上传图片
2.展示图片
3.删除图片
4.复制图片地址,在另外的服务器打开



二.核心知识点

1.Web服务器(Http服务器)设计开发能力(Servlet)
  Servlet是Tomcat这个Http服务器所提供的一组编程接口,可以去开发一些自己的逻辑,然后部署到Tomcat上去,就可以完成自己的服务器的搭建

2.服务器要有一定的存储能力,使用JDBC操作Mysql数据库
3.根据实际情况来设计数据库表结构
4.前后端交互的API设计(基于HTTP协议)
5.JSON数据格式,使用java中的gson这个库操作json数据
6.测试HTTP服务器(postman测试)
7.使用HTML+CSS+JavaScript技术构建一个简单的页面



三.服务器设计

1.数据库设计

  数据库中存储的是图片的属性。
图片正文,以文件的形式直接存在磁盘上,数据库中就记录一个path对应到磁盘上的文件

在创建存放图片属性表中有个md5字段:

md5
   ①做图片的md5校验和(校验和:通过一个更短的字符串来验证整体数据是否正确,这个短的字符串是根据原串的内容通过一定的规则计算出来的)
   ②字符串哈希算法:将字符串经过一系列的数学变换,得到一个整数,再映射到数组的下标


表的设计:

在这里插入图片描述



2.前后端交互接口设计(API设计)

①JSON
  是一种数据组织的格式,和编程语言无关。是一种键值对的结构。通过JSON可以完成数据的序列化,方便进行网络传输。

在java中有个库叫Gson,开源的JSON解析库

示例代码1:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.HashMap;

public class TestGson {
        public static void main(String[] args) {
            HashMap<String,Object> hashmap=new HashMap<>();

            hashmap.put("name","曹操");
            hashmap.put("skill1","剑气");
            hashmap.put("skill2","三段跳");
            hashmap.put("skill3","加攻速");
            hashmap.put("skill4","吸血");


            //通过map转成JSON结构的字符串
            //1.创建一个gson对象
            Gson gson=new GsonBuilder().create();
            //2.使用toJson方法将键值对结构转成JSON字符串
            String str=gson.toJson(hashmap);
            System.out.println(str);

    }
}

运行结果:
在这里插入图片描述




示例代码2:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

class Hero{
    public String name;
    public String skill1;
    public String skill2;
    public String skill3;
    public String skill4;
}

public class TestGson {
        public static void main(String[] args) {

            Hero hero=new Hero();
            hero.name="曹操";
            hero.skill1="剑气";
            hero.skill2="三段跳";
            hero.skill3="加攻速";
            hero.skill4="吸血";

            //1.创建一个gson对象
            Gson gson=new GsonBuilder().create();
            //2.使用toJson方法将对象转成JSON字符串
            String str=gson.toJson(hero);
            System.out.println(str);

    }
}

运行结果:
在这里插入图片描述






②文件上传操作在HTML中是如何上传的
文件上传在HTTP协议中是如何进行的?

  用到form表单:将网页上的数据通过HTTP协议提交到服务器端
在这里插入图片描述


③新增图片API

客户端请求:
POST /image
Content-Type: multipart/form-data;

[正文内容]
图片的二进制内容


服务器响应:
上传成功:
HTTP/1.1 200 OK
{
  “ok”:true,
}

上传失败:
HTTP/1.1 200 OK
{
  “ok”:false,
  “reason”:“具体的失败原因”
}



④查看所有图片信息API(查属性)

客户端请求:
GET /image

服务器响应:
获取成功:
HTTP/1.1 200 OK
[
  {
   imageId:1,
   imageName:“1.png”,
   contentType:“image/png”,
   size:1000,
   uploadTime:“20200222”,
   path:"./data/1.png",
   md5:“222333444”,
  },
  {
   …
  }
]




获取失败:
HTTP/1.1 200 OK
[ ]



⑤查看指定图片信息API(查属性)

客户端请求:
GET /image?imageId=具体的数值

服务器响应:

获取成功:
HTTP/1.1 200 OK
  {
   imageId:1,
   imageName:“1.png”,
   contentType:“image/png”,
   size:1000,
   uploadTime:“20200222”,
   path:"./data/1.png",
   md5:“222333444”,
  }

获取失败:
HTTP/1.1 200 OK
{
  “ok”:false,
  “reason”:“具体出错原因”
}




⑤删除指定图片API

客户端请求:
DELETE /image?imageId=[图片id]

服务器响应:
删除成功:
HTTP/1.1 200 OK
{
  “ok”:true,
}

删除失败:
HTTP/1.1 200 OK
{
  “ok”:false,
  “reason”:“具体的失败原因”
}




⑤查看指定图片内容API

客户端请求:
GET /imageShow?imageId=图片id

服务器响应:

成功
HTTP/1.1 200 OK
Content-Type:image/png

[图片的二进制内容]


失败
HTTP/1.1 200 OK
{
ok:false,
reason:“具体的原因”
}



四.后端代码设计

1.封装数据库操作(DAO层)

①DBUtil: 封装获取数据库连接,关闭数据库连接的操作
②Image实体类:对应到一张图片(属性和一系列的get和set方法)
③ImageDao: Image对象的管理器,借助这个类完成Image对象的增删等操作

2.基于servlet搭建服务器

 Tomcat是一个HTTP服务器在这里插入图片描述


①安装servlet(在pom.xml里添加servlet依赖)
在这里插入图片描述


②创建一个类,继承自HttpServlet父类并且重写这个类中的一些重要的方法

HttpServlet中的一些方法
在这里插入图片描述
doGet方法的两个参数:
HttpServletRequest req: 有请求的相关信息(方法,url,各种header,body)
HttpServletResponse resp:有响应的相关信息(状态码,各种header,body)



代码写完之后,要在web.xml中将新建的Servlet注册进去
在这里插入图片描述配置好上述就是可以将收到的请求中的某个路径去对应到servlet类,进一步执行对应的代码


Tomcat工作原理

a>启动的时候绑定一个端口号(8080)
b>进入一个主循环
c>在主循环里,调用accept,获取到当前的请求连接
d>读取客户端发送的数据(字符串)
e>把这个字符串按照HTTP协议来进行解析
f>解析出的HTTP请求的方法和url之后,找到对应的Servlet,并且去执行对一个的doXXX方法
在这里插入图片描述




③实现图片上传

  用到一个第三方库fileupload
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值