Java 从浏览器中用outlook打开.ics文件

Java 从浏览器中用outlook打开.ics文件,java,jsp,outlook,icalendar,ical4j,Java,Jsp,Outlook,Icalendar,Ical4j,我正在开发一个导出日历的应用程序。我遇到的问题是,日历是下载的,而不是用Outlook打开的。这是我的密码: 1) 主页中有一个用于导出日历的图像链接: <img src="/calendar.png" width="32" Style="width: 32px; height:32px;" title="Calendar" onClick="javascript:document.getElementById('exportCal').submit();"> <form i

我正在开发一个导出日历的应用程序。我遇到的问题是,日历是下载的,而不是用Outlook打开的。这是我的密码:

1) 主页中有一个用于导出日历的图像链接:

<img src="/calendar.png" width="32" Style="width: 32px; height:32px;" title="Calendar" onClick="javascript:document.getElementById('exportCal').submit();">

<form id="exportCal" action="Calendar.jsp" target="_blank" method="post">
    <INPUT TYPE="hidden" ID="calendarData" NAME="calendarData" VALUE=""/>
</form>
然后,下载.ics。但我真正想做的是用Outlook打开它。有办法吗


提前谢谢

这似乎是特定于浏览器的行为。避免自动下载(在chrome中)的唯一方法是使用webcal协议。Webcal通常仅用于动态日历订阅,而不是静态日历项。如果您在下载后打开ICS-它应该在Outlook中打开

A


我知道webcal协议,但我认为它只适用于静态文件。因为为了放置这样的链接,您应该在之前创建(并存储)文件,然后链接到它。因此,每次打开带有链接的页面时,都会生成一个新的日历文件(每个用户的日历文件不同),可以下载,也可以不下载。另外,我也尝试过这个解决方案,但我不知道如何将文件保存在服务器中,以便以后可以下载。如果我错了,请纠正我,并指出正确的方向,因为我是jsp的新手。谢谢!!在当前Firefox中,我得到:阻止导航到“webcal://www.mydomain/myscript“由于未知协议。关于这一点的政策显然发生了变化:
response.setHeader ("Content-Disposition", "inline;filename=\"mycalendar.ics\"");
response.setContentType("text/calendar");

Calendar calendar = new Calendar();
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(CalScale.GREGORIAN);

java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
cal.set(java.util.Calendar.DAY_OF_MONTH, 25);

// initialise as an all-day event..
VEvent christmas = new VEvent(new Date(cal.getTime()), "Christmas Day");

// Generate a UID for the event..
UidGenerator ug = new UidGenerator("1");
christmas.getProperties().add(ug.generateUid());

calendar.getComponents().add(christmas);
System.out.println(calendar);

ServletOutputStream fout = response.getOutputStream();

CalendarOutputter outputter = new CalendarOutputter();
outputter.output(calendar, fout);

fout.flush();