请问java.lang.IllegalStateException异常,一般是什么原因导致的?

时间:2022-01-30 23:22:17
调试时候经常出现


HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.IllegalStateException
org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:399)
org.apache.jsp.do_005flogin_jsp._jspService(do_005flogin_jsp.java:158)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


note The full stack trace of the root cause is available in the Tomcat logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.19



请问这到底是什么错误导致的呀?晕死了!

3 个解决方案

#1


设置输出,在console中慢慢调试。跟你设置的try 有关

#2


请问console在哪设置呀?

#3


这里有一堆,自己找找是属于哪一个吧~!呵呵

applet的发出请求操作的时机不恰当。


从小服务程序调用 RequestDispatcher.forward() 方法或从 JSP 使用 

jsp:forward 标记时,将抛出 IllegalStateException。
小服务程序
从小服务程序调用 RequestDispatcher.forward() 方法或从 JSP 使用 

jsp:forward 标记时,将抛出 IllegalStateException。 
以下信息将出现在小服务程序错误页上: 
检测到递归错误。 
服务器不能使用指定的错误页。 请检查应用程序错误路径。 
原来的错误: 
错误信息:空 
错误代码:500 
目标小服务程序:空 
出错堆栈: 


-----------------------------------------------------------------

--------------- 
根错误-1:空 
java.lang.IllegalStateException 
com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.forward(Lja

vax/servlet 
/ServletRequest;Ljavax/servlet/ServletResponse;)V+39 

(WebApp.java:995) 
mypackage/HelloWorldServlet.service(Ljavax/servlet/ServletRequest

;Ljavax/ser 
vlet/ServletResponse;)V+0 (HelloWorldServlet.java:29) + more 

stack trace... 

在版本 3.02 中,有一个缺陷,当调用小服务程序已从响应对象获得 

ServletOutputStream 或 PrintWriter 时, RequestDispatcher.forward 

方法应已抛出一个 IllegalStateException。 但由于有缺陷,而未生成此

异常。根据 Sun 规范: 
forward 
public void forward(ServletRequest request, ServletReponse 

response) throws ServletException, IOException; 

它用于将来自此小服务程序的请求转发至 Web 服务器上的另一资源。 当

一个小服务程序对请求进行初步处理并想要让另一对象生成该响应时,此

方法很有用。 

传送至目标对象的请求对象将调整自己的请求 URL 路径和其他路径参数,

以反映目标对象的目标 URL 路径。 

若已从响应中获得 ServletOutputStream 对象或 PrintWriter 对象,则

不能使用此方法。 在这种情况下,该方法抛出 IllegalStateException。 


示例代码: 
public void service(ServletRequest req, ServletResponse res) 

throws ServletException, IOException { 
    PrintWriter out = res.getWriter(); 
    out.println(message); 
    RequestDispatcher rd = 

getServletContext().getRequestDispatcher("/myHello.jsp"); 
    rd.forward(req, res); 


现在,WebSphere 的当前版本根据 Sun 规范抛出 IllegalStateException

。 
若在从资源中获得 ServletOutputStream 或 PrintWriter 之后,由于有

缺陷,应用程序通过转发(或某个 API 或上述流程)一直在运行,则该应

用程序可能会中断,因为现在正在抛出该异常。 
在安装 WebSphere Application Server AS/400 V3.5 之前,检查应用程

序中的流程,以获取可能使用该转发的位置,并检查是否已从调用小服务

程序获得 PrintWriter 或 ServletOutputStream。 
在具有新产品版本的不同系统上测试该应用程序之前,不要在产生系统上

安装 V3.5。 

javax.servlet.http包
httpsession接口

 4、getMaxInactiveInterval

public int getMaxInactiveInterval();
 

  返加一个秒数,这个秒数表示客户端在不发出请求时,session被

Servlet引擎维持的最长时间。在这个时间之后,Servlet引擎可能被

Servlet引擎终止。如果这个session不会被终止,这个方法返回-1。

  当session无效后再调用这个方法会抛出一个IllegalStateException




5、getValue

public Object getValue(String name);
 

  返回一个以给定的名字绑定到session上的对象。如果不存在这样的绑

定,返回空值。

  当session无效后再调用这个方法会抛出一个IllegalStateException



 6、getValueNames

public String[] getValueNames();
 

  以一个数组返回绑定到session上的所有数据的名称。

  当session无效后再调用这个方法会抛出一个IllegalStateException



8、isNew

public boolean isNew();
 

  返回一个布尔值以判断这个session是不是新的。如果一个session已

经被服务器建立但是还没有收到相应的客户端的请求,这个session将被认

为是新的。这意味着,这个客户端还没有加入会话或没有被会话公认。在

他发出下一个请求时还不能返回适当的session认证信息。

  当session无效后再调用这个方法会抛出一个IllegalStateException




9、putValue

public void putValue(String name, Object value);
 

  以给定的名字,绑定给定的对象到session中。已存在的同名的绑定会

被重置。这时会调用HttpSessionBindingListener接口的valueBound方法



  当session无效后再调用这个方法会抛出一个IllegalStateException



10、removeValue

public void removeValue(String name);
 

  取消给定名字的对象在session上的绑定。如果未找到给定名字的绑定

的对象,这个方法什么出不做。 这时会调用HttpSessionBindingListener

接口的valueUnbound方法。

  当session无效后再调用这个方法会抛出一个IllegalStateException




#1


设置输出,在console中慢慢调试。跟你设置的try 有关

#2


请问console在哪设置呀?

#3


这里有一堆,自己找找是属于哪一个吧~!呵呵

applet的发出请求操作的时机不恰当。


从小服务程序调用 RequestDispatcher.forward() 方法或从 JSP 使用 

jsp:forward 标记时,将抛出 IllegalStateException。
小服务程序
从小服务程序调用 RequestDispatcher.forward() 方法或从 JSP 使用 

jsp:forward 标记时,将抛出 IllegalStateException。 
以下信息将出现在小服务程序错误页上: 
检测到递归错误。 
服务器不能使用指定的错误页。 请检查应用程序错误路径。 
原来的错误: 
错误信息:空 
错误代码:500 
目标小服务程序:空 
出错堆栈: 


-----------------------------------------------------------------

--------------- 
根错误-1:空 
java.lang.IllegalStateException 
com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.forward(Lja

vax/servlet 
/ServletRequest;Ljavax/servlet/ServletResponse;)V+39 

(WebApp.java:995) 
mypackage/HelloWorldServlet.service(Ljavax/servlet/ServletRequest

;Ljavax/ser 
vlet/ServletResponse;)V+0 (HelloWorldServlet.java:29) + more 

stack trace... 

在版本 3.02 中,有一个缺陷,当调用小服务程序已从响应对象获得 

ServletOutputStream 或 PrintWriter 时, RequestDispatcher.forward 

方法应已抛出一个 IllegalStateException。 但由于有缺陷,而未生成此

异常。根据 Sun 规范: 
forward 
public void forward(ServletRequest request, ServletReponse 

response) throws ServletException, IOException; 

它用于将来自此小服务程序的请求转发至 Web 服务器上的另一资源。 当

一个小服务程序对请求进行初步处理并想要让另一对象生成该响应时,此

方法很有用。 

传送至目标对象的请求对象将调整自己的请求 URL 路径和其他路径参数,

以反映目标对象的目标 URL 路径。 

若已从响应中获得 ServletOutputStream 对象或 PrintWriter 对象,则

不能使用此方法。 在这种情况下,该方法抛出 IllegalStateException。 


示例代码: 
public void service(ServletRequest req, ServletResponse res) 

throws ServletException, IOException { 
    PrintWriter out = res.getWriter(); 
    out.println(message); 
    RequestDispatcher rd = 

getServletContext().getRequestDispatcher("/myHello.jsp"); 
    rd.forward(req, res); 


现在,WebSphere 的当前版本根据 Sun 规范抛出 IllegalStateException

。 
若在从资源中获得 ServletOutputStream 或 PrintWriter 之后,由于有

缺陷,应用程序通过转发(或某个 API 或上述流程)一直在运行,则该应

用程序可能会中断,因为现在正在抛出该异常。 
在安装 WebSphere Application Server AS/400 V3.5 之前,检查应用程

序中的流程,以获取可能使用该转发的位置,并检查是否已从调用小服务

程序获得 PrintWriter 或 ServletOutputStream。 
在具有新产品版本的不同系统上测试该应用程序之前,不要在产生系统上

安装 V3.5。 

javax.servlet.http包
httpsession接口

 4、getMaxInactiveInterval

public int getMaxInactiveInterval();
 

  返加一个秒数,这个秒数表示客户端在不发出请求时,session被

Servlet引擎维持的最长时间。在这个时间之后,Servlet引擎可能被

Servlet引擎终止。如果这个session不会被终止,这个方法返回-1。

  当session无效后再调用这个方法会抛出一个IllegalStateException




5、getValue

public Object getValue(String name);
 

  返回一个以给定的名字绑定到session上的对象。如果不存在这样的绑

定,返回空值。

  当session无效后再调用这个方法会抛出一个IllegalStateException



 6、getValueNames

public String[] getValueNames();
 

  以一个数组返回绑定到session上的所有数据的名称。

  当session无效后再调用这个方法会抛出一个IllegalStateException



8、isNew

public boolean isNew();
 

  返回一个布尔值以判断这个session是不是新的。如果一个session已

经被服务器建立但是还没有收到相应的客户端的请求,这个session将被认

为是新的。这意味着,这个客户端还没有加入会话或没有被会话公认。在

他发出下一个请求时还不能返回适当的session认证信息。

  当session无效后再调用这个方法会抛出一个IllegalStateException




9、putValue

public void putValue(String name, Object value);
 

  以给定的名字,绑定给定的对象到session中。已存在的同名的绑定会

被重置。这时会调用HttpSessionBindingListener接口的valueBound方法



  当session无效后再调用这个方法会抛出一个IllegalStateException



10、removeValue

public void removeValue(String name);
 

  取消给定名字的对象在session上的绑定。如果未找到给定名字的绑定

的对象,这个方法什么出不做。 这时会调用HttpSessionBindingListener

接口的valueUnbound方法。

  当session无效后再调用这个方法会抛出一个IllegalStateException