<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.util.*" %>
<html><body>
<%!
public class JSPCalendar{
Calendar calendar=null;
int year,dayOfWeek,dayOfMonth,dayOfYear,weekOfYear,weekOfMonth,hour,minute,second;
String day,time,date;
public JSPCalendar()
{
calendar=Calendar.getInstance();
Date time=new Date();
calendar.setTime(time);
}
public int getHour()
{
return calendar.get(Calendar.HOUR_OF_DAY);
}
public int getMinute()
{
return calendar.get(Calendar.MINUTE);
}
public int getSecond()
{
return calendar.get(Calendar.SECOND);
}
public int getYear()
{
return calendar.get(Calendar.YEAR);
}
public String getMonth()
{
int m=calendar.get(Calendar.MONTH)+1;
String months[]={"1","2","3","4","5","6","7","8","9","10","11","12"};
if(m>12)
return "0";
return months[m-1];
}

public String getDay()
{
int n=getDayOfWeek();
String days[]={"日","一","二","三","四","五","六"};
if(n>7)
return "星期?";
return days[n];
}
public String getDate()
{
return getYear()+"/"+getMonth()+"/"+getDayOfMonth();
}
public String getTime()
{
return getTime()+":"+getMinute()+":"+getSecond();
}
public int getDayOfMonth()
{
return calendar.get(Calendar.DAY_OF_MONTH);
}
public int getDayOfYear()
{
return calendar.get(Calendar.DAY_OF_YEAR);
}
public int getDayOfWeek()
{
return calendar.get(Calendar.DAY_OF_WEEK)-1;
}
public int getWeekOfYear()
{
return calendar.get(Calendar.WEEK_OF_YEAR);
}
public int getWeekOfMonth()
{
return calendar.get(Calendar.WEEK_OF_MONTH);
}
}
%>
<td align="center">
<%
JSPCalendar jc=new JSPCalendar();
%>
<font color="red"><%=jc.getYear()%></font>年
<font color="red"><%=jc.getMonth()%></font>月
<font color="red"><%=jc.getDate()%></font>日
星期<font color="blue"><%=jc.getDay()%></font>
</td>
</br>当前时间为<%=jc.getTime()%>
</br>今天是今年的第<%=jc.getDayOfYear()%>天
</br>本周是今年的第<%=jc.getWeekOfYear()%>周
</br>本周是本月的第<%=jc.getWeekOfMonth()%>周
</body>
</html>但是从IE中打开时确报错了:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.StackOverflowError
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:496)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause javax.servlet.ServletException: java.lang.StackOverflowError
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
org.apache.jsp.calendar_jsp._jspService(calendar_jsp.java:172)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause java.lang.StackOverflowError
org.apache.jsp.calendar_jsp$JSPCalendar.getTime(calendar_jsp.java:61)
org.apache.jsp.calendar_jsp$JSPCalendar.getTime(calendar_jsp.java:61)
org.apache.jsp.calendar_jsp$JSPCalendar.getTime(calendar_jsp.java:61)

解决方案 »

  1.   

    这里是否不对:
    </br>当前时间为<%=jc.getTime()%>
    </br>今天是今年的第<%=jc.getDayOfYear()%>天
    </br>本周是今年的第<%=jc.getWeekOfYear()%>周
    </br>本周是本月的第<%=jc.getWeekOfMonth()%>周</br>应该是<BR />吧。
    其他的再找找
      

  2.   

    怎么没人回帖??
    我帮你仔细的看过了,是你getTime()方法中写错了!!!
    应该是这样的:
           public String getTime() {
    return getHour() + ":" + getMinute() + ":" + getSecond();
    }
    而你写的是这样的:
           public String getTime() {
    return getTime() + ":" + getMinute() + ":" + getSecond();
    }
    你在方法中又调用了自己,好像就相当于死循环一样!
      

  3.   


    public String getDate()
    {
    return Integer.valueOf(getYear()).toString()+"/"+Integer.valueOf(getMonth()).toString()+"/"+Integer.valueOf(getDayOfMonth()).toString();
    }
    public String getTime()
    {
    //return getHour()+":"+getMinute()+":"+getSecond();
    return Integer.valueOf(getHour()).toString()+":"+Integer.valueOf(getMinute()).toString()+":"+Integer.valueOf(getSecond()).toString();
    }
    将这两个方法修改了。
    你原来的getYear()等方法返回的是int类型。java是强类型的,必须将int转换成String的。
    修改后的方法测试通过。
    楼主可以试一下。