Web.xml + mapear *.java (Action Servlet) - sem usar Struts

Pessoal,

Eu NÃO ESTOU USANDO STRUTS, na minha aplicação.
Estou usando o TomCat 5.0.28 e queria “amarrar” todas as pgns que terminassem em .java, com um servlet chamado ActionServlet.

Eu mapiei da seguinte forma o Web.xml:

   <servlet>
      <servlet-name>ActionServlet</servlet-name>
      <servlet-class>com.kubic.servlet.ActionServlet</servlet-class>
   </servlet>

    <servlet-mapping>
        <servlet-name>ActionServlet</servlet-name>
        <url-pattern>*.java</url-pattern>
    </servlet-mapping>

:?: Eu tenho 2 problemas:

:arrow: Eu gostaria de que a servlet ActionServlet recebesse todas as solicitações de :

http://localhost:8080/minha_aplicacao/ActionServlet/QualquerCoisa.java

:arrow: Depois de configurado corretamente o web.xml, eu gostaria de saber como eu configuro a Servlet , para receber o “QualquerCoisa.java” e dispachar para a Servlet correspondente. Eu tenho que usar filtros para isso ?

Obrigado.

Então mude o seu mapeamento pra:

<servlet-mapping>
         <servlet-name>ActionServlet</servlet-name>
         <url-pattern>/ActionServlet/*.java</url-pattern>
</servlet-mapping>

Só pra constar na nota, o nome do servlet não tem nada haver com o mapeamento nem com o caminho pelo qual ele é chamado.

Maurício ,

Primeiramente muito obrigado pela atenção.

:smiley:

Eu estou tentando fazer um esquema parecido com o Struts, mas não quero usar o mesmo.
Eu quero digitar po exemplo, FormularioX.java, e quero que o servlet ActionServlet, mande para o Servlet correspondente.

Será que eu toh viajando ??? :roll:

Não está viajando caso o seu objetivo seja aprendizado e não produção.

Uma maneira de fazer é:

digita a url /MinhaAcao.java
ActionDispatcher é chamado
    faz o substring do url e encontra a string MinhaAcao
    procura a classe correspondente a MinhaAcao num arquivo.properties
    instancia a classe e executa o método básico (execute(), go() etc)

barbada :smiley:

Ainda pode fazer um lance bonitão como WebWork (o jeito do strus é porco) para popular os atributos da ação com os parâmetros da request usando Reflection.

MAurício,

Não funcionou !!! :frowning:
Eu mapiei da seguinte forma:

<servlet>
      <servlet-name>ActionServlet</servlet-name>
      <servlet-class>com.kubic.servlet.ActionServlet</servlet-class>
   </servlet>

 <servlet-mapping>
          <servlet-name>ActionServlet</servlet-name>
          <url-pattern>/ActionServlet/*.java</url-pattern>
 </servlet-mapping> 

Quando eu digito :
http://localhost:8080/minha_aplicacao/ActionServlet

funciona

Mas se eu digitar:

http://localhost:8080/roder_web/ActionServlet/Teste.java ou
http://localhost:8080/roder_web/Teste.java

não funciona ! :?

Isso
http://localhost:8080/roder_web/
e isso
http://localhost:8080/minha_aplicacao/

são coisas completamente diferentes. Qual é o nome do contexto que declarou no server.xml?

Oxe… o http://localhost:8080/roder_web/Teste.java realmente não vai funcionar, porque não começa com /ActionServlet/ mas eu não sei porque é que isso não tá funcionando.

Mude o seu mapeamento denovo pra:

     <servlet-mapping>
         <servlet-name>ActionServlet</servlet-name>
         <url-pattern>*.java</url-pattern>
     </servlet-mapping>

     <servlet-mapping>
         <servlet-name>ActionServlet</servlet-name>
         <url-pattern>/ActionServlet/*</url-pattern>
     </servlet-mapping>

E veja se funciona.

Não esqueça de atualizar o arquivo e mandar o servidor recarregar a aplicação.

[quote=LIPE]Não está viajando caso o seu objetivo seja aprendizado e não produção.

Uma maneira de fazer é:

digita a url /MinhaAcao.java
ActionDispatcher é chamado
    faz o substring do url e encontra a string MinhaAcao
    procura a classe correspondente a MinhaAcao num arquivo.properties
    instancia a classe e executa o método básico (execute(), go() etc)

barbada :smiley:

Ainda pode fazer um lance bonitão como WebWork (o jeito do strus é porco) para popular os atributos da ação com os parâmetros da request usando Reflection.[/quote]
Como é que o WebWork faz para popular um bean?

Eu declarei como minha_aplicacao …

mas eu digitei outro nome na mensagem anterior erroneamente …

funcionou aparentemente … :slight_smile:

agora vou pra segunda parte que o nosso amigo Lipe me indicou o caminho das pedras …

Vou tentar fazer na “mão” mesmo, pois eu não conheço o WebWork …

A não ser que o Lipe tenha um manual prático pra nos ceder … hehehehe …

Valeu a todos !

Estude Reflection (tem um tutorial introdutório aqui no GUJ) e dê uma olhadinha no commons bean-utils.

Olá pessoal!
Sou o novo membro do GUJ.
Meu nome é MIKE e estudo SI.

Bom estou com uma dúvida.

Estou estudando JAVA WEB. Não estou conseguindo mapear minha aplicação.

onde eu coloco esse código abaixo?

<servlet>
<servlet-name>servletOiMundo</servlet-name>
<servlet-class>br.com.caelum.servlet.OiMundo</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>servletOiMundo</servlet-name>
<url-pattern>/oi</url-pattern>
</servlet-mapping>

É no web.xml???
Em que lugar?
porque o java criar automaticamente o arquivo com vários códigos.

Me ajudem por favor.
Obrigado.

Bom Dia Mike Cristian, abaixo segue o link com uma introdução sobre sua dúvida
http://www.guj.com.br/articles/9

Na hora que eu mando compilar aparece isso para mim.

WARNING: DPL8007: Unsupported deployment descriptors element display-name value Teste
WARNING: DPL8007: Unsupported deployment descriptors element welcome-file value index.jsp
WARNING: DPL8007: Unsupported deployment descriptors element servlet-class value controller.ControlClienteServlet
WARNING: DPL8007: Unsupported deployment descriptors element servlet-name value CadClienteServlet
WARNING: DPL8007: Unsupported deployment descriptors element url-pattern value /ControlClienteServlet

Meu xml está assim. E eu estou usando o glassfish

<?xml version="1.0" encoding="UTF-8"?> Teste index.jsp
<servlet>
<servlet-name>CadClienteServlet</servlet-name>
<servlet-class>controller.ControlClienteServlet</servlet-class>
CadClienteServlet /ControlClienteServlet

Onde estou errando? A jdk 7 que estou usando