当前位置: 首页 > 知识库问答 >
问题:

防止在应用服务器上缓存.svg图像

范成周
2023-03-14

我有一个JWS应用程序,它缓存了几种不同的资源类型。但是,我不想缓存.svg图像。框架似乎不遵守我设置的服务器端缓存控制HTTP头。

我想知道是否有其他方法可以在不缓存的情况下加载.svg图像。我愿意在我的loadSVGDocument()方法中放置一个解决方案,但我的代码目前是围绕Apache Batik构建的,用于加载.svg文件。有没有一种解决方案可以在Batik库中传递带有noCache标志的输入流,类似于DocumentBuilderFactory下面提供的解决方案?

URL url = new URL(fileLocation);
URLConnection connection = url.openConnection();
// Prevent JavaWebStart from returning cached copy.
connection.setUseCaches(false);

// Now fetch the content, e.g.
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(connection.getInputStream());

这是我当前使用多个Apache Batik字段的loadSVGDocument()方法:

public void loadSVGDocument(final String url)
{
    System.out.println("THE SVG URL: " + url);
    String oldURI = null;
    if (svgDocument != null)
    {
       oldURI = svgDocument.getURL();
    }

    final ParsedURL newURI = new ParsedURL(oldURI, url);
    String theUrl = newURI.toString();
    fragmentIdentifier = newURI.getRef();

    loader = new DocumentLoader(userAgent);
    nextDocumentLoader = new SVGDocumentLoader(theUrl, loader);
    nextDocumentLoader.setPriority(Thread.NORM_PRIORITY);

    Iterator it = svgDocumentLoaderListeners.iterator();
    while (it.hasNext())
    {
       nextDocumentLoader
          .addSVGDocumentLoaderListener((SVGDocumentLoaderListener) it.next());
    }

    documentLoader = nextDocumentLoader;
    nextDocumentLoader = null;
    documentLoader.run();
}

共有1个答案

商风华
2023-03-14

有兴趣的人我可以打电话给Batik's

< code > document loader . load document(URL URL,InputStream is)

将 setUseCaches 标志设置为 false。这不仅可以加载图像,还可以相应地将其从缓存中删除。虽然从某种意义上说,这不是最好的解决方案,因为JWS尊重我的HTTP标头会很好,但这种解决方法已经足够好了。

 类似资料:
  • 我有从我的网页生成的AJAX POST请求,可能有多个POST请求具有相同的POST数据。但是响应可能会有所不同,我希望确保我没有得到这些请求的缓存响应。我需要每个请求点击网页。 我假设对POST请求的响应不会被缓存,这对吗?

  • 一直在我的 SSO 项目中集成 Kerberos 身份验证。遇到了一个奇特的场景。 我创建了一个新用户并为其附加了一个 SPN。按照这个问题的步骤进行操作,让一切正常。我的意思是:- Kinit用户名 - 然后输入密码给了我票已保存的消息。 kinit spn(int 格式为 HTTP/FQDN) - 然后输入密码给了我勾选的消息已保存。 过了一段时间,我决定再试一次,所以我使用了命令 从用户名分

  • 问题内容: 好像我使用加载动态内容,结果缓存在浏览器中。 在QueryString中添加一些随机字符串似乎可以解决此问题(我使用),但这听起来像是一种hack。 还有其他方法可以做到这一点吗?或者,如果唯一字符串是实现此目标的唯一方法,则除之外还有其他建议吗? 问题答案: 我使用,这将避免冲突,除非您在同一毫秒内发生多个请求: 编辑: 这个答案已经好几年了。它仍然有效(因此我没有删除它),但是 现

  • 我发现了与jQuery相关的类似问题。我的目标是找出如何防止jQueryMobile和PhoneGap中的缓存(我使用JSONP)。我正在进行一些ajax调用,动态地填充listview。我想在每次初始化页面(pageinit)时查询web服务。在我的android设备上,在新的查询之后,每次我进入页面时,数据都会添加到listview中。它不会删除,每次我访问页面时,我都会添加一个副本。我认为这

  • 问题内容: 我正在使用PHP开发一个简单的网站。 开发配置: WAMP 生产配置: LAMP 在测试时,我更改了CSS文件,但是当我重新加载页面时,我的浏览器(不确定)仍使用旧的缓存CSS。 我进行了一些谷歌搜索,发现了已经尝试过的其他解决方案 在CSS末尾附加查询 使用(在Firefox中)强制获取资源 禁用Firefox缓存以及使用Firefox加载项。 当这些都不起作用时,我做了更多的谷歌搜

  • 问题内容: 我正在从servlet提供图像。响应内容类型为image / jpeg。我发现从我的servlet请求的图像没有被缓存。如何使它们像文件图像请求通常那样被缓存?我尝试设置Cache- Control:public,但无济于事。 问题答案: 好的..看起来默认头字段应该启用缓存。我在另一个论坛上找到了解决方案。显然,您需要在响应中显式设置content- length。不知道为什么。我认