代码之家  ›  专栏  ›  技术社区  ›  Sergey

如何防止在嵌入式Jetty实例中缓存静态文件?

  •  4
  • Sergey  · 技术社区  · 15 年前

    我想防止我的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 回复  |  直到 15 年前
        1
  •  4
  •   krosenvold    15 年前

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

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

    确切地 匹配你的代码你应该能从那里找到它?

        2
  •  2
  •   Community kavare    7 年前
        3
  •  1
  •   vladimir    11 年前

    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上开发,这是不阻止磁盘上的文件所必需的。

        4
  •  0
  •   riversun    7 年前

    我使用resourceHandler处理静态内容。

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