jetty临时目录调整

本文详细介绍了Jetty在查找工作目录时的搜索顺序,包括优先使用WebAppContext的临时目录、检查ServletContext属性设置的目录、Jetty base或home目录下的work文件夹,以及最后回退到系统默认的临时目录。

查找工作目录的搜索顺序如下:

1.如果WebAppContext具有指定的临时目录,请使用它。
2.如果ServletContext javax.servlet.context.tempdir设置了属性,并且目录存在,请使用它。
3.如果jetty.base/work存在目录,请使用它(仅对Jetty9.1+有效)4.如果{jetty.base}/work存在目录,请使用它(仅对Jetty 9.1+有效) 4.如果jetty.base/work使Jetty9.1+4.{jetty.home}/work目录存在,请使用它。
** 注意:从Jetty 9.1开始,现在进行此测试jetty.base/work∗5.如果ServletContextorg.eclipse.jetty.webapp.basetempdir设置了属性,并且目录存在,请使用它。>6.使用System.getProperty("java.io.tmpdir")和使用它。最简单的是#3或#4,只需work在{jetty.base}/work* 5.如果ServletContext org.eclipse.jetty.webapp.basetempdir设置了属性,并且目录存在,请使用它。> 6.使用System.getProperty("java.io.tmpdir")和使用它。 最简单的是#3或#4,只需work在jetty.base/work5.ServletContextorg.eclipse.jetty.webapp.basetempdir使>6.使System.getProperty("java.io.tmpdir")使34work{jetty.home}或下创建一个目录,${jetty.base}然后重新启动Jetty。

下一个最简单的方法是#6,java.io.tmpdir当您启动JVM for Jetty时指定您自己的。

[jetty-distribution]$ java -Djava.io.tmpdir=/var/web/work -jar start.jar
其余的要求您为该已部署的Webapp配置上下文。

详细请参考:
https://stackoverflow.com/questions/19232182/jetty-starts-in-c-temp/19232771#19232771

### 如何在 Jetty 中手动清除缓存的最佳实践 Jetty 是一种流行的嵌入式 Web 服务器和 Servlet 容器,在实际应用中可能会遇到需要手动清除其缓存的情况。以下是关于如何在 Jetty 中手动清除缓存的相关方法: #### 1. 清除静态资源缓存 Jetty 的 `DefaultServlet` 负责处理静态文件请求,并会根据配置决定是否启用缓存机制以及缓存的有效期。如果需要清除静态资源的缓存,可以通过以下方式实现: - **修改资源文件的时间戳**:更改静态文件的内容或时间戳,这样浏览器会在下一次访问时重新加载最新的版本[^5]。 - **禁用缓存控制头**:通过调整 `web.xml` 或程序化配置的方式,设置响应头中的 `Cache-Control` 和 `Expires` 属性为不缓存模式。 ```xml <filter> <filter-name>NoCacheFilter</filter-name> <filter-class>org.eclipse.jetty.servlet.NoCacheFilter</filter-class> </filter> <filter-mapping> <filter-name>NoCacheFilter</filter-name> <url-pattern>/static/*</url-pattern> </filter-mapping> ``` 上述代码片段展示了如何通过过滤器来禁用特定路径下的缓存行为。 #### 2. 清理 JSP 编译后的字节码 Jetty 在首次渲染 JSP 文件时会将其编译成对应的 `.class` 文件并保存到工作目录中。如果希望清理这些已编译的文件以强制重新编译,则可以删除相关的工作目录。默认情况下,JSP 工作目录位于 `${jetty.base}/work/` 下面。 执行以下命令可完成此操作: ```bash rm -rf ${jetty.base}/work/* ``` 需要注意的是,每次启动 Jetty 后都会重新生成新的工作目录结构,因此不会影响正常功能[^6]。 #### 3. 使用 Session 管理接口清空 HTTP Sessions 对于基于会话的应用场景来说,有时也需要主动销毁所有的活动 session 数据。借助于 Jetty 提供的标准 API 可轻松达成这一目的: ```java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; public class ClearSessionsExample { public static void main(String[] args) throws Exception { Server server = new Server(8080); // 获取上下文处理器实例 ServletContextHandler context = (ServletContextHandler)server.getHandlers()[0]; // 访问SessionManager对象 context.getSessionHandler().getSessionManager().invalidateAll(); System.out.println("所有session已被成功清除!"); } } ``` 以上代码演示了如何利用 Jetty 的内置工具批量失效当前存在的 sessions[^7]。 --- ### 总结 为了有效地管理和维护 Jetty 应用环境内的各种类型的缓存,可以从以下几个方面入手:调整静态内容分发策略、定期整理临时产生的中间产物(比如 jsp 编译结果),还有就是适时干预存活状态较长的服务端对话记录即 http sessions 。每种手段都有各自适用范围,请依据具体需求选取合适的解决办法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值