`
cherami
  • 浏览: 205321 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

URLDataSource请求资源三次的问题

    博客分类:
  • Java
阅读更多

这个是进公司的第二个任务,由于是多个应用服务器集群,而产生pdf报表和发送邮件是通过JMS的异步方式,因此可能是服务器A产生PDF文件,而服务器B发送邮件,原来的实现是通过FileDataSource从本机取,因此有时候就不能成功发送邮件,后来修改为使用URLDataSource从自己写的一个Servlet取,但是很奇怪的是对于每个资源都会被请求三次,上网找了下,有个人也遇到同样的问题,但是他最后的解决方案不行,最后看了下URLDataSource的源代码(有兴趣的可以自己看看,注意getContentType和getInputStream的实现,每次都会开始一个新的请求),然后把URLDataSource重命名为自己的类试了下,发现getContentType方法会被调用两次,getInputStream方法被调用一次,对类稍稍做了修改,就是getContentType直接返回application/octet-stream类型,不真正请求服务器,问题解决,连带着昨天不能删除文件的问题也解决了,因为这样程序运行比较顺利,文件指针没有被占用,删除总是比较成功。
修改后的源代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.activation.DataSource;

public class MyURLDataSource implements DataSource {
    private final static String DEFAULT_CONTENT_TYPE = "application/octet-stream";

    private URL url;

    public MyURLDataSource(URL url) throws MalformedURLException,
            UnsupportedEncodingException {
        this.url = url;
    }

    public String getContentType() {
        return DEFAULT_CONTENT_TYPE;
    }

    public InputStream getInputStream() throws IOException {
        return url.openStream();
    }

    public String getName() {
        return url.getFile();
    }

    public OutputStream getOutputStream() throws IOException {
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);
        return connection.getOutputStream();
    }

}

最后需要注意的是,getInputStream被调用两次:

  • javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:177)
  • javax.activation.DataHandler.writeTo(DataHandler.java:304)

分别是保存邮件和发送邮件的时候。


作者:
解惑/Cherami
原载: URLDataSource请求资源三次的问题
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
分类: Java
分享到:
评论

相关推荐

    solr_exploit:Apache Solr远程代码执行突破(CVE-2019-0193)漏洞利用

    声明 此处提供的漏洞检测方法,文件等内容,均仅限于安全从业者在获得法律授权的情况下使用,目的是检测已授权的服务器的安全性。...文档中只有一个item元素骑士实现只执行1次命令 也可以自己启动网络服务器托

    Java邮件开发Fundamentals of the JavaMail API

    Fundamentals of the JavaMail API Presented by developerWorks, your source for great tutorials ... Table of Contents If you're viewing this document online, you can click any of the topics below ...

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    gbkfonts.zip

    将TTF 汉字字体生成可供 TeX 使用的汉字 Type1 字体的转换软件。是使用Texlive运行Ctex模板的准备工作。

    美国大学生数学建模竞赛(MCMICM)

    美国大学生数学建模竞赛(MCMICM)。

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目 支持Unity版本2018.4.2或更高 包含在 Monster Full Pack 第 1 卷中*** 该包当前包含 5 个怪物。 包括: Bufomorph Drackmahre Morphorrid Pardathrox Perderos

    二维拓扑优化设计的后处理和平滑清晰几何图形的提取

    拓扑优化结果提取、设计结果CAD重构、边界提取、设计制造一体化; 二维拓扑优化设计的后处理和平滑清晰几何图形的提取; 适用于SIMP法、水平集法等典型拓扑优化方法。

    ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+参考文章).zip

    ASP.NET《数据库原理及应用技术》课程指导平台提供一个交互性强、功能丰富的在线学习环境,以促进数据库原理及应用技术的教学与学习。 在开发过程中,平台严格遵循软件工程的思想,从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试,都经过了精心的规划和实施。源代码是平台开发的核心,它采用了ASP.NET技术,确保了平台的稳定性和可扩展性。同时,源代码也体现了良好的编程规范和风格,易于理解和维护。

    自然语言,数据清洗后存储成jsonl格式文件

    自然语言,数据清洗后存储成jsonl格式文件

    大创大纲资料.txt-大创

    大创大纲资料.txt-大创

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    小学Scratch游戏化教学的实践研究-以泰州市Y小学为例

    随着智能教育时代的到来,计算机教育击彴祀勺中小学生必不可少的课程。我国陆续出台的文件,均指向鼓励在基础教育阶段开展编程课程。Scratch软件作为一种新型编程工具,以其简单易学、趣味性强等特点深受广大青少年丿谨i喜爱。但在日常教学中发现,传统讲授式教学方式不能长期维待学生学习兴趣,妇比以往学习效果大打折扣。2022年出版的《义务 教育信息科技课程标准》中明确指出,要求教育工作者创新教学方式,创设真实情境以提高 学生学习参与度。游戏化教学这种创新型教学方式, 在与各学科良好的结合效果下,也逐渐进入信息教育者的视野。因此本研究旨在将游戏化元素融入Scratch课堂,探究 Scratch游戏化教学设计一般流程在行动中不断峦进, 以期得到有效实施的策略和建议。 通过三轮行动研究,验证了小学Scratch游戏化教学的一般流程。同时总结出游戏化教学 应用策略,包括在游戏化教学设计时需要合理制定游戏规则,以控制课堂纪律和给予学生适当激励;明确小组分工,学生各司其职,在组内合作和组间竞争中培养学生合作精神;采用多元化评价方式,综合运用纸笔测试和个性创作等方法自评与他评相结合的方式,增强学 生自主学习能

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    纯CSS打造相册效果项目完整源码

    纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体方法:在抽象类中实现算法中不变的部分,这些方法通常是私有的,以避免子类对其进行修改。 抽象方法:在抽象类中声明一些抽象方法,这些方法是为了在子类中实现特定于子类的步骤。 钩子:可以提供一些默认实现的方法,这些方法通常为空或者包含默认逻辑,子类可以选择性地覆盖这些方法。 不变性:为了防止子类改变模板方法中的算法结构,可以将模板方法定义为 final,这样确保了算法结构的不变性。 总的来说,模板方法模式的目的是通过让子类重写某些步骤来增加新功能,同时保持算法的结构不变。这种模式在Java等面向对象的语言中非常常见,它利用了多态性来实现灵活的设计,使得子类可以在不改变算法结构的情况下,重定义算法的某些特定步骤。

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

Global site tag (gtag.js) - Google Analytics