[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jetspeed-user
Subject:    RE: CMS - Struts
From:       "Joe Barefoot" <Joe.Barefoot () motiva ! com>
Date:       2002-10-31 23:37:57
[Download RAW message or body]

Well, I never managed to satisfactorily integrate Struts/Jetspeed, and would love to \
see it happen, but I did figure out a workaround so that you can use struts-mapped \
URLs for portlet content via proxy (any time I tried to access them directly using \
the standard ServletPortlet, the Struts Action controller would blow up as some point \
or the other).  

The ServletProxyPortlet class below uses a java.net.URL to get the content from the \
struts-mapped URL (actually, any URL will work AFAIK) and return it as an ECS \
StringElement.  It appends the sessionID to the URL correctly for Tomcat, but you \
will probably have to tweak the code for other containers.  If using Tomcat, all you \
have to do is put the class in a package and create an entry for it in one of your \
xreg files, then test with one of your struts-mapped URLs.  Thought this might be \
useful to someone.


peace,

Joe


// Use .xreg entries like so:

  <portlet-entry name="ServletProxy" hidden="false" type="abstract" \
application="false">  <classname>your.package.ServletProxyPortlet</classname>
        <media-type ref="html"/>
    </portlet-entry>

<portlet-entry name="Test" hidden="false" type="ref" parent="ServletProxy" \
                application="false">      
        <parameter name="URL" value="/someRelativePath/someAction.do" \
hidden="false"/>  </portlet-entry>
 

// portlet source code:


import org.apache.jetspeed.portal.portlets.AbstractPortlet;
import org.apache.jetspeed.util.servlet.EcsServletElement;
import org.apache.ecs.ConcreteElement;
import org.apache.ecs.ClearElement;
import org.apache.ecs.StringElement;
import org.apache.turbine.util.RunData;

import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;

/*
 * Created by IntelliJ IDEA.
 * User: Joe.Barefoot
 * Date: Oct 16, 2002
 * Time: 3:17:30 PM
 * To change this template use Options | File Templates.
 */

/**  This Portlet class uses an application context-relative URL as an input \
                parameter.  It uses data obtained from
 *   <code>org.apache.turbine.util.RunData</code> to construct an absolute URL and \
                append the session id to it.  Using this
 *   URL, it constructs a java.net.URL object, retrieves the content from it, and \
                converts the content to a String.  Finally,
 *   it returns an ECS StringElement created with this String for Jetspeed to render \
                as a portlet.  Content is returned as-is;
 *   no filtering is performed on the html before returning it.
 *
 *
 * @author Joe Barefoot
 */

//TODO:  Append the session ID in a web container-specific way.  Right now, it just \
uses jsessionid, which will work for Tomcat but probably not anything else. public \
class ServletProxyPortlet extends AbstractPortlet {
    private static final String CAT = ServletProxyPortlet.class.getName();
    private final static int BUFFER_SIZE = 2048;
    /** The name of the parameter to hold our application context-relative URL */
    public static final String URL_PARAMETER_NAME = "URL";

    public ConcreteElement getContent(RunData rundata)
    {
        String servletURL = processURL(rundata);
        String content;

        //  This is not robust for large content returns, but should work okay within \
an application context with small amounts of content.  We'll see.  try
        {

            URL url = new URL(servletURL);
            URLConnection connection = url.openConnection();
            InputStream stream = connection.getInputStream();
            BufferedInputStream in = new BufferedInputStream(stream);
            int length = 0;
            byte[] buf = new byte[BUFFER_SIZE];
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            while( (in != null) && ((length = in.read(buf)) != -1) )
            {
                // the data has already been read into buf
                out.write(buf, 0, length);
            }
            content = out.toString();
            return new StringElement(content);
        }
        catch( Exception e )
        {
            String message = "ServletInvokerPortlet: Error invoking " + servletURL + \
": " + e.getMessage();  return new StringElement(message);
        }

    }

    protected String processURL(RunData rundata)
    {
        String servletURL = getPortletConfig().getInitParameter(URL_PARAMETER_NAME);

        servletURL = "http://" + rundata.getServerName() + ":" + \
rundata.getServerPort() + rundata.getContextPath() + servletURL + ";" + "jsessionid=" \
+ rundata.getSession().getId();  return servletURL;
    }

}





> -----Original Message-----
> From: David [mailto:dreed10@neo.rr.com]
> Sent: Thursday, October 31, 2002 3:13 PM
> To: Jetspeed Users List
> Subject: Re: CMS - Struts
> 
> 
> I too would like to see a Jetspeed/Struts integration
> 
> 
> ----- Original Message -----
> From: "Christophe" <christophe.lombart@skynet.be>
> To: "Jetspeed Users List" <jetspeed-user@jakarta.apache.org>
> Sent: Thursday, October 31, 2002 3:31 AM
> Subject: Re: CMS - Struts
> 
> 
> > > Struts Action and Form classes have access to the 
> HttpServletRequest so
> > > what could be the problem to access the RunData
> > > or Jetspeed Services ? ... i don't see a problem ... 
> could you elaborate
> > > a little on what you think is the problem ?
> > 
> > I don't know Struts, it is just a question. I don't know if 
> there is a
> > issue.
> > My question was there just to know how do you plan to make this
> integration.
> > 
> > 
> > Christophe
> > 
> > 
> > --
> > To unsubscribe, e-mail:
> <mailto:jetspeed-user-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail:
> <mailto:jetspeed-user-help@jakarta.apache.org>
> > 
> > 
> 
> 
> --
> To unsubscribe, e-mail:   
<mailto:jetspeed-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:jetspeed-user-help@jakarta.apache.org>


--
To unsubscribe, e-mail:   <mailto:jetspeed-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:jetspeed-user-help@jakarta.apache.org>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic