使用tomcat作为文件服务器的时候如何对文件进行搜索

tomcat 是一个web引擎,他需要进行配置之后才能作为静态文件服务器,但是默认情况下是不支持搜索功能的,需要自己写一个简单的Servlet

// 如果是文件数量巨大且需要搜索内容,建议结合 Lucene 或 Solr/Elasticsearch,本文只是合适小型项目且不想进行大量修改时的一个补丁手段,请勿进行依赖

1. 编写一个简单的jsp
<%@ page import="java.io.File, java.util.*" %>
<%@ page contentType="application/json;charset=UTF-8" language="java" %>
<%@ page trimDirectiveWhitespaces="true" %>
<%
    String keyword = request.getParameter("name");
    String dbSchemaPath = request.getParameter("dbSchemaPath");
    String type = request.getParameter("type");

    // 1. 路径映射
    String folderPath = "/appserver/logs";
    String urlPath = "/app/";
    if ("sql".equalsIgnoreCase(type)) {
        folderPath = "/appserver/backup";
        urlPath = "/sql/";
    }

    folderPath = folderPath + "/" + dbSchemaPath;           // 拼接具体数据目录


    File dir = new File(folderPath);
    List<Map<String, String>> results = new ArrayList<>();

    if (dir.exists() && dir.isDirectory() && keyword != null && !keyword.trim().isEmpty()) {
        File[] files = dir.listFiles();

        if (files != null && files.length > 0) {
            // 2. 按最后修改时间进行降序排序 (最新的排在最前面)
            Arrays.sort(files, new Comparator<File>() {
                public int compare(File f1, File f2) {
                    return Long.compare(f2.lastModified(), f1.lastModified());
                }
            });

            // 3. 过滤并构建结果
            // List<String> results = new ArrayList<String>();
            String hostInfo = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

            for (File f : files) {
                if (f.isFile() && f.getName().contains(keyword)) {
                    // 使用 Map 构建对象数据
                    String address = hostInfo + urlPath + dbSchemaPath + "/" + f.getName();
                    Map<String, String> fileInfo = new HashMap<>();
                    fileInfo.put("dbName", f.getName());
                    fileInfo.put("address", address);
                    results.add(fileInfo);
                }
            }
        }
    }


    // 简洁的输出方式:手动转 JSON 字符串(逻辑清晰,不依赖外部库)
    // 如果 Tomcat 版本较新,也可以直接用 JSONParser,但直接遍历 Map 是最稳妥的
    StringBuilder sb = new StringBuilder("[");
    for (int i = 0; i < results.size(); i++) {
        Map<String, String> m = results.get(i);
        sb.append(String.format("{\"dbName\":\"%s\",\"address\":\"%s\"}", m.get("dbName"), m.get("address")));
        if (i < results.size() - 1) sb.append(",");
    }

    // 返回
    sb.append("]");
    out.print(sb.toString());
%>

这只是一个简单的jsp,我们主要是用于进行简单文件搜索,尽量不依赖第三方包,并且尽量兼容所有版本的tomcat和jdk

2. 定义的 Web 应用目录

默认情况下是放在 webapps/ROOT 下,如果你想自定义目录,需要在server.xml 中再增加一个 Context 映射

      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
        <!-- host 内新增一个  Context  (ztools_api 是在tomcat目录下,如果不是tomcat目录下,需要写绝对路径)   -->
        <Context docBase="ztools_api" path="/api" reloadable="true" />
      </Host>
3. 重启tomcat
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容