我必须将以下PHP脚本转换为JSP scriplet:
<?php
$cache_expire = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: max-age=".$cache_expire);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
?>
我能够做到:
<%! long cacheExpire = 60*60*24*365; %>
<%
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=" + cacheExpire);
response.setHeader("Expires", "....?..."); // what do I put in the second string ?
%>
但是我无法将PHP脚本中的最后一个语句转换为JSP。我只是在Java中理解这一点:
new GregorianCalendar().getTime() + cacheExpire
但这是不正确的。
如何将PHP的最后一个语句转换为Java语句?
答案 0 :(得分:1)
这与上面的PHP代码完全等效:
<%! long cacheExpire = 60*60*24*365; %>
<%
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=" + cacheExpire);
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
long expire = (long) System.currentTimeMillis() + (cacheExpire * 1000);
String expires = df.format(new Date(expire)) + " GMT";
response.setHeader("Expires", expires);
%>
棘手的部分是在java和php的不同日期格式标记之间转换并在GMT时区获取java日期,希望你发现它有用: - )
答案 1 :(得分:0)
试试这个:
response.setDateHeader("Expires", System.currentTimeMillis() + cacheExpire);
答案 2 :(得分:0)
您必须使用Calender.get(Calendar.YEAR)
等来实现此目的。没有办法用Java中的方式表达Java中的日期格式,但是,您可以获得相同的字段值。
答案 3 :(得分:0)
您应该使用SimpleDateFormat
类来格式化Java中的Date
对象。例如,请检查以下代码,将stringDatePattern
替换为有效的日期格式,例如"yyyy-MM-dd"
。
new SimpleDateFormat(stringDatePattern).format(new Date()) + cacheExpire
在上面的代码段中,new Date()
返回当前时间,根据传递的模式使用SimpleDateFormat
格式化。然后你只是连接cacheExpire
变量。
答案 4 :(得分:0)
该示例完全符合您的要求:
int cacheExpire = 60 * 60 * 24 * 365;
Calendar cal = Calendar.getInstance();
cal.add( Calendar.SECOND, cacheExpire );
SimpleDateFormat format = new SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss 'GMT'" );
format.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
response.setHeader( "Expires", format.format( cal.getTime() ) );