如何防止在嵌入式 Jetty 实例中缓存静态文件?
-
22-08-2019 - |
题
我想防止我的 CSS 缓存在浏览器端。我怎样才能在嵌入式 Jetty 实例中做到这一点?
如果我使用 xml 配置文件,我会添加如下行:
<init-param>
<param-name>cacheControl</param-name>
<param-value>max-age=0,public</param-value>
</init-param>
我怎样才能把它变成代码?
现在我这样启动 Jetty:
BasicConfigurator.configure();
Server server = new Server();
SocketConnector connector = new SocketConnector();
// Set some timeout options to make debugging easier.
// 1 hour
connector.setMaxIdleTime( 1000 * 60 * 60 );
connector.setSoLingerTime( -1 );
connector.setPort( 8081 );
server.setConnectors( new Connector[] { connector } );
WebAppContext bb = new WebAppContext();
bb.setServer( server );
bb.setContextPath( "/" );
bb.setWar( "src/webapp" );
server.addHandler( bb );
我想我应该在 WebAppContext 职责范围内的某个位置搜索 setControlCache 。
对此有什么建议吗?
解决方案
我通常使用一个ServletHolder,如下所示:
WebAppContext context = new WebAppContext();
ServletHolder servletHolder = new ServletHolder(MyServlet.class);
servletHolder.setInitParameter("cacheControl","max-age=0,public");
context.addServlet(servletHolder, "myservletpath");
虽然这并不究竟的满足你的代码,你应该能够从那里找到答案?
其他提示
呃,如何做相反的事情 如何在 Jetty 的 web.xml 中配置静态资源的缓存??
这只是没有必要弄清楚,猜测和尝试的工作代码。它设置在相对于所讨论的代码和码头6.对于码头7和更高的需要改变语境ServletContextHandler。
BasicConfigurator.configure();
Server server = new Server();
SocketConnector connector = new SocketConnector();
// Set some timeout options to make debugging easier.
// 1 hour
connector.setMaxIdleTime( 1000 * 60 * 60 );
connector.setSoLingerTime( -1 );
connector.setPort( 8081 );
server.setConnectors( new Connector[] { connector } );
//--- The difference with code in question starts here
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holder = new ServletHolder(defaultServlet);
holder.setInitParameter("useFileMappedBuffer", "false");
holder.setInitParameter("cacheControl", "max-age=0, public");
Context bb = new Context();
bb.setResourceBase("src/webapp");
bb.addServlet(holder, "/");
//--- Done. Caching is off!
server.addHandler( bb );
// Run server as usual with server.run();
我的样品还设置useFileMappedBuffer到这是需要在磁盘上不阻止的文件,如果你在Windows上以任何理由开发假的。
我用resourceHandler静态内容。 下面是关于码头9工作正常的码。
ResourceHandler rh = new ResourceHandler();
rh.setResourceBase([your_resource_base_dir]);
rh.setCacheControl("no-store,no-cache,must-revalidate");
不隶属于 StackOverflow