*.do no sun-web.xml

Fala pessoal, blz?

Seguinte, estava lendo um projeto final desenvolvido em java que utilizou um recurso que achei bem interessante, mas nao estou conseguindo fazer…

pelo que entendi da ideia no projeto a configuração abaixo feita no sun-web.xml serve para que todos os action com extensao .do sejam redirecionados para o FrontController… Achei interessante e tentei fazer o mesmo na configuracao abaixo, porem nao funcionou…

alem de configurar o XML é preciso fazer mais alguma coisa ?


<servlet>
    <servlet-name>FrontController</servlet-name>
    <principal-name>br.com.xxx.Controller.FrontController</principal-name>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>FrontController</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

outra coisa, é preciso criar arquivos .do ou é só criar falsos .do, exemplo action=“cadastro.do”, sendo q esse arquivo nem existe… Funcionaria?

abcs

Funciona sim.
Basta você ter uma Servlet mapeada no seu web.xml dessa maneira…

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>TESTE</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ControleGeral</display-name>
    <servlet-name>ControleGeral</servlet-name>
    <servlet-class>br.com.guj.controle.ControleGeral</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControleGeral</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

E na sua Servlet…

package br.com.guj.controle;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ControleGeraç
 */
public class ControleGeral extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ControleGeral() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

Espero que ajude…

Abs,

caputo, por onde acesso esse web.xml ?
eu só consigo enxergar em meu projeto o sun-web.xml …

tem alguma diferença os dois ?

abcs

Para o seu caso pode mapear a Servlet no sun-web.xml mesmo…
Depois posta aí o resultado…

Qual IDE você está usando?

Deu erro 404…

meu sun-web.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

/3DImoveis Keep a copy of the generated servlet class' java code. FrontController br.com.threedi.Controller.FrontController FrontController *.do 10 [/code]

meu FrontController

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.threedi.Controller;

import br.com.threedi.Utility.ExcessaoNegocio;
import br.com.threedi.Utility.RequestHelper;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Thiaho Ventura NB
 */
@WebServlet(name="FrontController", urlPatterns={"/FrontController"})
public class FrontController extends HttpServlet {
   
   private static final long serialVersionUID = 1L;
    
   public FrontController(){
       super();
   } 
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        RequestDispatcher rd;
        String pagina = "erro.jsp";

        try {            

            RequestHelper helper = new RequestHelper(request);
            Command cmd = helper.getCommand();
            
            pagina = cmd.execute(request, response);
            
            rd = request.getRequestDispatcher(pagina);
            rd.forward(request, response);

        }
                
        catch(SQLException e){
            request.setAttribute("msgErro", e);
            pagina = "erro.jsp";
            rd = request.getRequestDispatcher(pagina);
            rd.forward(request, response);
        }
        
        catch(ExcessaoNegocio e){
            request.setAttribute("msgErro", e);
            
            if(!e.getPath().equals("")){
                pagina = e.getPath();
            }else{
                pagina = "erroNegocio.jsp";
            }

            rd = request.getRequestDispatcher(pagina);
            rd.forward(request, response);        
        }

        catch(Exception e){
            request.setAttribute("msgErro", e);
            pagina = "erro.jsp";
            rd = request.getRequestDispatcher(pagina);
            rd.forward(request, response);
        }

        finally {
            out.close();
        }
        
        

    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}[/code]


meu view (tela de cadastro)

[code]<form action="cadastro.do" method="post">
            <input type="hidden" name="ac" id="ac" value="grvconta" />
            <div style="width:50%;">
            <fieldset>
                <legend>Cadastro de Usuário</legend>

...

da erro 404 quando clico em cadastrar…

o arquivo cadastro.do realmente não existe…

  • estou utilizando o NetBeans 7.0

abcs

no método processRequest coloca um sysout assim e veja se ele imprime no console…

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
	System.out.println("Chamou o Cadastro.do");

tentei, mas cai direto no erro 404…

[quote]HTTP Status 404 -

type Status report

message

descriptionThe requested resource () is not available.

GlassFish Server Open Source Edition 3.1[/quote]

eu posso colocar qualquer coisa com final .do no action? tipo xxxxxxx.do ?
outra coisa sera q eu tenho q especificar o local do controller no action, tipo action="…/xxxxxxx.do" ?

será q pode ser alguma configuração no glassfish ?