B
bcassand
Hi,
I wrote an application running an embedded Tomcat, based on the sample
code of the onJava site (an org.apache.catalina.startup.Embedded class
with manual configuration of things usually found in server.xml). I
use Tomcat 4.1.27 and Java 1.3.1.
Tomcat starts well, but is not able to compile JSP page. It displays
the following error:
<code>
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 4 in the jsp file: /index.jsp
Generated servlet error:
[javac] Compiling 1 source file
C:\test\tomcat\work\_\localhost\_\index_jsp.java:3: package
javax.servlet does not exist
import javax.servlet.*;
^
....
</code>
and so on for all import statements. It looks like a classpath
problem, but I set the classpath with all the jar files in
tomcat/common/lib, in tomcat/server/lib, in tomcat/common/endorsed,
bootstrap.jar, the tools.jar of java. I set it in the environment
CLASSPATH variable and in the classpath of the jar of my application.
And the classpath is set, because if not, Tomcat cannot be launched.
So I probably missed something, but what?
Below you can see the code of my class and the code of the main
function:
<code of class EmbeddedTomcat>
import org.apache.catalina.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.Deployer;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.logger.SystemOutLogger;
import org.apache.catalina.startup.Embedded;
import org.apache.catalina.Container;
public class EmbeddedTomcat
{
private String path = null;
private Embedded embedded = null;
private Host host = null;
public EmbeddedTomcat()
{
}
public void setPath( String path)
{
this.path = path;
}
public String getPath()
{
return( path);
}
public void startTomcat() throws Exception
{
Engine engine = null;
Context context = null;
System.setProperty( "catalina.home", getPath());
System.setProperty( "catalina.base", getPath());
embedded = new Embedded();
embedded.setDebug( 0);
embedded.setLogger( new SystemOutLogger());
engine = embedded.createEngine();
engine.setDefaultHost( "localhost");
host = embedded.createHost( "localhost", "webapps");
engine.addChild( host);
context = embedded.createContext( "", "c:/test/root");
host.addChild( context);
embedded.addEngine( engine);
Connector connector = embedded.createConnector( null, 8080,
false);
embedded.addConnector( connector);
embedded.start();
}
public void stopTomcat() throws Exception
{
embedded.stop();
}
}
</code>
<code in main function of my application>
EmbeddedTomcat tomcat = new EmbeddedTomcat();
tomcat.setPath( m_config.getString( "tomcat.home"));
try
{
tomcat.startTomcat();
}
catch( Exception error)
{
logger.fatal( "Unable to start tomcat.", error);
return;
}
</code>
I wrote an application running an embedded Tomcat, based on the sample
code of the onJava site (an org.apache.catalina.startup.Embedded class
with manual configuration of things usually found in server.xml). I
use Tomcat 4.1.27 and Java 1.3.1.
Tomcat starts well, but is not able to compile JSP page. It displays
the following error:
<code>
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 4 in the jsp file: /index.jsp
Generated servlet error:
[javac] Compiling 1 source file
C:\test\tomcat\work\_\localhost\_\index_jsp.java:3: package
javax.servlet does not exist
import javax.servlet.*;
^
....
</code>
and so on for all import statements. It looks like a classpath
problem, but I set the classpath with all the jar files in
tomcat/common/lib, in tomcat/server/lib, in tomcat/common/endorsed,
bootstrap.jar, the tools.jar of java. I set it in the environment
CLASSPATH variable and in the classpath of the jar of my application.
And the classpath is set, because if not, Tomcat cannot be launched.
So I probably missed something, but what?
Below you can see the code of my class and the code of the main
function:
<code of class EmbeddedTomcat>
import org.apache.catalina.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.Deployer;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.logger.SystemOutLogger;
import org.apache.catalina.startup.Embedded;
import org.apache.catalina.Container;
public class EmbeddedTomcat
{
private String path = null;
private Embedded embedded = null;
private Host host = null;
public EmbeddedTomcat()
{
}
public void setPath( String path)
{
this.path = path;
}
public String getPath()
{
return( path);
}
public void startTomcat() throws Exception
{
Engine engine = null;
Context context = null;
System.setProperty( "catalina.home", getPath());
System.setProperty( "catalina.base", getPath());
embedded = new Embedded();
embedded.setDebug( 0);
embedded.setLogger( new SystemOutLogger());
engine = embedded.createEngine();
engine.setDefaultHost( "localhost");
host = embedded.createHost( "localhost", "webapps");
engine.addChild( host);
context = embedded.createContext( "", "c:/test/root");
host.addChild( context);
embedded.addEngine( engine);
Connector connector = embedded.createConnector( null, 8080,
false);
embedded.addConnector( connector);
embedded.start();
}
public void stopTomcat() throws Exception
{
embedded.stop();
}
}
</code>
<code in main function of my application>
EmbeddedTomcat tomcat = new EmbeddedTomcat();
tomcat.setPath( m_config.getString( "tomcat.home"));
try
{
tomcat.startTomcat();
}
catch( Exception error)
{
logger.fatal( "Unable to start tomcat.", error);
return;
}
</code>