Problem with embedded Tomcat and JSP compilation.

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>
 
C

Chris

Don't cross-post.

It's probably a javac/tools.jar problem.

Tomcat/Jasper uses javac.exe, which simply calls some classes in tools.jar.
Internally, Jasper uses the Ant <javac> task to invoke javac. If fork=true,
which it is by default, then it actually spins off another process, calls
javac.exe, and gets to tools.jar that way. If fork=false, then it can access
the classes directly.

Two solutions: add the directory that contains javac to your path, or set
fork=false in one of the xml config files (server.xml?).


bcassand said:
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>
 
B

bcassand

Chris said:
Don't cross-post.

Sorry for the cross-posting.
It's probably a javac/tools.jar problem.

Tomcat/Jasper uses javac.exe, which simply calls some classes in tools.jar.
Internally, Jasper uses the Ant <javac> task to invoke javac. If fork=true,
which it is by default, then it actually spins off another process, calls
javac.exe, and gets to tools.jar that way. If fork=false, then it can access
the classes directly.

Two solutions: add the directory that contains javac to your path, or set
fork=false in one of the xml config files (server.xml?).

fork=false was already set in the web.xml file of the tomcat/conf
directory, for the servlet "jsp". Adding the directory of javac in the
path changes nothing :-(
Setting the fork to true only changes the display of the message, but
the error is the same.
bcassand said:
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>
 
B

bcassand

Chris said:
Don't cross-post.

Sorry for the cross-posting.
It's probably a javac/tools.jar problem.

Tomcat/Jasper uses javac.exe, which simply calls some classes in tools.jar.
Internally, Jasper uses the Ant <javac> task to invoke javac. If fork=true,
which it is by default, then it actually spins off another process, calls
javac.exe, and gets to tools.jar that way. If fork=false, then it can access
the classes directly.

Two solutions: add the directory that contains javac to your path, or set
fork=false in one of the xml config files (server.xml?).

fork=false was already set in the web.xml file of the tomcat/conf
directory, for the servlet "jsp". Adding the directory of javac in the
path changes nothing :-(
Setting the fork to true only changes the display of the message, but
the error is the same.
bcassand said:
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>
 
M

Martin Moessner

check if "JDK_TOOLS/lib/tools.jar" is in the CLASSPATH and also
"TOMCAT_HOME/common/lib/servlet.jar"

hope this helps

martin

bcassand said:
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>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top