应用场景

需要文件服务器,向应用提供基于http协议的文件服务,让应用可以通过url访问资源。
PS:归根到底是要提供http服务,同时将本地目录映射到指定的url下,有点类似Linux的软链接,文件的物理目录未发生改变,只是为本地目录提供了基于http协议的访问方式。

搭建方法

使用 apache http发布

linux默认安装http组件,windows下也可以自己下载
下载地址:http://httpd.apache.org/download.cgi
需要改的就是httpd.conf这个配置文件,添加如下代码:

Alias /namespace/ "/usr/yourDir/"
  • namespace 是相对于WebRoot的名称,即url中http://ip:port/后的相对路径;
  • yourDir 就是本地想要发布的根目录.

既然可以使用apache http这样的工具,那么使用任何带有代理功能的工具都可以,如nginx,只不过配置文件需要按照nginx的要求来。
写文章不易,每天搬搬砖

使用类似Tomcat这样的servlet容器发布

有两个位置可以用来配置映射目录,核心关键词都是Context

  1. 在conf目录下的server.xml中,文档最下面的 <host>标签内,可以添加一个Context 节点
<Context docBase="/usr/yourdir/" path="/namespace" reloadable="true" />

该方式与上面法1类似。若要映射根目录,将path设定为空,即path=""。

  1. 在conf\Catalina\localhost 目录中添加一个xml,这个xml的内容与1中所示内容相同
<Context docBase="/usr/yourDir/" privileged="true" antiResourceLocking="false" antiJARLocking="false" reloadable="true">

但是namespace则作为文件名,例如该xml文件名为fileserver,则访问url为http://ip:port/fileserver/就是你设定的映射目录。
写文章不易,每天搬搬砖2

编程发布

这里使用jetty1,不过不是用jetty做servlet容器那样修改配置文件发布,而是借鉴了jetty的嵌入式开发模式,即使用API中提供的Endpoint。
我的应用场景是:

一个后台程序定时生成日志,客户想直接在网页上看到日志内容,因此我直接将后台程序根目录下的loginfo目录发布到
http://127.0.0.1:8091/loginfo 下,这样自动生成的日志可以在这个url下直接访问。当然为了显示简单,我日志是字符串拼接成html格式2再写文件,这样便于控制显示样式。

/**
 * june.logs:com.june.logs.LogMonitor.java
 * 日期:2019年7月4日
 */
package com.june.logs;

import java.net.InetSocketAddress;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

/**
 * LogMonitor <br>
 * 
 * @author wjw.happy.love@163.com
 * 
 * @version 1.0.0
 */
public class LogMonitor {

	public final static String logDir = "/loginfo";
	public final static String DefaultServiceHost = "127.0.0.1";

	private static Thread logServer;

	public static void startLogServer() {
		if (logServer == null) {
			logServer = new Thread() {
				public void run() {
					this.setName("LogFileServer");
					publishService();
				}
			};
			logServer.start();
		}
	}

	private static void publishService() {
		String hostIp = getHostInfo();
		Server server = new Server(new InetSocketAddress(hostIp, 8091));
		// 配置要监控的本地目录和要访问的http映射url
		WebAppContext webContext = new WebAppContext(logMonitorDir(), logDir);
		server.setHandler(webContext);
		System.out.println("loginfo server is starting...");
		try {
			server.start();
			server.join();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// 监控的本地路径
	private static String logMonitorDir() {
		// XXX 可以修改使用配置文件获取本地监控路径,方便扩展
		return System.getProperty("user.dir") + "/logs/";
	}

	private static String getHostInfo() {
		// XXX 可以修改使用配置文件获取host地址,方便扩展
		return DefaultServiceHost;
	}

	public static void main(String[] args) {
		startLogServer();
	}
}
 

写文章不易,每天搬搬砖3
上面直接运行Application即可启动web服务,然后访问: http://127.0.0.1:8091/loginfo/ 地址,便可进入日志的监控目录:
日志监控目录
点击某个日志既可以查看具体日志内容了:
日志具体内容


以上资源全部结合网上已有资源整合~~写文章不易,每天搬搬砖



  1. Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 ↩︎

  2. 其实是用log4j组件直接生成的html样式的日志 ↩︎

更多推荐