Montando um ambiente utilizando Tomcat + Java + MySQL (Debian)

Como a maioria de meus artigos, venho compartilhar a experiência adquirida na tentativa de executar determinada tarefa quando não encontro um artigo que mostre os passos de forma simples para a execução. Neste mostrarei como montar um ambiente que hospede um site em Java no Debian.

[ Hits: 53.439 ]

Por: Geraldo José Ferreira Chagas Júnior em 30/06/2009 | Blog: http://prginfo.blogspot.com


Configurando o Tomcat



Primeiro vamos verificar qual diretório home do Tomcat, para isso basta entrar no arquivo /etc/init.d/tomcat5.5 e ver as variáveis de instalação.

# more /etc/init.d/tomcat5.5

Aparecerá algo como:

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=tomcat5.5
DESC="Tomcat servlet engine"
CATALINA_HOME=/usr/share/$NAME
DAEMON=$CATALINA_HOME/bin/catalina.sh
DEFAULT=/etc/default/$NAME

Ou seja, neste caso a pasta home é /usr/share/tomcat5.5.

Vamos alterar o usuário e a senha do administrador.

Edite o arquivo /usr/share/tomcat5.5/conf/tomcat-users.xml e substitua seu conteúdo por:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="123456" roles="admin,manager"/>
</tomcat-users>

Salve o arquivo e reinicie o Tomcat com o comando:

# /etc/init.d/tomcat5.5 restart

Feito isso podemos acessar a página de configuração do Tomcat:
Linux: Montando um ambiente utilizando Tomcat+Java+mysql (Debian)
# lynx localhost:8180

Ir no link "Status", digitar o usuário admin e senha 123456.

Vá no link "List Applications" para ver as aplicações que estão em execução.

Página anterior     Próxima página

Páginas do artigo
   1. Ferramentas necessárias
   2. Instalação das ferramentas
   3. Configurando o Tomcat
   4. Criando nossa aplicação para teste
   5. Conectando ao MySQL
Outros artigos deste autor

Vírus de computador e criação de um vírus em C/C++ (parte 1 - básico)

Instalando e configurando o aMule (Debian)

Inicialização e interrupção do sistema (Debian)

Linvox - Sistema Linux voltado para deficientes visuais

Configurando Servidor de Nomes - DNS (Debian)

Leitura recomendada

Conceito OOP no Java

Programação orientada a objetos e o Java (parte 1)

Programação orientada a objetos e o Java (parte 4)

Swing e gerenciadores de layout

Android e Eclipse no Ubuntu 11.10 - Problemas? Eis a solução

  
Comentários
[1] Comentário enviado por michel5670 em 30/06/2009 - 21:33h

Colega muito bom seu artigo veio em boa hora pois eu estava com dificuldades de instalar e configurar o debian,seu artigo está muito bem explicado e com um assunto de interesse de uma grande maioria prova disso e o artigo acabar de ser postado e ja ter mais de 150 acessos Parabéns!!!

[2] Comentário enviado por maran em 01/07/2009 - 08:51h

Caracas Geraldo,
eu ainda não tinha visto um artigo do genero, sobre Tomcat integrado ao MySQL, muito bom!
Bem explicado, e de grande valia a muito, isso ae, show de bola,
Abraços

[3] Comentário enviado por gjr_rj em 01/07/2009 - 09:27h

Olá pessoal, venho informar que o artigo se encontra pela metade, está faltando informações. Vou avisar a equipe de moderadores do VOL.

[4] Comentário enviado por gjr_rj em 01/07/2009 - 09:42h

Pedi para incluirem o restante do arquivo, mas enquanto isso não acontece, estou colocando aqui. Seria incluido no link 5 "Conectando ao Mysql", no final.

-----------------------------------------------

Salve o arquivo e em seu browser, acesse a url hocalhost:8180/teste

Aparecerá a página:

Olá mundo !!!
1 + 1 = 2

Erro drive
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

Mas como o drive é encontrado em nossa aplicação e não é encontrado em nossa página ? O motivo é que nossa aplicação procura pelo CLASSPATH já as páginas tem é limitada a buscar no diretório padrão ou no diretório de nosso projeto.

Então, basta copiar o arquivo com o drive para o diretório <CATALINA_HOME>/common/lib, porém aqui iremos apenas criar um link simbólico para o arquivo.

# cd /usr/share/tomcat5.5/common/lib
# ln -s ../../../java/mysql-connector-java-5.0.4.jar mysql-connector-java.jar

Reinicie o tomcat
# /etc/init.d/tomcat5.5 restart

Tente novamente acessar a URL localhost:8180/teste
Desta vez o resultado será:

Olá mundo !!!
1 + 1 = 2

Drive encontrado!!!

Vamos continuar nosso exemplo de teste, aumentando o código.
Edite novamente o arquivo /var/www/teste/index.jsp

Agora, vamos modificá-lo deixando com o seguinte código:

<%@page import="java.sql.*"%>
Olá mundo !!!<br>
1 + 1 = ${1+1}
<br>

<%
String url = "jdbc:mysql://localhost:3306/dbTeste"; //string de conexão a base dbTeste
String user = "root"; //usuário da base de dados
String pwd = "123456";//senha do usuário criado
try
{
Class.forName("com.mysql.jdbc.Driver");
out.println("<br>Drive carregado com sucesso!!!<br>");
try
{
Connection cn = DriverManager.getConnection(url, user, pwd);
out.println("<br>Conexao estabelecida!!!<br>");
String sql = "select * from tbTeste";
Statement stm = cn.createStatement();
try
{
ResultSet rs = stm.executeQuery(sql);
while (rs.next())
{
out.println( " - " + rs.getString("codteste"));
}
}
catch (Exception ex)
{
out.println("<br>Erro no Select!!!<br>" + ex.printStackTrace());
}
}
catch (Exception ex)
{
out.println("<br>Erro na conexao!!!<br>" + ex.printStackTrace());
}
}
catch (ClassNotFoundException ex)
{
out.println("<br>Erro na conexao com a base de dados!!!<br>" + ex.printStackTrace());
}
catch (Exception ex)
{
out.println("<br>Drive nao pode ser carregado!!!<br>" + ex.printStackTrace());
}
out.println("<br>Olá Base!!!<br>");
}

%>

Ao acessarmos a URL localhost:8081/teste nos depararemos com a seguinte mensagem:

Olá mundo !!!
1 + 1 = ${1+1}

Erro na conexão

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.security.AccessControlException MESSAGE: access denied (java.net.SocketPermission localhost resolve) STACKTRACE: java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264) at java.security.AccessController.checkPermission(AccessController.java:427) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1031) at java.net.InetAddress.getAllByName0(InetAddress.java:1134) at java.net.InetAddress.getAllByName(InetAddress.java:1072) at java.net.InetAddress.getAllByName(InetAddress.java:1008) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:138) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:277) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2668) at com.mysql.jdbc.Connection.(Connection.java:1531) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.jsp.index_jsp._jspService(index_jsp.java:65) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275) at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245) at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:177) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595) ** END NESTED EXCEPTION ** Last packet sent to the server was 52 ms ago.

Felizmente, se tudo correu bem até aqui, esse será nosso último erro.

Teremos que liberar a permissão de conexão.

As permissões estão definidas no arquivo "$CATALINA_BASE/conf/catalina.policy", neste caso em /usr/share/tomcat5.5/conf/catalina.policy.

Seria só alterar esse arquivo, mas se verificarmos nosso daemon (/etc/init.d/tomcat5.5), veremos que este arquivo e montado na inicialização do tomcat, pois encontraremos a seguinte linha:

cat /etc/tomcat5.5/policy.d/*.policy \
>> "$CATALINA_BASE/conf/catalina.policy"

Ou seja, não adianta modificar o arquivo /usr/share/tomcat5.5/conf/catalina.policy, pois quando iniciarmos o tomcat esse arquivo será refeito. Na inicialização, o conteúdo do arquivo "$CATALINA_BASE/conf/catalina.policy" é substituindo pelo conteúdo de todos os arquivos ".policy" do diretório /etc/tomcat5.5/policy.d/. Então, a linha abaixo nós poderemos incluir dentro de um arquivo ".policy" do diretório /etc/tomcat5.5/policy.d/ ou, o que acho mais organizado, criar um arquivo.

Crie um arquivo /etc/tomcat5.5/policy.d/05teste.policy. Inclua o seguinte conteúdo:

grant codeBase "file:/var/www/teste/-" {
permission java.security.AllPermission;
};

Com esse conteúdo, você faria todas as liberações para sua aplicação. O mais seguro é ir liberando as permissões a medida que forem aparecendo as necessidades, então, sugiro substituir o conteúdo do arquivo por

grant codeBase "file:/var/www/teste/-" {
permission java.net.SocketPermission "localhost:3306", "connect,resolve";
};

Assim, liberaremos apenas a conexão com o mysql.

Agora, basta reiniciarmos o tomcat

# /etc/init.d/tomcat5.5 restart

e testarmos nossa aplicação acessando a URL localhost:8180/teste

deverá aparecer o seguinte conteúdo:

Olá mundo !!!
1 + 1 = 2

Drive carregado com sucesso!!!

Conexao estabelecida!!!

- 1

- 7

- 17

- 37


[5] Comentário enviado por fabio em 01/07/2009 - 13:00h

Desculpem o transtorno, artigo completo no ar!

Obrigado pelo aviso Geraldo.

[6] Comentário enviado por Milton Quirino em 23/07/2009 - 10:34h

Muito bom !!!

Já add nos favoritos.

[7] Comentário enviado por rbertelle em 30/09/2009 - 17:53h

Caro gjr_rj segui criteriosamente seu tutorial, achei um pequeno erro na hora de compilar o arquivo teste2.java, mas consegui contorna-lo.
Já no final revisei e tentei de tudo, mas só obtive a resposta abaixo no browser.
Alguma segestão?
Abraço


HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 30 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
27: }
28: catch (Exception ex)
29: {
30: out.println("<br>Erro no Select!!!<br>" + ex.printStackTrace());
31: }
32: }
33: catch (Exception ex)


An error occurred at line: 35 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
32: }
33: catch (Exception ex)
34: {
35: out.println("<br>Erro na conexao!!!<br>" + ex.printStackTrace());
36: }
37: }
38: catch (ClassNotFoundException ex)


An error occurred at line: 40 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
37: }
38: catch (ClassNotFoundException ex)
39: {
40: out.println("<br>Erro na conexao com a base de dados!!!<br>" + ex.printStackTrace());
41: }
42: catch (Exception ex)
43: {


An error occurred at line: 44 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
41: }
42: catch (Exception ex)
43: {
44: out.println("<br>Driver nao pode ser carregado!!!<br>" + ex.printStackTrace());
45: }
46: out.println("<br>Olá Base!!!<br>");
47: }


An error occurred at line: 47 in the jsp file: /index.jsp
Syntax error, insert "Finally" to complete TryStatement
44: out.println("<br>Driver nao pode ser carregado!!!<br>" + ex.printStackTrace());
45: }
46: out.println("<br>Olá Base!!!<br>");
47: }
48:
49: %>



An error occurred at line: 95 in the generated java file
Syntax error on token "catch", Identifier expected


An error occurred at line: 97 in the generated java file
out cannot be resolved


An error occurred at line: 97 in the generated java file
_jspx_out cannot be resolved


An error occurred at line: 98 in the generated java file
out cannot be resolved


An error occurred at line: 98 in the generated java file
out cannot be resolved


An error occurred at line: 99 in the generated java file
out cannot be resolved


An error occurred at line: 100 in the generated java file
_jspx_page_context cannot be resolved


An error occurred at line: 100 in the generated java file
_jspx_page_context cannot be resolved


An error occurred at line: 102 in the generated java file
Syntax error on token "finally", { expected


An error occurred at line: 103 in the generated java file
_jspxFactory cannot be resolved


An error occurred at line: 103 in the generated java file
_jspxFactory cannot be resolved


An error occurred at line: 103 in the generated java file
_jspx_page_context cannot be resolved

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Apache Tomcat/5.5

[8] Comentário enviado por admwagner em 24/05/2010 - 13:33h

.'.
Grato pelo artigo

Wagner Ferreira
.'.

[9] Comentário enviado por felimpe em 15/09/2010 - 09:52h

foi um excelente artigo porem o final decepcionou.
deu o mesmo erro que o kra q falou acima..

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 30 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
27: }
28: catch (Exception ex)
29: {
30: out.println("<br>Erro no Select!!!<br>" + ex.printStackTrace());
31: }
32: }
33: catch (Exception ex)


An error occurred at line: 35 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
32: }
33: catch (Exception ex)
34: {
35: out.println("<br>Erro na conexao!!!<br>" + ex.printStackTrace());
36: }
37: }
38: catch (ClassNotFoundException ex)


An error occurred at line: 40 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
37: }
38: catch (ClassNotFoundException ex)
39: {
40: out.println("<br>Erro na conexao com a base de dados!!!<br>" + ex.printStackTrace());
41: }
42: catch (Exception ex)
43: {


An error occurred at line: 44 in the jsp file: /index.jsp
The operator + is undefined for the argument type(s) String, void
41: }
42: catch (Exception ex)
43: {
44: out.println("<br>Drive nao pode ser carregado!!!<br>" + ex.printStackTrace());
45: }
46: out.println("<br>Olá Base!!!<br>");
47: }


An error occurred at line: 47 in the jsp file: /index.jsp
Syntax error, insert "Finally" to complete TryStatement
44: out.println("<br>Drive nao pode ser carregado!!!<br>" + ex.printStackTrace());
45: }
46: out.println("<br>Olá Base!!!<br>");
47: }
48:
49: %>


An error occurred at line: 104 in the generated java file
Syntax error on token "catch", Identifier expected

An error occurred at line: 106 in the generated java file
out cannot be resolved

An error occurred at line: 106 in the generated java file
_jspx_out cannot be resolved

An error occurred at line: 107 in the generated java file
out cannot be resolved

An error occurred at line: 107 in the generated java file
out cannot be resolved

An error occurred at line: 108 in the generated java file
out cannot be resolved

An error occurred at line: 109 in the generated java file
_jspx_page_context cannot be resolved

An error occurred at line: 109 in the generated java file
_jspx_page_context cannot be resolved

An error occurred at line: 111 in the generated java file
Syntax error on token "finally", { expected

An error occurred at line: 112 in the generated java file
_jspx_page_context cannot be resolved

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts