Homepage dinâmica com servlets / JSP

6 respostas
leonardofl

Olá pessoal,

eu estou fazendo uma aplicação com servlets/JSP (tomcat 6.0) e no caso tenho uma homepage dinâmica que já exibe dados vindos de um banco de dados.

A solução que eu adotei no momento foi criar um servlet Search_jsp que é mapeado da seguinte forma:

<servlet>
    <description></description>
    <display-name>Search_jsp</display-name>
    <servlet-name>Search_jsp</servlet-name>
    <servlet-class>br.usp.wikilibras.control.Search_jsp</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Search_jsp</servlet-name>
    <url-pattern>/index</url-pattern>
  </servlet-mapping>

Neste servlet o método doGet termina da seguinte forma:

RequestDispatcher view = request.getRequestDispatcher("index.jsp");
		view.forward(request, response);

que é o que realmente chama a homepage.

A ideia então é que o usuário entre na aplicação pela URL http://dominio/wikilibras/index.

Mas o problema é que se o usuário entrar em http://dominio/wikilibras/index.jsp o jsp inicial será exibido incorretamente, pois o servlet não será processado!

Gostaria de saber então qual seria uma solução mais elegante que resolvesse o problema.

Grato pela atenção,

6 Respostas

Carlos_ds_jar

leonardofl:
Olá pessoal,

eu estou fazendo uma aplicação com servlets/JSP (tomcat 6.0) e no caso tenho uma homepage dinâmica que já exibe dados vindos de um banco de dados.

A solução que eu adotei no momento foi criar um servlet Search_jsp que é mapeado da seguinte forma:

<servlet>
    <description></description>
    <display-name>Search_jsp</display-name>
    <servlet-name>Search_jsp</servlet-name>
    <servlet-class>br.usp.wikilibras.control.Search_jsp</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Search_jsp</servlet-name>
    <url-pattern>/index</url-pattern>
  </servlet-mapping>

Neste servlet o método doGet termina da seguinte forma:

RequestDispatcher view = request.getRequestDispatcher("index.jsp");
		view.forward(request, response);

que é o que realmente chama a homepage.

A ideia então é que o usuário entre na aplicação pela URL http://dominio/wikilibras/index.

Mas o problema é que se o usuário entrar em http://dominio/wikilibras/index.jsp o jsp inicial será exibido incorretamente, pois o servlet não será processado!

Gostaria de saber então qual seria uma solução mais elegante que resolvesse o problema.

Grato pela atenção,


Para o seu problema eu proponho que adicione mais uma url-pattern ao mapeamento do servlet, já fiz isso várias vezes e funcionou, faça algo do tipo:

<servlet-mapping>
    <servlet-name>Search_jsp</servlet-name>
    <url-pattern>/index</url-pattern>
    <url-pattern>/index.jsp</url-pattern>
  </servlet-mapping>

Espero ter ajudado… 8)

leonardofl

Ih cara, acho que não dá pra fazer isso não… eu fiz e me parece que entrei em loop infinito!

E faz sentido… toda vez que index.jsp for chamado, processo o servlet, e ao final o servlet despacha para index.jsp… mas assim estamos requisitando o index.jsp o que fará com que o servlet seja chamado de novo e de novo! =O

Carlos_ds_jar

leonardofl:
Ih cara, acho que não dá pra fazer isso não… eu fiz e me parece que entrei em loop infinito!

E faz sentido… toda vez que index.jsp for chamado, processo o servlet, e ao final o servlet despacha para index.jsp… mas assim estamos requisitando o index.jsp o que fará com que o servlet seja chamado de novo e de novo! =O


Não entendo pq está entrando em looping sempre quando usei nunca aconteceu isso comigo, isso só aconteçe quando a pagina está chamando o servlet e o servlet está chamando a pagina :shock:
Tenta limpar e construir o seu projeto e implantar e desimplantar do servidor pra ver se ainda fica desse jeito…

Carlos_ds_jar

Pq vc quer que um mesmo servlet seja chamado antes e depois do .jsp? :shock:

leonardofl

Mas é esse mesmo o caso…

É o seguinte, minha homepage tem conteúdo dinâmico, e eu não quero usar scriptlets, quero usar a EL do JSP, então a ideia é que antes do JSP um servlet faça a transação com o banco de dados para decidir os itens que devem aparecer na homepage; esses itens são setados nos atributos do request, para que o jsp possa utilizar…

Pelo o que entendi de MVC o ciclo normal seria esse: começamos com um formulário, fazemos o POST para um servlet, que processa os dados do formulário e depois encaminha o que foi processado para uma view. É isso mesmo que eu quero fazer, mas sem o formulário iniciar, ou seja, eu tenho que começar pelo servelet.

Por isso que o servlet chama o index.jsp, porque o servlet é o Control que processa os dados e chama a View para apresentá-los.

Nesse contexto todo o loop infinito é perfeitamente esperado =T

Carlos_ds_jar

Mas é esse mesmo o caso…

É o seguinte, minha homepage tem conteúdo dinâmico, e eu não quero usar scriptlets, quero usar a EL do JSP, então a ideia é que antes do JSP um servlet faça a transação com o banco de dados para decidir os itens que devem aparecer na homepage; esses itens são setados nos atributos do request, para que o jsp possa utilizar…

Pelo o que entendi de MVC o ciclo normal seria esse: começamos com um formulário, fazemos o POST para um servlet, que processa os dados do formulário e depois encaminha o que foi processado para uma view. É isso mesmo que eu quero fazer, mas sem o formulário iniciar, ou seja, eu tenho que começar pelo servelet.

Por isso que o servlet chama o index.jsp, porque o servlet é o Control que processa os dados e chama a View para apresentá-los.

Nesse contexto todo o loop infinito é perfeitamente esperado =T
Vc não deve usar o mesmo servlet para processar os dados e chamar a view, vc deve usar um servlet para processar os dados e outro para chamar a view, tente usar o seguinte esquema:

SERVLET X -> JSP -> SERVLET Y -> DADOS

Onde o primeiro servlet vc vai chamar o welcome-file e o segundo vai processar os dados, tente fazer isso sem gerar looping :idea:

Criado 3 de agosto de 2010
Ultima resposta 4 de ago. de 2010
Respostas 6
Participantes 2