文章目录
-
- 第一部分:安装和配置Tomcat环境
-
- [1. 安装Java环境(JDK 1.8)](#1. 安装Java环境(JDK 1.8))
- [2. 下载并安装Tomcat](#2. 下载并安装Tomcat)
- [3. 配置防火墙](#3. 配置防火墙)
- 第二部分:解决中文乱码问题
-
- [1. 修改Tomcat日志编码配置](#1. 修改Tomcat日志编码配置)
- [2. 修改Tomcat服务器配置](#2. 修改Tomcat服务器配置)
- [3. 确保系统环境支持UTF-8](#3. 确保系统环境支持UTF-8)
- [4. 验证中文编码设置](#4. 验证中文编码设置)
- 第三部分:创建文件上传下载功能的Web应用
-
- [1. 创建项目结构](#1. 创建项目结构)
- [2. 创建文件上传和下载的Servlet](#2. 创建文件上传和下载的Servlet)
- [3. 创建web.xml文件](#3. 创建web.xml文件)
- [4. 创建index.html文件](#4. 创建index.html文件)
- [5. 创建必要的目录结构](#5. 创建必要的目录结构)
- 第四部分:构建并部署应用
-
- [1. 安装Maven](#1. 安装Maven)
- [2. 创建pom.xml文件](#2. 创建pom.xml文件)
- [3. 构建WAR文件](#3. 构建WAR文件)
- [4. 部署WAR文件到Tomcat](#4. 部署WAR文件到Tomcat)
- 第五部分:测试文件上传下载功能
以下是在 Tencentos/CentOS7/RedHat8系统上部署支持文件上传下载功能的Tomcat应用
第一部分:安装和配置Tomcat环境
1. 安装Java环境(JDK 1.8)
bash
# 检查是否已安装Java
java -version
# 如果未安装,安装OpenJDK 1.8
sudo yum install -y java-1.8.0-openjdk-devel
# 验证Java安装
java -version
2. 下载并安装Tomcat
bash
# 创建Tomcat目录
sudo mkdir -p /opt/tomcat
# 下载Tomcat 9(最新稳定版)
cd /opt/tomcat
sudo wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz
# 解压Tomcat
sudo tar xzvf apache-tomcat-9.0.97.tar.gz
# 重命名目录
sudo mv apache-tomcat-9.0.97.tar.gz tomcat
# 创建Tomcat服务脚本(用于开机自启动)
sudo tee /etc/systemd/system/tomcat.service <<EOF
[Unit]
Description=Apache Tomcat 9 Servlet Container
After=syslog.target network.target
[Service]
User=root
Group=root
Type=forking
Environment=CATALINA_PID=/opt/tomcat/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/tomcat
Environment=CATALINA_BASE=/opt/tomcat/tomcat
ExecStart=/opt/tomcat/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动Tomcat服务
sudo systemctl start tomcat
# 设置开机自启动
sudo systemctl enable tomcat
3. 配置防火墙
- 如已关闭防火墙,此步忽略
bash
# 开放Tomcat默认端口8080
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
第二部分:解决中文乱码问题
1. 修改Tomcat日志编码配置
bash
# 编辑Tomcat的logging.properties文件
sudo vi /opt/tomcat/tomcat/conf/logging.properties
在文件中找到并修改以下行:
properties
# 将UTF-8设置为UTF-8,确保日志输出使用UTF-8编码
java.util.logging.ConsoleHandler.encoding = UTF-8
如果找不到该行,就添加它。
2. 修改Tomcat服务器配置
bash
# 编辑Tomcat的server.xml文件
sudo vi /opt/tomcat/tomcat/conf/server.xml
在``标签中添加URIEncoding="UTF-8"属性:
xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
3. 确保系统环境支持UTF-8
bash
# 检查系统默认编码
locale
# 如果系统不是UTF-8,需要设置为UTF-8
# 编辑系统环境配置
sudo vi /etc/locale.conf
# 将内容修改为:
LANG=en_US.UTF-8
# 重新加载环境变量
sudo locale-gen
sudo update-locale
4. 验证中文编码设置
bash
# 重新启动Tomcat
sudo systemctl restart tomcat
第三部分:创建文件上传下载功能的Web应用
1. 创建项目结构
bash
# 创建项目目录
mkdir -p ~/file-upload-download
cd ~/file-upload-download
# 创建必要的目录结构
mkdir -p src/main/java/com/example/fileupload
mkdir -p src/main/webapp/WEB-INF
2. 创建文件上传和下载的Servlet
创建src/main/java/com/example/fileupload/FileUploadServlet.java:
java
package com.example.fileupload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Paths;
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 FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String UPLOAD_DIR = "/opt/tomcat/tomcat/webapps/file_upload/downloads";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应编码为UTF-8
response.setContentType("text/html; charset=UTF-8");
response.getWriter().println("<html><head><meta charset=\"UTF-8\"></head><body>");
response.getWriter().println("<h2>文件上传</h2>");
response.getWriter().println("<form method='post' enctype='multipart/form-data' action='upload'>");
response.getWriter().println("选择文件: <input type='file' name='file' /><br>");
response.getWriter().println("<input type='submit' value='上传' />");
response.getWriter().println("</form>");
response.getWriter().println("<h2>文件下载</h2>");
response.getWriter().println("<ul>");
File dir = new File(UPLOAD_DIR);
for (File file : dir.listFiles()) {
if (file.isFile()) {
response.getWriter().println("<li><a href='download?file=" + file.getName() + "'>" + file.getName() + "</a></li>");
}
}
response.getWriter().println("</ul>");
response.getWriter().println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求编码为UTF-8
request.setCharacterEncoding("UTF-8");
Part filePart = request.getPart("file");
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
// 确保上传目录存在
File uploadDir = new File(UPLOAD_DIR);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
// 保存文件
InputStream fileInputStream = filePart.getInputStream();
OutputStream out = new FileOutputStream(UPLOAD_DIR + "/" + fileName);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.close();
fileInputStream.close();
// 重定向回上传页面
response.sendRedirect("upload");
}
}
创建src/main/java/com/example/fileupload/FileDownloadServlet.java:
java
package com.example.fileupload;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DOWNLOAD_DIR = "/opt/tomcat/tomcat/webapps/file_upload/downloads";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求和响应编码为UTF-8
request.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + request.getParameter("file") + "\"");
String fileName = request.getParameter("file");
if (fileName == null || fileName.isEmpty()) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "文件名不能为空");
return;
}
// 构建文件路径
File file = new File(DOWNLOAD_DIR, fileName);
if (!file.exists() || !file.isFile()) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "文件不存在");
return;
}
// 读取文件并写入响应
FileInputStream fis = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
fis.close();
os.flush();
os.close();
}
}
3. 创建web.xml文件
在src/main/webapp/WEB-INF目录下创建web.xml:
xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
4. 创建index.html文件
在src/main/webapp目录下创建index.html:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传下载</title>
</head>
<body>
<h1>文件上传下载应用</h1>
<p>点击 <a href="upload">这里</a> 进行文件上传和下载</p>
</body>
</html>
5. 创建必要的目录结构
bash
# 创建下载目录
sudo mkdir -p /opt/tomcat/tomcat/webapps/file_upload/downloads
# 设置目录权限
sudo chown -R root:root /opt/tomcat/tomcat/webapps/file_upload/downloads
第四部分:构建并部署应用
1. 安装Maven
bash
# 安装Maven
sudo yum install -y maven
2. 创建pom.xml文件
在项目根目录(/root/file-upload-download)创建pom.xml:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>file-upload-download</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>file_upload</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
3. 构建WAR文件
bash
cd /root/file-upload-download
mvn clean package
4. 部署WAR文件到Tomcat
bash
# 将生成的WAR文件复制到Tomcat的webapps目录
sudo cp target/file_upload.war /opt/tomcat/tomcat/webapps/
# Tomcat会自动解压并部署应用
第五部分:测试文件上传下载功能
-
确保Tomcat正在运行:
bashsudo systemctl status tomcat -
在浏览器中访问:
http://192.168.100.146:8080/file_upload或者
http://192.168.100.146:8080/file_upload/upload -
上传文件:
- 在上传页面选择一个中文命名的文件并点击"上传"
- 上传成功后,页面会自动刷新
-
下载文件:
- 在上传页面的文件列表中,点击中文文件名进行下载
