You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Amon <ar...@hotmail.com> on 2012/01/05 14:31:03 UTC

Httpclient 4 inside a JSP TAG

Hi all,

I have a question concerning the use of HTTPClient 4 inside a JSP Tag

It's about the creation of the DefaultHttpClient object and how to shutdown the ConnectionManager() inside a tag.

Currently i am creating a DefaultHttpClient object and shutting it down for each request to the JSP TAG.

Below a code example:


public class Example Tag extends TagSupport {

.....

    @Override    
    public int doStartTag() throws JspException {
        
         DefaultHttpClient httpclient = new DefaultHttpClient();
        try{     
        
            // Http-request
            HttpGet httpget = new HttpGet(uri);
            
            // Execute HTTP request
            LOGGER.debug("executing request: " + httpget.getURI());
            HttpResponse response = httpclient.execute(httpget);
            LOGGER.debug("Response status: "+response.getStatusLine());
       
            if( response.getStatusLine().getStatusCode() == 200) {
                //Get hold of the response entity        
                HttpEntity entity = response.getEntity();
                if (entity != null) {             
                   //write the result to the output...
                }else {
                    throw new JspException ("blabla");
                }
            }else {
                 //Do not feel like reading the response body.            
                httpget.abort();
                throw new JspException ("blabla"+ response.getStatusLine());
                
            }
        }catch(IOException ex){
            throw new JspException ("blabla",ex);
        }finally {
            //When HttpClient instance is no longer needed,
            //shut down the connection manager to ensure
            //immediate deallocation of all system resources
            httpclient.getConnectionManager().shutdown();                
        }
    } 

}


My question:
1. Is it bad (performace wise,etc) to create for each request a new DefaultHttpClient(); object? (and to shut it down!)

It's pretty easy to create one DefaultHttpClient(); for the JSP TAG. But there no way to shut it down properly if the JSP TAG is not used anymore.
(The only way the TAG will be not be used anymore is when the Application is down).

2. It's necessary to call  httpclient.getConnectionManager().shutdown();  inside a tag?
   



 		 	   		  

Re: Httpclient 4 inside a JSP TAG

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Thu, 2012-01-05 at 15:59 -0500, William Speirs wrote:
> I haven't done this type of thing in a while, but basically you have
> the reference to the HttpClient created by the SessionListener and
> then destroyed (shutdown) by it as well. If a request comes in that
> needs the client it simple gets it from the session and uses it.
> 
> http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html
> 
> Bill-
> 

I would even recommend using a ServletContextListener: create an
instance of HttpClient in #contextInitialized(), get the instance from
the servlet context whenever needed, shut down the connection manager in
#contextDestroyed() when no longer needed.

Oleg


> 2012/1/5 Yakup YÜCE <yy...@hotmail.com>:
> > How can you make a session listener for HttpClient?
> >
> > On Thu, Jan 5, 2012 at 5:00 PM, William Speirs <ws...@apache.org> wrote:
> >
> >> Could you setup a session listener and call create/shutdown there?
> >>
> >> Bill-
> >>
> >> On Thu, Jan 5, 2012 at 8:31 AM, Amon <ar...@hotmail.com> wrote:
> >> >
> >> > Hi all,
> >> >
> >> > I have a question concerning the use of HTTPClient 4 inside a JSP Tag
> >> >
> >> > It's about the creation of the DefaultHttpClient object and how to
> >> shutdown the ConnectionManager() inside a tag.
> >> >
> >> > Currently i am creating a DefaultHttpClient object and shutting it down
> >> for each request to the JSP TAG.
> >> >
> >> > Below a code example:
> >> >
> >> >
> >> > public class Example Tag extends TagSupport {
> >> >
> >> > .....
> >> >
> >> >    @Override
> >> >    public int doStartTag() throws JspException {
> >> >
> >> >         DefaultHttpClient httpclient = new DefaultHttpClient();
> >> >        try{
> >> >
> >> >            // Http-request
> >> >            HttpGet httpget = new HttpGet(uri);
> >> >
> >> >            // Execute HTTP request
> >> >            LOGGER.debug("executing request: " + httpget.getURI());
> >> >            HttpResponse response = httpclient.execute(httpget);
> >> >            LOGGER.debug("Response status: "+response.getStatusLine());
> >> >
> >> >            if( response.getStatusLine().getStatusCode() == 200) {
> >> >                //Get hold of the response entity
> >> >                HttpEntity entity = response.getEntity();
> >> >                if (entity != null) {
> >> >                   //write the result to the output...
> >> >                }else {
> >> >                    throw new JspException ("blabla");
> >> >                }
> >> >            }else {
> >> >                 //Do not feel like reading the response body.
> >> >                httpget.abort();
> >> >                throw new JspException ("blabla"+
> >> response.getStatusLine());
> >> >
> >> >            }
> >> >        }catch(IOException ex){
> >> >            throw new JspException ("blabla",ex);
> >> >        }finally {
> >> >            //When HttpClient instance is no longer needed,
> >> >            //shut down the connection manager to ensure
> >> >            //immediate deallocation of all system resources
> >> >            httpclient.getConnectionManager().shutdown();
> >> >        }
> >> >    }
> >> >
> >> > }
> >> >
> >> >
> >> > My question:
> >> > 1. Is it bad (performace wise,etc) to create for each request a new
> >> DefaultHttpClient(); object? (and to shut it down!)
> >> >
> >> > It's pretty easy to create one DefaultHttpClient(); for the JSP TAG. But
> >> there no way to shut it down properly if the JSP TAG is not used anymore.
> >> > (The only way the TAG will be not be used anymore is when the
> >> Application is down).
> >> >
> >> > 2. It's necessary to call  httpclient.getConnectionManager().shutdown();
> >>  inside a tag?
> >> >
> >> >
> >> >
> >> >
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> >> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> >>
> >>
> >>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Httpclient 4 inside a JSP TAG

Posted by William Speirs <ws...@apache.org>.
I haven't done this type of thing in a while, but basically you have
the reference to the HttpClient created by the SessionListener and
then destroyed (shutdown) by it as well. If a request comes in that
needs the client it simple gets it from the session and uses it.

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html

Bill-

2012/1/5 Yakup YÜCE <yy...@hotmail.com>:
> How can you make a session listener for HttpClient?
>
> On Thu, Jan 5, 2012 at 5:00 PM, William Speirs <ws...@apache.org> wrote:
>
>> Could you setup a session listener and call create/shutdown there?
>>
>> Bill-
>>
>> On Thu, Jan 5, 2012 at 8:31 AM, Amon <ar...@hotmail.com> wrote:
>> >
>> > Hi all,
>> >
>> > I have a question concerning the use of HTTPClient 4 inside a JSP Tag
>> >
>> > It's about the creation of the DefaultHttpClient object and how to
>> shutdown the ConnectionManager() inside a tag.
>> >
>> > Currently i am creating a DefaultHttpClient object and shutting it down
>> for each request to the JSP TAG.
>> >
>> > Below a code example:
>> >
>> >
>> > public class Example Tag extends TagSupport {
>> >
>> > .....
>> >
>> >    @Override
>> >    public int doStartTag() throws JspException {
>> >
>> >         DefaultHttpClient httpclient = new DefaultHttpClient();
>> >        try{
>> >
>> >            // Http-request
>> >            HttpGet httpget = new HttpGet(uri);
>> >
>> >            // Execute HTTP request
>> >            LOGGER.debug("executing request: " + httpget.getURI());
>> >            HttpResponse response = httpclient.execute(httpget);
>> >            LOGGER.debug("Response status: "+response.getStatusLine());
>> >
>> >            if( response.getStatusLine().getStatusCode() == 200) {
>> >                //Get hold of the response entity
>> >                HttpEntity entity = response.getEntity();
>> >                if (entity != null) {
>> >                   //write the result to the output...
>> >                }else {
>> >                    throw new JspException ("blabla");
>> >                }
>> >            }else {
>> >                 //Do not feel like reading the response body.
>> >                httpget.abort();
>> >                throw new JspException ("blabla"+
>> response.getStatusLine());
>> >
>> >            }
>> >        }catch(IOException ex){
>> >            throw new JspException ("blabla",ex);
>> >        }finally {
>> >            //When HttpClient instance is no longer needed,
>> >            //shut down the connection manager to ensure
>> >            //immediate deallocation of all system resources
>> >            httpclient.getConnectionManager().shutdown();
>> >        }
>> >    }
>> >
>> > }
>> >
>> >
>> > My question:
>> > 1. Is it bad (performace wise,etc) to create for each request a new
>> DefaultHttpClient(); object? (and to shut it down!)
>> >
>> > It's pretty easy to create one DefaultHttpClient(); for the JSP TAG. But
>> there no way to shut it down properly if the JSP TAG is not used anymore.
>> > (The only way the TAG will be not be used anymore is when the
>> Application is down).
>> >
>> > 2. It's necessary to call  httpclient.getConnectionManager().shutdown();
>>  inside a tag?
>> >
>> >
>> >
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: Httpclient 4 inside a JSP TAG

Posted by Yakup YÜCE <yy...@hotmail.com>.
How can you make a session listener for HttpClient?

On Thu, Jan 5, 2012 at 5:00 PM, William Speirs <ws...@apache.org> wrote:

> Could you setup a session listener and call create/shutdown there?
>
> Bill-
>
> On Thu, Jan 5, 2012 at 8:31 AM, Amon <ar...@hotmail.com> wrote:
> >
> > Hi all,
> >
> > I have a question concerning the use of HTTPClient 4 inside a JSP Tag
> >
> > It's about the creation of the DefaultHttpClient object and how to
> shutdown the ConnectionManager() inside a tag.
> >
> > Currently i am creating a DefaultHttpClient object and shutting it down
> for each request to the JSP TAG.
> >
> > Below a code example:
> >
> >
> > public class Example Tag extends TagSupport {
> >
> > .....
> >
> >    @Override
> >    public int doStartTag() throws JspException {
> >
> >         DefaultHttpClient httpclient = new DefaultHttpClient();
> >        try{
> >
> >            // Http-request
> >            HttpGet httpget = new HttpGet(uri);
> >
> >            // Execute HTTP request
> >            LOGGER.debug("executing request: " + httpget.getURI());
> >            HttpResponse response = httpclient.execute(httpget);
> >            LOGGER.debug("Response status: "+response.getStatusLine());
> >
> >            if( response.getStatusLine().getStatusCode() == 200) {
> >                //Get hold of the response entity
> >                HttpEntity entity = response.getEntity();
> >                if (entity != null) {
> >                   //write the result to the output...
> >                }else {
> >                    throw new JspException ("blabla");
> >                }
> >            }else {
> >                 //Do not feel like reading the response body.
> >                httpget.abort();
> >                throw new JspException ("blabla"+
> response.getStatusLine());
> >
> >            }
> >        }catch(IOException ex){
> >            throw new JspException ("blabla",ex);
> >        }finally {
> >            //When HttpClient instance is no longer needed,
> >            //shut down the connection manager to ensure
> >            //immediate deallocation of all system resources
> >            httpclient.getConnectionManager().shutdown();
> >        }
> >    }
> >
> > }
> >
> >
> > My question:
> > 1. Is it bad (performace wise,etc) to create for each request a new
> DefaultHttpClient(); object? (and to shut it down!)
> >
> > It's pretty easy to create one DefaultHttpClient(); for the JSP TAG. But
> there no way to shut it down properly if the JSP TAG is not used anymore.
> > (The only way the TAG will be not be used anymore is when the
> Application is down).
> >
> > 2. It's necessary to call  httpclient.getConnectionManager().shutdown();
>  inside a tag?
> >
> >
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>
>

Re: Httpclient 4 inside a JSP TAG

Posted by William Speirs <ws...@apache.org>.
Could you setup a session listener and call create/shutdown there?

Bill-

On Thu, Jan 5, 2012 at 8:31 AM, Amon <ar...@hotmail.com> wrote:
>
> Hi all,
>
> I have a question concerning the use of HTTPClient 4 inside a JSP Tag
>
> It's about the creation of the DefaultHttpClient object and how to shutdown the ConnectionManager() inside a tag.
>
> Currently i am creating a DefaultHttpClient object and shutting it down for each request to the JSP TAG.
>
> Below a code example:
>
>
> public class Example Tag extends TagSupport {
>
> .....
>
>    @Override
>    public int doStartTag() throws JspException {
>
>         DefaultHttpClient httpclient = new DefaultHttpClient();
>        try{
>
>            // Http-request
>            HttpGet httpget = new HttpGet(uri);
>
>            // Execute HTTP request
>            LOGGER.debug("executing request: " + httpget.getURI());
>            HttpResponse response = httpclient.execute(httpget);
>            LOGGER.debug("Response status: "+response.getStatusLine());
>
>            if( response.getStatusLine().getStatusCode() == 200) {
>                //Get hold of the response entity
>                HttpEntity entity = response.getEntity();
>                if (entity != null) {
>                   //write the result to the output...
>                }else {
>                    throw new JspException ("blabla");
>                }
>            }else {
>                 //Do not feel like reading the response body.
>                httpget.abort();
>                throw new JspException ("blabla"+ response.getStatusLine());
>
>            }
>        }catch(IOException ex){
>            throw new JspException ("blabla",ex);
>        }finally {
>            //When HttpClient instance is no longer needed,
>            //shut down the connection manager to ensure
>            //immediate deallocation of all system resources
>            httpclient.getConnectionManager().shutdown();
>        }
>    }
>
> }
>
>
> My question:
> 1. Is it bad (performace wise,etc) to create for each request a new DefaultHttpClient(); object? (and to shut it down!)
>
> It's pretty easy to create one DefaultHttpClient(); for the JSP TAG. But there no way to shut it down properly if the JSP TAG is not used anymore.
> (The only way the TAG will be not be used anymore is when the Application is down).
>
> 2. It's necessary to call  httpclient.getConnectionManager().shutdown();  inside a tag?
>
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org