5

我想防止我的 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。

对此有何建议?

4

4 回答 4

4

我通常使用 ServletHolder,如下所示:

WebAppContext context = new WebAppContext();
ServletHolder servletHolder = new ServletHolder(MyServlet.class);
servletHolder.setInitParameter("cacheControl","max-age=0,public"); 
context.addServlet(servletHolder, "myservletpath");

虽然这与您的代码不完全匹配,但您应该能够从那里弄清楚吗?

于 2009-03-30T11:07:34.160 回答
2

呃,如何做相反的事情如何为Jetty的web.xml中的静态资源配置缓存??

于 2009-12-19T17:18:21.877 回答
1

这只是一个工作代码,无需弄清楚、猜测和尝试。它是针对有问题的代码和 jetty 6 提供的。对于 jetty 7 及更高版本,需要将 Context 更改为 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 设置为 false,如果您出于任何原因在 Windows 上进行开发,这对于不阻止磁盘上的文件是必需的。

于 2013-05-28T20:41:16.077 回答
0

我将 resourceHandler 用于静态内容。这是在 Jetty 9 上运行良好的代码。

    ResourceHandler rh = new ResourceHandler();
    rh.setResourceBase([your_resource_base_dir]);
    rh.setCacheControl("no-store,no-cache,must-revalidate");
于 2017-04-04T06:03:53.977 回答