文章目錄
- JavaWeb servlet jsp 使用七牛云API上傳圖片
- 工具類
- 七牛云工具類
- JDBC工具類
- service
- PhotoService
- PhotoServiceImpl
- Dao
- PhotoDao
- PhotoDaoImpl
- vo
- MyPutRet
- Photo
- Result
- webapp
- web.xml
- data.jsp
- detail.jsp
- index.jsp
- list.jsp
- transfer.jsp
- servlet
- JDBCservlet
- UploadServlet
- 資料庫
- 依賴
JavaWeb servlet jsp 使用七牛云API上傳圖片
這次是上一次的改進版本,相對上次好很多,上次很多作業混在一起沒法隨便分開
有興趣的可以看看我上次寫的:JavaWeb servlet jsp 上傳圖片,圖片存入資料庫,圖片從資料庫中取出,頁面顯示圖片




頁面其實用了一點jquery和layui來寫
工具類
七牛云工具類
檔案:
https://developer.qiniu.com/kodo/1239/java
package top.sehnsucht.util;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import lombok.Data;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/11/5
*/
public class Qiniu {
private static String ACCESS_KEY = "xxx";//填寫你自己的
private static String SECRET_KEY = "xxx";
private static String BUCKET_NAME = "xxx";
private static String KEY = "";
private static String FILE_PATH = "";
/**
* 自定義回傳的json格式
*/
public static void setJson() {
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
StringMap putPolicy = new StringMap();
putPolicy.put("callbackUrl", "http://api.example.com/qiniu/upload/callback");
putPolicy.put("callbackBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize)}");
putPolicy.put("callbackBodyType", "application/json");
long expireSeconds = 3600;
String upToken = auth.uploadToken(BUCKET_NAME, null, expireSeconds, putPolicy);
System.out.println(upToken);
}
/**
* 上傳檔案
*/
public static void uploadPic(String key, String filePath) {
KEY = key;FILE_PATH = filePath;
//構造一個帶指定 Region 物件的配置類,這里可能需要根據自己情況改一下,點進原始碼看看情況,根據報錯改region
Configuration cfg = new Configuration(Region.region2());
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
String upToken = auth.uploadToken(BUCKET_NAME);
try {
Response response = uploadManager.put(FILE_PATH, KEY, upToken);
//決議上傳成功的結果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
ex2.printStackTrace();
}
}
}
/**
* 回傳地址
* @return
*/
public static String picUrl() {
String url = "http://r234valei.hn-bkt.clouddn.com";
String picUrl = url + "/" + KEY;
return picUrl;
}
}
JDBC工具類
package top.sehnsucht.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/10/29
*/
public class DBUtil {
// 定義資料庫連接引數
public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/junior";
public static final String USERNAME = "root";
public static final String PASSWORD = "818181";
// 注冊資料庫驅動
static {
try {
Class.forName(DRIVER_CLASS_NAME);
} catch (ClassNotFoundException e) {
System.out.println("注冊失敗!");
e.printStackTrace();
}
}
// 獲取連接
public static Connection getConn() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
// 關閉連接
public static void closeConn(Connection conn) {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("關閉連接失敗!");
e.printStackTrace();
}
}
}
//測驗
public static void main(String[] args) throws SQLException {
System.out.println(DBUtil.getConn());
}
}
service
PhotoService
package top.sehnsucht.service;
import top.sehnsucht.vo.Photo;
import java.util.ArrayList;
import java.util.Map;
/**
* @Description: 圖片業務介面
* @Author: Cai
* @CreateTime: 2021/11/5
*/
public interface PhotoService {
/**
* 獲取所有圖片路徑
* @return
*/
ArrayList<Map<String, String>> getAllPhotos();
/**
* 添加圖片到資料庫
* @param name
* @param photourl
*/
void addPhoto(String name, String photourl);
/**
* 根據id查找圖片
* @param id
* @return
*/
Photo selectPhotoById(Integer id);
}
PhotoServiceImpl
package top.sehnsucht.service.impl;
import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.service.PhotoService;
import top.sehnsucht.vo.Photo;
import java.util.ArrayList;
import java.util.Map;
/**
* @Description: 圖片業務實作類
* @Author: Cai
* @CreateTime: 2021/11/5
*/
public class PhotoServiceImpl implements PhotoService {
private PhotoDao photoDao;
public PhotoServiceImpl(PhotoDao photoDao) {
this.photoDao = photoDao;
}
@Override
public ArrayList<Map<String, String>> getAllPhotos() {
return photoDao.getAllPhotos();
}
@Override
public void addPhoto(String name, String photourl) {
photoDao.addPhoto(name, photourl);
}
@Override
public Photo selectPhotoById(Integer id) {
return photoDao.getPhotoById(id);
}
}
Dao
PhotoDao
package top.sehnsucht.dao;
import top.sehnsucht.vo.Photo;
import java.util.ArrayList;
import java.util.Map;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/11/5
*/
public interface PhotoDao {
/**
* 回傳ArrayList<Map<String,String>>,方便轉成json傳到前端
* @return
*/
ArrayList<Map<String,String>> getAllPhotos();
/**
* 添加photo到資料庫中
* @param name
* @param photourl
*/
void addPhoto(String name, String photourl);
/**
* 獲得最大的id
* @return
*/
Integer getMaxId();
/**
* 根據id查找圖片
* @param id
* @return
*/
Photo getPhotoById(Integer id);
/**
* 獲得資料庫中圖片的數量
* @return
*/
Integer photoCount();
}
PhotoDaoImpl
package top.sehnsucht.dao.impl;
import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.util.DBUtil;
import top.sehnsucht.vo.Photo;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/11/5
*/
public class PhotoDaoImpl implements PhotoDao {
@Override
public ArrayList<Map<String, String>> getAllPhotos() {
Connection conn = null;
PreparedStatement ps = null;
FileInputStream in = null;
ResultSet rs = null;
ArrayList<Map<String, String>> arrs = new ArrayList<>();
try {
conn = DBUtil.getConn();
String sql = "select id,name,photourl from photo order by id";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
while (rs.next()) {
Map<String, String> map = new HashMap();
Integer id = rs.getInt(1);
String name = rs.getString(2);
String photourl = rs.getString(3);
System.out.println("查詢: " + id + " " + name + " " + photourl);
map.put("id", id.toString());
map.put("name", name);
// map.put("photourl",photourl);
arrs.add(map);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeConn(conn);
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return arrs;
}
@Override
public Photo getPhotoById(Integer id) {
Connection conn = null;
PreparedStatement ps = null;
FileInputStream in = null;
ResultSet rs = null;
Integer thisId = null;
String name = null;
String photourl = null;
try {
conn = DBUtil.getConn();
System.out.println("id:" + id);
String sql = "select * from photo where id = " + id;
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
while (rs.next()) {
thisId = rs.getInt(1);
name = rs.getString(2);
photourl = rs.getString(3);
System.out.println(thisId);
System.out.println(name);
System.out.println(photourl);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeConn(conn);
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return new Photo(thisId, name, photourl);
}
@Override
public Integer photoCount() {
Connection conn = null;
PreparedStatement ps = null;
FileInputStream in = null;
ResultSet rs = null;
int ans = 0;
try {
conn = DBUtil.getConn();
String sql = "select id,name from photo ";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
while (rs.next()) {
ans++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeConn(conn);
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ans;
}
@Override
public void addPhoto(String name, String photourl) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DBUtil.getConn();
String sql = "insert into photo (id,name,photourl)values(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setInt(1, getMaxId() + 1);//資料庫表我弄成自增的了
ps.setString(2, name);
ps.setString(3, photourl);
int count = ps.executeUpdate();
if (count > 0) {
System.out.println("插入成功!");
} else {
System.out.println("插入失敗!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeConn(conn);
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
@Override
public Integer getMaxId() {
Connection conn = null;
PreparedStatement ps = null;
FileInputStream in = null;
ResultSet rs = null;
int ans = 0;
try {
conn = DBUtil.getConn();
String sql = "select max(id) from photo";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery(sql);
while (rs.next()) {
ans = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeConn(conn);
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ans;
}
}
vo
MyPutRet
這個是七牛云回傳的一個json,不過好像沒有用上
package top.sehnsucht.vo;
import lombok.Data;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/11/5
*/
@Data
public class MyPutRet {
public String key;
public String hash;
public String bucket;
public long fsize;
}
Photo
物體類,干脆直接放vo了
package top.sehnsucht.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/11/5
*/
@Data
@AllArgsConstructor
public class Photo {
private Integer id;
private String name;
private String photourl;
}
Result
layui回傳物件
package top.sehnsucht.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/10/9
* ~~(^_^)~~
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
//回傳碼
private Integer code;
//回傳描述
private String message;
//回傳資料
private T data;
//分頁查詢總記錄
private Long count;
public static Result<Object> success() {
return new Result(0, "success", null, null);
}
public static Result<Object> success(String message) {
return new Result(0, message, null, null);
}
public static Result<Object> success(Object data, Long count) {
return new Result(0, "success", data, count);
}
public static Result<Object> fail() {
return new Result(1, "fail", null, null);
}
public static Result<Object> fail(String message) {
return new Result(1, message, null, null);
}
}
webapp
部分頁面參考了jquery和layui
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>top.sehnsucht.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>jdbc</servlet-name>
<servlet-class>top.sehnsucht.JDBCServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jdbc</servlet-name>
<url-pattern>/jdbc</url-pattern>
</servlet-mapping>
</web-app>
data.jsp
<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page import="top.sehnsucht.vo.Result" %>
<%@ page import="top.sehnsucht.dao.PhotoDao" %>
<%@ page import="top.sehnsucht.dao.impl.PhotoDaoImpl" %>
<%@ page import="top.sehnsucht.service.PhotoService" %>
<%@ page import="top.sehnsucht.service.impl.PhotoServiceImpl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
response.setHeader("Content-Type", "application/json;charset=UTF-8");//注意加上這一句
System.out.println("現在路徑是: " + request.getRequestURL());
Result result = new Result();
result.setCode(0);
result.setCount(1L);
PhotoDao photoDao = new PhotoDaoImpl();
PhotoService photoService = new PhotoServiceImpl(photoDao);
String json = JSON.toJSONString(photoService.getAllPhotos());
out.println("{\"code\":" + result.getCode() + ",\"msg\":\"\",\"count\":" + result.getCount() + ",\"data\":" + json + "}");
%>
detail.jsp
<%@ page import="top.sehnsucht.service.PhotoService" %>
<%@ page import="top.sehnsucht.service.impl.PhotoServiceImpl" %>
<%@ page import="top.sehnsucht.vo.Photo" %>
<%@ page import="top.sehnsucht.dao.PhotoDao" %>
<%@ page import="top.sehnsucht.dao.impl.PhotoDaoImpl" %>
<%--
Created by IntelliJ IDEA.
User: windows
Date: 2021/10/29
Time: 10:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<style>
img {
width: 100%;
height: 100%;
}
</style>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
<script src="${pageContext.request.contextPath}/layui/layui.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>
<img id="img" alt="picture" src="">
<script>
<%
PhotoDao photoDao = new PhotoDaoImpl();
PhotoService photoService = new PhotoServiceImpl(photoDao);
Integer id = Integer.valueOf(request.getParameter("id"));
Photo photo = photoService.selectPhotoById(id);
System.out.println(photo);
out.print("$(\"#img\").attr(\"src\", \"" + photo.getPhotourl() + "\")\n");
%>
</script>
</body>
</html>
index.jsp
<%--
Created by IntelliJ IDEA.
User: windows
Date: 2021/10/29
Time: 10:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>上傳</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
<script src="${pageContext.request.contextPath}/layui/layui.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/upload" enctype="multipart/form-data" class="layui-form">
<br/><br/>
<input type="file" name="uploadFile" class="layui-btn" value="添加檔案"/><button class="layui-btn" lay-submit lay-filter="*">上傳</button>
<br/><br/>
</form>
</body>
</html>
list.jsp
<%--
Created by IntelliJ IDEA.
User: windows
Date: 2021/10/29
Time: 10:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>串列</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
<script src="${pageContext.request.contextPath}/layui/layui.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>
<div style="border-radius: 5px;margin-top: 100px;margin-left: 600px;margin-right: 600px">
<table id="demo" lay-filter="table-pic-filter"></table>
</div>
<script type="text/html" id="col-pic-toolbar">
<a class="layui-btn layui-btn-xs" lay-event="look">查看</a>
</script>
<script>
layui.use('table', function () {
var table = layui.table;
table.render({
elem: '#demo'
, height: 312
, url: '/data.jsp' //資料介面
, page: false //關閉分頁
, cols: [[ //表頭
{field: 'id', title: 'id', width: 100, sort: true, fixed: 'left'}
, {field: 'name', title: 'name', width: 350}
, {title: '操作', align: 'center', toolbar: '#col-pic-toolbar'}
]]
});
table.on('tool(table-pic-filter)', function (obj) {
let data = obj.data;
// alert(obj.data.name)
let layEvent = obj.event;
if (layEvent === 'look') {
console.log(data.name)
console.log("list id: " + data.id);
sessionStorage.setItem("id", data.id)
let url = '/transfer.jsp'
layer.open({
type: 2,
title: "查看圖片",
area: ['60%', '60%'],
shadeClose: true,
content: url
});
}
});
});
</script>
</body>
</html>
transfer.jsp
<%--
Created by IntelliJ IDEA.
User: windows
Date: 2021/11/6
Time: 12:03
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>
<form action="detail.jsp">
<label for="id"></label><input type="text" name="id" id="id">
</form>
<script>
$(document).ready(function () {
let id = sessionStorage.getItem("id")
console.log("id: " + id)
$("#id").attr("value", id)
console.log("val: " + $("#id").attr("value"))
$("form").submit()
})
</script>
</body>
</html>
servlet
JDBCservlet
package top.sehnsucht;
import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.dao.impl.PhotoDaoImpl;
import top.sehnsucht.service.PhotoService;
import top.sehnsucht.service.impl.PhotoServiceImpl;
import top.sehnsucht.util.Qiniu;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
public class JDBCServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//todo 存盤到資料庫里面
PhotoDao photoDao = new PhotoDaoImpl();
PhotoService photoService = new PhotoServiceImpl(photoDao);
String filename = (String) req.getAttribute("filename");
String filepath = (String) req.getAttribute("filepath");
String fileurl = (String) req.getAttribute("fileurl");
photoService.addPhoto(filename, fileurl);
req.getRequestDispatcher("/list.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
UploadServlet
package top.sehnsucht;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import top.sehnsucht.util.Qiniu;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
/**
* @Description:
* @Author: Cai
* @CreateTime: 2021/10/29
*/
public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//判斷檔案是否可以上傳
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
//可以上傳,有問題就報例外
if (isMultipart) {
//創建一個FileItem工廠,通過工廠創建檔案上傳核心組件ServletFileUpload物件
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
try {
//通過核心上傳組件決議request請求,獲取表單的所有表單項,表單的每一個表單項對應一個FileItem
List<FileItem> items = upload.parseRequest(req);
Iterator<FileItem> it = items.iterator();
for (FileItem item : items) {
if (item.isFormField()) {
System.out.println("其他型別檔案");
} else {
String filename = item.getName();
String path = req.getSession().getServletContext().getRealPath("/") + "\\1";
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
file = new File(path, filename);
item.write(file);
System.out.println(filename + "上傳成功");
Qiniu.uploadPic(filename,path + "\\" + filename);
System.out.println("圖片地址為:" + Qiniu.picUrl());
req.setAttribute("filename",filename);
req.setAttribute("filepath",path + "\\" + filename);
req.setAttribute("fileurl",Qiniu.picUrl());
System.out.println("七牛云上傳成功");
req.getRequestDispatcher("/jdbc").forward(req, resp);
return;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
資料庫
create table photo (
id int not null auto_increment primary key ,
# groupid int comment '組名',
name varchar(50) comment '圖片名稱',
photourl varchar(200) comment '照片路徑'
)
default charset = utf8;
依賴
有些可能沒用到
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.7.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
如果需要原始碼的,請點擊這里:要收取積分的哦
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/350979.html
標籤:其他
下一篇:Servlet實作前后端json資料互動,前端js傳輸資料,后端fastjson決議json資料,以及Tomcat部署和jquery的部署
