环境:Eclipse,Apache tomcat
Tomcat与Eclipse集成:
https://blog.csdn.net/qq_41635282/article/details/112252764
文件说明
index.html:前端页面
ShowImg.java:从服务器上返回一张图片显示在页面上。
Upload.java:处理上传的文件存储到服务器上指定的位置。
Download.java:从服务器上下载文件到本地。
创建一个javaweb项目
我的项目名叫:ShowDownloadWebServers
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
div {
border: 2px solid black;
}
</style>
</head>
<body>
<div>
<p>点击按钮,从服务器上返回一张图片</p>
<form action="show">
<p>
<input type="submit" value="查看图片">
</p>
</form>
</div>
<br>
<div>
<p>上传:将文件传到服务器上</p>
<form action="upload" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="file">
</p>
<p>
<input type="submit" value="上传到服务器">
</p>
</form>
</div>
<br>
<div>
<p>点击从服务器上下载个图片</p>
<p>
<img alt="" width="200" height="200" name="img1"
src="http://localhost:8080/ShowDownloadWebServers/img/2.jpg">
</p>
<p>
<a href="download?name=2.jpg">下载图片</a>
</p>
</div>
</body>
</html>
注意事项:
ShowImg.java
package com.bingjiu.back;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 显示图片img/1.jpg
*/
@WebServlet("/show")
public class ShowImg extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应头Content-Type为图片类型
resp.setHeader("Content-Type","image/jpg" );
//Servlet自带的输出流
ServletOutputStream os=resp.getOutputStream();
//将图片输入到内存
InputStream is=req.getServletContext().getResourceAsStream("img/1.jpg");
byte[] data=new byte[1024];
int len=0;
//输出到页面打印
while((len=is.read(data))!=-1) {
os.write(data,0,len);
}
//关闭流
os.close();
is.close();
}
}
注意事项:
Upload.java
package com.bingjiu.back;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/*
* 上传到服务器
*/
@WebServlet("/upload")
@MultipartConfig
public class Upload extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决网页乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取part对象
Part part = req.getPart("file");
//通过请求头content-disposition获取请求头信息
String header = part.getHeader("content-disposition");
System.out.println(header);
//从请求头信息种截取文件名,header.lastIndexOf("=")获取‘=’最后出现的位置
String filename = header.substring(header.lastIndexOf("=")+2, header.length()-1);
System.out.println(filename);
//确定上传路径
String path="C:/Users/BetelNutsAndWine/Desktop/WenJian";
//创建指向路径的File对象
File file = new File(path);
//file.exists()文件(文件夹或文件路径正确)存在返回true,不存在返回false
if(!file.exists()) {
//创建文件夹,把路径中不存在的路径一下创建
file.mkdirs();
}
//文件上传
part.write(path+"/"+UUID.randomUUID()+filename);
}
}
注意事项:
Download.java
package com.bingjiu.back;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download")
public class Download extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取下载页面发送的下载文件名
String filename = req.getParameter("name");
// 设置消息头
resp.setHeader("content-disposition", "attachment;filename=" + filename);
// 获取输入流
InputStream is = req.getServletContext().getResourceAsStream("img/" + filename);
// 输出流
ServletOutputStream os = resp.getOutputStream();
// 读写过程
byte[] by = new byte[1024];
int len = 0;
while ((len = is.read(by)) != -1) {
os.write(by, 0, len);
}
os.close();
is.close();
}
}