Как предотвратить кэширование статических файлов во встроенном экземпляре Jetty? - PullRequest
4 голосов
/ 30 марта 2009

Я хочу предотвратить кэширование моих CSS на стороне браузера. Как я могу сделать это во встроенном экземпляре Jetty?

Если бы я использовал файл конфигурации xml, я бы добавил строки вроде:

<init-param>
  <param-name>cacheControl</param-name>
  <param-value>max-age=0,public</param-value>
</init-param>

Как я могу превратить это в код?

Прямо сейчас я запускаю причал следующим образом:

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 );

Я думаю, мне следует поискать setControlCache где-нибудь в зоне ответственности WebAppContext.

Какие-нибудь советы по этому поводу?

Ответы [ 4 ]

4 голосов
/ 30 марта 2009

Я обычно использую ServletHolder, например:

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

Хотя это не точно , совпадает с вашим кодом, вы сможете его выяснить оттуда?

1 голос
/ 29 мая 2013

А вот и рабочий код без необходимости разбираться, угадывать и пробовать. Он предоставляется в отношении рассматриваемого кода и пристани 6. Для пристани 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();

Мой пример также устанавливает для false значение свойства useFileMappedBuffer, что необходимо для того, чтобы не блокировать файлы на диске, если вы по какой-либо причине разрабатываете для Windows.

1 голос
/ 19 декабря 2009

Дух, как сделать прямо противоположное Как настроить кэш для статических ресурсов в web.xml для Jetty? ?

0 голосов
/ 04 апреля 2017

Я использую resourceHandler для статического содержимого. Вот код, хорошо работающий на Jetty 9.

    ResourceHandler rh = new ResourceHandler();
    rh.setResourceBase([your_resource_base_dir]);
    rh.setCacheControl("no-store,no-cache,must-revalidate");
...