我想阻止我的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。
有关于此的任何建议吗?
答案 0 :(得分:4)
我通常使用ServletHolder,如下所示:
WebAppContext context = new WebAppContext();
ServletHolder servletHolder = new ServletHolder(MyServlet.class);
servletHolder.setInitParameter("cacheControl","max-age=0,public");
context.addServlet(servletHolder, "myservletpath");
虽然 完全与您的代码匹配,但您应该能够从中找到它吗?
答案 1 :(得分:1)
答案 2 :(得分: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上进行开发,则不需要阻止磁盘上的文件。
答案 3 :(得分:0)
我使用resourceHandler作为静态内容。 这是Jetty 9上正常运行的代码。
ResourceHandler rh = new ResourceHandler();
rh.setResourceBase([your_resource_base_dir]);
rh.setCacheControl("no-store,no-cache,must-revalidate");