Jackarta TomCat em aplicação propria

ola pessoal!

tenho um projeto aqui na empresa que fornece relatorios via web. nosso sistema é em java com janelas em swing.

das aplicações, existe uma que abre um servidor para conecção via telnet, ftp e http.

nele as requisições de http são processadas e enviadas para o cliente. o problema é que as paginas são geradas na mao, dentro da aplicação.

existe alguma forma de usar as tags de jsp no meu projeto, dentro da aplicação sem o uso de servidor tomcat?

tem como usar a api do tomcat dentro da minha aplicação?

isto deixaria minha aplicação independente de configurações externas do tomcat e alem de nao ter que refazer a parte de view, controles e model.

Use o Freemarker: http://freemarker.org/

Ou então o Velocity: http://jakarta.apache.org/velocity/

Você pode usar o Tomcat mesmo, em modo “embedded” (lembro de ter visto algo no blog de um dos colaboradores do GUJ, infelizmente perdi o bookmark), se suas páginas já estão prontas (não dá para usar o FreeMarker ou o Velocity se você já tem um site de 400 páginas JSP já prontas :wink: ), mas fica um bocado pesado.

mas como faço para integrar o tomcat na minha aplicação?

Lembro disso…Hummm…

Ah! Tah aquih…
Embedded Tomcat rocks, too!

Obrigadão Diogenes pelo link, e CV pela receita de bolo :wink:

Opiniao sincera? Se vc vai fazer isso, use o Jetty. Tomcat eh um porre :slight_smile:

Eu vi - tive de fazer uma aplicação que usava o Tomcat como serviço. É realmente “um porre”. É que eu queria iniciar o HSQLDB também na mesma JVM, e aprendi um monte de coisas sobre classloaders e porque pôr um monte de coisas que aparentemente não serão usadas no CLASSPATH nem sempre é inofensivo.

ola pessoal!

fiz testes com os demos do jetty e rodou legal, porem quando fiz minha aplicação deu um erro dizendo que web-app nao está declarado.

o docigo é o seguinte:

public class WebServer {
	public static final int PORT = 8080;
    public static final String WEBAPP_DIR = "C:/eclipse/workspace/JSups/html/";
    public static final String WEBAPP_CTX = "/doc";

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        SocketListener listener = new SocketListener();
        listener.setPort(PORT);
        server.addWebApplication(WEBAPP_CTX, WEBAPP_DIR);
        server.addListener(listener);
        server.start();
    }
}

Posta a exception aih…

cara, eu consegui rodar. fiz umas mudanças no codigo e deu certo.

public class WebServer {
	public static void main(String[] args) throws Exception {
		Server server = new Server();
		server.addListener(":8080");
		((ServletHttpContext) server.getContext("/doc")).addServlet("", "br.com.engetron.comunica.http.HelloWorldServlet");
		ServletHttpContext context = (ServletHttpContext) server.getContext("/");
		context.addServlet("*.jsp", "org.apache.jasper.servlet.JspServlet");
		context.setResourceBase("C:/eclipse/workspace/JSups/html/");
		ResourceHandler handler = new ResourceHandler();
		handler.setDirAllowed(true);
		handler.setAcceptRanges(true);
		context.addHandler(handler);
		context.addHandler(new NotFoundHandler());
		server.start();
	}
}

porem estou com outra duvida. como faço para colocar este codigo em um arquivo de configuração xml?

deste modo ficaria assim o codigo:

public class WebServer {
	public static void main(String[] args) throws Exception {
		Server server = new Server();
		server.configure("web.xml");
		server.start();
	}
}

e o xml algo do tipo:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
<Configure class="org.mortbay.jetty.Server">
  <Call name="addListener">
    <Arg>
      <New class="org.mortbay.http.SocketListener">
        <Set name="Port">
          <SystemProperty name="jetty.port" default="8080" />
        </Set>
        <Set name="MinThreads">5</Set>
        <Set name="MaxThreads">255</Set>
        <Set name="MaxIdleTimeMs">30000</Set>
        <Set name="MaxReadTimeMs">10000</Set>
        <Set name="MaxStopTimeMs">5000</Set>
        <Set name="LowResourcePersistTimeMs">5000</Set>
      </New>
    </Arg>
  </Call>
</Configure>

mas quando rodo dá vários erros.

como ficaria o XML???

Vc jah tentou passar o xml pelo construtor?

fiz algumas alterações e finalmente funcionou.

ficou assim:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN" "http://jetty.mortbay.org/configure_1_2.dtd">
<Configure class="org.mortbay.jetty.Server">
  <Call name="addListener">
    <Arg>
      <New class="org.mortbay.http.SocketListener">
        <Set name="Port" type="int">8080</Set>
        <Set name="MinThreads">5</Set>
        <Set name="MaxThreads">255</Set>
        <Set name="MaxIdleTimeMs">30000</Set>
        <Set name="MaxReadTimeMs">10000</Set>
        <Set name="MaxStopTimeMs">5000</Set>
        <Set name="LowResourcePersistTimeMs">5000</Set>
      </New>
    </Arg>
  </Call>
  <Call name="addContext">
    <Arg>
      <New class="org.mortbay.jetty.servlet.ServletHttpContext">
        <Set name="ContextPath">/</Set>
        <Set name="ResourceBase">C:/eclipse/workspace/JSups/html/</Set>
        <Call name="addServlet">
          <Arg>*.jsp</Arg>
          <Arg>org.apache.jasper.servlet.JspServlet</Arg>
        </Call>
        <Call name="addHandler">
          <Arg>
            <New class="org.mortbay.http.handler.ResourceHandler">
              <Set name="DirAllowed">true</Set>
              <Set name="AcceptRanges">true</Set>
            </New>
          </Arg>
        </Call>
        <Call name="addHandler">
          <Arg>
            <New class="org.mortbay.http.handler.NotFoundHandler" />
          </Arg>
        </Call>
      </New>
    </Arg>
  </Call>
</Configure>

so que agora quero melhorar ainda mais…
como faço para integrar struts ao jetty?

Primeiro coloca ele no teu classpath! :mrgreen:

já está tudo feito.

em http://struts.apache.org/userGuide/installation-jetty.html ensina a integrar o struts mas eu coloquei aqui e não funcionou.

tentei colocar assim no xml:

C:/eclipse/workspace/JSups/html/struts-example /struts-example/* C:/eclipse/workspace/JSups/WEB-INF/web.xml

mas retorna o erro:
Element type “web-app” is not declared

mudei para:

/struts/struts-example/* C:/eclipse/workspace/JSups/html/struts/struts-example.war C:/eclipse/workspace/JSups/WEB-INF/web.xml true

mas retorna um outro erro:
No such webapps resource file:/C:/eclipse/workspace/JSups/html/struts/struts-example.war

ta tudo colocado direitinho mas nao roda. o que será?

Dê uma olhada http://mail-archives.apache.org/mod_mbox/jakarta-tapestry-user/200403.mbox/<00e201c40775$24dc6c50$2400a8c0@turbonium> nessa thread, nao lí ainda, mas talvez tenha alguma coisa q interessa…Depois pesquiso sobre o erro e posto com mais calma…(Dúvido q a galera do GUJ nao ajude antes… :wink: )

Ps.: Suponho q existe realmente o arquivo C:/eclipse/workspace/JSups/html/struts/struts-example.war …