Vert.x-Web附带一个开箱即用的处理程序,用于提供静态Web资源,以便您可以非常轻松地编写静态Web服务器。
服务静态资源,如.html
,.css
,.js
或任何其他静态资源,您使用的一个实例 StaticHandler
。
对由静态处理程序处理的路径的任何请求都将导致文件系统上的目录或类路径中的文件被提供。默认的静态文件目录是webroot
可以配置的。
在以下示例中,所有对以下路径开始的请求/static/
都将从目录中获取webroot
:
router.route("/static/*").handler(StaticHandler.create());
例如,如果存在具有路径/static/css/mystyles.css
的请求,静态服务将在目录中查找文件webroot/css/mystyle.css
。
它还会在类路径中寻找一个名为的文件webroot/css/mystyle.css
。这意味着你可以将所有的静态资源打包成一个jar文件(或者fatjar)并且像这样分发它们。
当Vert.x首次在类路径上找到资源时,它将其提取并将其缓存在磁盘上的临时目录中,因此每次都不需要执行此操作。
处理程序将处理范围感知请求。当客户端向静态资源发出请求时,处理程序会通过在Accept-Ranges
头上声明单元来通知它可以处理范围感知请求。然后包含Range
具有正确单元和开始和结束索引的标题的其他请求将接收到具有正确Content-Range
标题的部分响应。
配置缓存
默认情况下,静态处理程序将设置缓存头以使浏览器有效地缓存文件。
Vert.x的Web设置标题cache-control
,last-modified
和date
。
cache-control
max-age=86400
默认设置为。这相当于一天。这可以根据setMaxAgeSeconds
需要进行配置。
如果浏览器发送带有if-modified-since
标题的GET或HEAD请求,并且该资源自该日期以来未被修改,304
则返回状态以告知浏览器使用其本地缓存资源。
如果不需要处理缓存标头,则可以使用禁用setCachingEnabled
。
当启用缓存处理时,Vert.x-Web将缓存资源的最后修改日期,这样可以避免每次检查实际上次修改日期时的磁盘命中。
高速缓存中的条目具有到期时间,在此之后,磁盘上的文件将被再次检查并更新高速缓存条目。
如果你知道你的文件永远不会在磁盘上发生变化,那么缓存条目将永远不会过期。这是默认设置。
如果您知道服务器运行时您的文件可能会在磁盘上发生更改,那么您可以将文件只读设置为falsesetFilesReadOnly
。
要在任何时候启用可以在内存中缓存的最大条目数量,请使用 setMaxCacheSize
。
配置您可以使用的缓存条目的到期时间setCacheEntryTimeout
。
配置索引页
对根路径的任何请求/
都将导致索引页面被提供。默认情况下,索引页是index.html
。这可以使用配置setIndexPage
。
更改Web根目录
默认情况下,静态资源将从目录中提供webroot
。配置此用途 setWebRoot
。
目录列表
服务器也可以执行目录列表。默认情况下,目录列表被禁用。启用它 setDirectoryListing
。
当启用目录列表时,返回的内容取决于accept
标题中的内容类型。
对于text/html
目录列表,可以使用配置用于呈现目录列表页面的模板 setDirectoryTemplate
。
禁用磁盘上的文件缓存
默认情况下,Vert.x会将从类路径提供的文件缓存到磁盘上的文件.vertx
中当前工作目录中调用的目录的子目录中。这在将服务部署为生产环境中的fatjar时非常有用,因为每次从类路径提供文件的速度可能会很慢。
在开发过程中,这可能会导致问题,就像在服务器运行时更新静态内容一样,缓存的文件将不会被更新的文件提供。
要禁用文件缓存可以提供您vert.x选项的属性fileResolverCachingEnabled
来false
。为了向后兼容,它也将该值默认为系统属性vertx.disableFileCaching
。例如,您可以在您的IDE中设置运行配置,以便在运行主类时进行设置。