I suggest you need to use your "<servlet-name>" to invoke your Servlet if you
want
to use your "<init-param>",  it will force your "<init-param>" to be included,
for example:
http://xxx.xxx.xxx.xxx:8080/myapp/servlet/remoteServlet

if you use your "Servlet class name" to invoke your Servlet, for example:
http://xxx.xxx.xxx.xxx:8080/myapp/servlet/ch.hephaistos.web.RemoteServlet

now (I only have tried TC4.0),  the "default Servlet-declaration(instance)" of
your Servlet
class will be invoked, which doesn't include your "<init-param>"

if you include the <load-on-startup> tag, now I guess because it will force
your Servlet
engineer Not to use the "default Servlet-declaration(instance)", so you can get
the "<init-param>"


Bo
Oct.01, 2001




Alessandro Di Maria wrote:

> Hello!
>
> I have some problems to read the init-parameters for my servlet.
>
> I'm usign tomcat  3.2.3, mod-jk. But tested with tomcat standalone on
> port 8080.
>
> Here's my web.xml, located on TOMCAT_HOME/webapps/test/WEB-INF/
>
> <web-app>
>     <servlet>
>         <servlet-name>remoteServlet</servlet-name>
>         <servlet-class>ch.hephaistos.web.RemoteServlet</servlet-class>
>
>         <init-param>
>             <param-name>server-host</param-name>
>             <param-value>localhost</param-value>
>         </init-param>
>         <init-param>
>             <param-name>server-name</param-name>
>             <param-value>ServletServer</param-value>
>         </init-param>
>         <init-param>
>             <param-name>timeout</param-name>
>             <param-value>80000</param-value>
>         </init-param>
>         <load-on-startup>5</load-on-startup>
>     </servlet>
> </web-app>
>
> if I don't include the <load-on-startup> tag the init-param will never
> be read !
>
> and here's a snippet of my servlet code:
>
> public class RemoteServlet extends HttpServlet implements RRemoteServlet {
>
>     private String serverHost="localhost";
>
>     private String severName="ServletServer";
>
>     private RServletServer server;
>
>     private int timeout=60000;
>
>     private static int count=0;
>
>     private int number;
>
>     public void init(ServletConfig config) throws ServletException {
>         super.init(config);
>         processes = new Hashtable(5);
>
>         // config Log4J
>         String prefix =
> this.getServletContext().getRealPath("/WEB-INF/conf/");
>         Log.loadConfig(prefix+"log4j.lcf");
>         Log.log.debug("Log4J configuration laoded");
>
>         // load configuration
>         serverHost  = config.getInitParameter("server-host");
>         Log.web.info("Remote Host: "+serverHost);
>         severName   = config.getInitParameter("server-name");
>         Log.web.info("Server Name: "+severName);
>         String timeoutInit = config.getInitParameter("timeout");
>         try{
>             timeout = Integer.parseInt(timeoutInit);
>         } catch (NumberFormatException nfe){
>             timeout = 60000;
>         }
>         Log.web.info("Timeout: "+timeout);
>
>
>         // test only use DEBUG-Mode
>         count++;
>         Log.web.debug("Servlet Instance Nr."+count);
>         number=count;
>         Log.web.debug("Servlet Nr."+number);
>
>         // prepare Servlet for callbacks
>         try{
>             UnicastRemoteObject.exportObject(this);
>         } catch(RemoteException re){
>             re.printStackTrace();
>         }
>         this.lookup(serverHost,severName);
>         try{
>             this.server.register(this);
>             Log.rmi.info("Servlet registred to "+severName);
>         } catch (RemoteException re){
>             Log.rmi.fatal("Register to ["+severName+"] failed!",re);
>         }
>     }
>
> Here the output I get from Tomcat:
>
> 2001-10-01 11:56:46 - ContextManager: Adding context Ctx( /test )
> 0     DEBUG [main] hephaistos.log init - Log4J configuration laoded
> 21    INFO  [main] hephaistos.web init - Remote Host: localhost
> 21    INFO  [main] hephaistos.web init - Server Name: ServletServer
> 21    INFO  [main] hephaistos.web init - Timeout: 80000
> 21    DEBUG [main] hephaistos.web init - Servlet Instance Nr.1
> 21    DEBUG [main] hephaistos.web init - Servlet Nr.1
> 241   INFO  [main] hephaistos.rmi init - Servlet registred to ServletServer
> 2001-10-01 11:56:47 - PoolTcpConnector: Starting HttpConnectionHandler
> on 8080
> 2001-10-01 11:56:47 - PoolTcpConnector: Starting Ajp12ConnectionHandler
> on 8007
> 9594  DEBUG [Thread-21] hephaistos.log init - Log4J configuration laoded
> 9594  INFO  [Thread-21] hephaistos.web init - Remote Host: null
> 9594  INFO  [Thread-21] hephaistos.web init - Server Name: null
> 9594  INFO  [Thread-21] hephaistos.web init - Timeout: 60000
> 9594  DEBUG [Thread-21] hephaistos.web init - Servlet Instance Nr.2
> 9594  DEBUG [Thread-21] hephaistos.web init - Servlet Nr.2
> 11868 ERROR [Thread-21] hephaistos.rmi lookup - Lookup for [null] failed!
> java.rmi.UnknownHostException: Unknown host: null; nested exception is:
>         java.net.UnknownHostException: null
> java.net.UnknownHostException: null
>         at java.net.InetAddress.getAllByName0(InetAddress.java:571)
>          .....
>
> Thread [main] is launched on tomcat's startup, Thread [21] on the first
> request for this servlet.
>
> I don't understand why tomcat has initialized another intance of the
> servlet, he does it for every new request.
> If I don't read any init-params tomcat only uses one instance, even if I
> would implement the SingleThreadModel.
>
> What's wrong here?!
>
> Alessandro Di Maria


Reply via email to