GVKun编程网logo

java.lang.IllegalStateException:此请求已调用getReader()(请求调用失败)

12

本文将介绍java.lang.IllegalStateException:此请求已调用getReader的详细情况,特别是关于的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个

本文将介绍java.lang.IllegalStateException:此请求已调用getReader的详细情况,特别是关于的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android – java.lang.IllegalStateException:递归调用getWritableDatabase、ava.lang.IllegalStateException:此响应已调用getOutputStream()、Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException、HttpServletRequest.getHeader("X-Real-IP")报错java.lang.IllegalStateException的知识。

本文目录一览:

java.lang.IllegalStateException:此请求已调用getReader()(请求调用失败)

java.lang.IllegalStateException:此请求已调用getReader()(请求调用失败)

我想将日志记录添加到Servlet中,因此我创建了Filter,该过滤器应显示请求并转到Servlet。但不幸的是,我遇到了例外:

java.lang.IllegalStateException: getReader() has already been called for this request    at org.apache.catalina.connector.Request.getInputStream(Request.java:948)    at org.apache.catalina.connector.RequestFacade.getInputStream(RequestFacade.java:338)    at com.noelios.restlet.ext.servlet.ServletCall.getRequestEntityStream(ServletCall.java:190)

因此,要解决此问题,我发现了Wrapper的解决方案,但它不起作用。我还能在代码中使用/更改什么?有任何想法吗?

[MyHttpServletRequestWrapper]

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper{    public MyHttpServletRequestWrapper(HttpServletRequest request)    {        super(request);    }    private String getBodyAsString()    {        StringBuffer buff = new StringBuffer();        buff.append(" BODY_DATA START [ ");        char[] charArr = new char[getContentLength()];        try        {            BufferedReader reader = new BufferedReader(getReader());            reader.read(charArr, 0, charArr.length);            reader.close();        }        catch (IOException e)        {            e.printStackTrace();        }        buff.append(charArr);        buff.append(" ] BODY_DATA END ");        return buff.toString();    }    public String toString()    {        return getBodyAsString();    }}

[MyFilter]

public class MyFilterimplements Filter{    @Override    public void init(FilterConfig filterConfig) throws ServletException    {    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException    {        final HttpServletRequest httpServletRequest = (HttpServletRequest) request;        final HttpServletResponse httpServletResponse = (HttpServletResponse) response;        final HttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(httpServletRequest);        final String requestBody = requestWrapper.toString();        chain.doFilter(request, response);    }}

答案1

小编典典

看起来restlet框架已经调用getRequestEntityStream()了Request对象,而该对象又被调用getInputStream(),因此getReader()对请求的调用将抛出IllegalStateException。用于getReader()和getInputStream()的Servlet
API文档说:

 public java.io.BufferedReader getReader()    ...    ...Throws:    java.lang.IllegalStateException - if getInputStream() method has been called on this request public ServletInputStream getInputStream()    ...    ...    Throws:    java.lang.IllegalStateException - if the getReader() method has already been called for this request

从文档看来,我们不能同时对Request对象调用getReader()和getInputStream()。我建议您使用getInputStream()而不是getReader()包装。

android – java.lang.IllegalStateException:递归调用getWritableDatabase

android – java.lang.IllegalStateException:递归调用getWritableDatabase

请帮我解决错误:

D/AndroidRuntime(836): Shutting down VM
W/dalvikvm(836): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime(836): FATAL EXCEPTION: main
E/AndroidRuntime(836): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.FirstProject/com.example.FirstProject.List}: java.lang.IllegalStateException: getWritableDatabase called recursively
E/AndroidRuntime(836):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(836):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(836):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(836):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(836):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(836):  at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(836):  at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(836):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(836):  at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(836):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(836):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(836):  at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(836): Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively
E/AndroidRuntime(836):  at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:81)
E/AndroidRuntime(836):  at com.example.FirstProject.Database.onCreate(Database.java:36)
E/AndroidRuntime(836):  at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:106)
E/AndroidRuntime(836):  at android.database.sqlite.sqliteOpenHelper.getReadableDatabase(sqliteOpenHelper.java:158)
E/AndroidRuntime(836):  at com.example.FirstProject.List.onCreate(List.java:38)
E/AndroidRuntime(836):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(836):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(836):  ... 11 more

码:

package com.example.FirstProject;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.listadapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;



public class List extends ListActivity{
ListView stations;
protected int tn;
protected TextView source;
protected EditText searchText;
protected listadapter adapter;
protected Cursor cursor;


 @Override
    public void onCreate(Bundle savedInstanceState)throws IllegalStateException {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.screen2);

       tn = getIntent().getIntExtra("tn",0);
       sqliteDatabase db = (new Database(this)).getReadableDatabase();
      // searchText = (EditText) findViewById (android.R.id.list);
        stations = (ListView) findViewById (android.R.id.list);


        Cursor cursor = db.rawQuery("SELECT source._id,FROM tinfo WHERE city._id =     Mumbai",new String[]{});
        startManagingCursor(cursor);

        adapter = new SimpleCursorAdapter(this,R.layout.screen2,cursor,new     String[] {},new int[] {});
        stations.setAdapter(adapter);

 }

}

解决方法

您可能在sqliteOpenHelper实现的onCreate()或onUpgrade()方法之一中调用getWritableDatabase()(或getReadableDatabase()). getWritableDatabase()调用onCreate(或onUpgrade),因此如果您在其中一种方法中调用了getWritableDatabase(),则会遇到麻烦.

这些方法有一个参数(sqliteDatabase对象),您必须使用该参数来执行数据库逻辑(因此您不能在其中调用getWritableDatabase()(或getReadableDatabase()).

ava.lang.IllegalStateException:此响应已调用getOutputStream()

ava.lang.IllegalStateException:此响应已调用getOutputStream()

    String contenttype = rs.getString("contentType");    String filename = rs.getString("fileName");    response.setContentType(contenttype);    response.setHeader("Content-disposition","attachment;filename=" + filename.replace(''"'', '' ''));    java.io.InputStream instream = rs.getBinaryStream("fileData");    byte[] b = new byte[1000];    while (instream.read(b) > 0) {        try {            response.getOutputStream().write(b);        }        catch(Exception e) {}    }    try {        response.getOutputStream().flush();    }    catch(Exception e) {}

答案1

小编典典

通常,它应该允许调用response.getOutputStream()任意次。我认为您同时呼叫response.getOutputStream()response.getWriter()

请检查您是否正在呼叫response.getWriter()任何地方,或者该请求是否正在写入的JSP中进行response.getWriter()

Exception in thread

Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException

Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at java.lang.ref.ReferenceQueue.enqueue(ReferenceQueue.java:73)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:171)

HttpServletRequest.getHeader(

HttpServletRequest.getHeader("X-Real-IP")报错java.lang.IllegalStateException

定时任务(就一个定时任务)调一个service,service中注入了HttpServletRequest  request作为参数,定时任务进入方法时,参数request为Current HttpServletRequest,request.getHeader("X-Real-IP")时就报错了,两个类似的项目,配置基本相同,另一个却没事。希望各路大神能给指点一下迷津。

异常信息:

java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
        at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
        at org.springframework.web.context.support.WebApplicationContextUtils.currentRequestAttributes(WebApplicationContextUtils.java:271)
        at org.springframework.web.context.support.WebApplicationContextUtils.access$0(WebApplicationContextUtils.java:270)
        at org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory.getObject(WebApplicationContextUtils.java:286)
        at org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory.getObject(WebApplicationContextUtils.java:1)
        at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:178)

        .................

方法就是普通的方法:

public static String getRemoteHost(HttpServletRequest request){
		if(null != request){
			try {
				String ip = request.getHeader("X-Real-IP");
			    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
			        ip = request.getHeader("x-forwarded-for");
			    }	
			    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
			        ip = request.getHeader("Proxy-Client-IP");
			    }
			    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
			        ip = request.getHeader("WL-Proxy-Client-IP");
			    }
			    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
			        ip = request.getRemoteAddr();
			    }
			    return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
				return "127.0.0.1";
			}
		}else{
			return "127.0.0.1";
		}
	}

今天关于java.lang.IllegalStateException:此请求已调用getReader的介绍到此结束,谢谢您的阅读,有关android – java.lang.IllegalStateException:递归调用getWritableDatabase、ava.lang.IllegalStateException:此响应已调用getOutputStream()、Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException、HttpServletRequest.getHeader("X-Real-IP")报错java.lang.IllegalStateException等更多相关知识的信息可以在本站进行查询。

本文标签: