Mais duvidas sobre FRONTCONTROLLER

Olá, estou usando FrontController E tenho uma dúvida. Minhas URL’S são acessadas assim, EXEMPLO: http://localhost:8080/locadora/action/qualquer_coisa

[code]
FrontController
pacote.FrontController

<servlet-mapping>
    <servlet-name>FrontController</servlet-name>
    <url-pattern>/action/*</url-pattern>
</servlet-mapping>

[/code]

então o froncontroller faz tudo certinho… …

mas meu grande problema é que eu estou tendo que copiar a parte visual pra todos os .jsp’s… e isso não é bom.

tem como usando frontcontroller as url’s serem acessadas assim

http://localhost:8080/locadora/index.jsp?categoria=legal

segue a classE:

package pacote;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class FrontController extends HttpServlet {
	
	private Map<String, String> commands = new Hashtable<String, String>();
	private Map<String, String> forwards = new Hashtable<String, String>();
	
	public void init() throws ServletException {		
		commands.put("cadastrar", "pacote.CadastraCommand");
		commands.put("cadastrarUsuario", "pacote.CadastraUsuarioCommand");
		commands.put("cadastraGenero", "pacote.CadastraGeneroCommand");
		commands.put("cadastraCategoria", "pacote.CadastraCategoriaCommand");
		commands.put("cadastraFilme", "pacote.CadastraFilmeCommand");
		commands.put("logoutUser", "pacote.LogoutCommand");
		commands.put("gerencia", "pacote.GerenciaCategoriaCommand");
		commands.put("alteraCategoria", "pacote.AlteraCategoriaCommand");
		commands.put("acompanharLocacoes", "pacote.AcompanharLocacoesCommand");
		commands.put("detalhesLocacoes", "pacote.DetalhesLocacoesCommand");
		
		forwards.put("detalhes", "/detalhes.jsp");
		forwards.put("acompanhar", "/acompanhar.jsp");
		forwards.put("gerenciaCategoria", "/gerenciaCat.jsp");
		forwards.put("cadastra","/cadastrar.jsp");
		forwards.put("logout", "/");
	}
	
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		handleRequest(request, response);
	}
	
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		handleRequest(request, response);
	}
	
	protected void handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		String requestURI = request.getRequestURI();
		int index = requestURI.lastIndexOf("/");
		String requestCommand = requestURI.substring(index + 1);
		
		String commandClass = (String) commands.get(requestCommand);
		
		if (commandClass == null) {
			throw new ServletException(
					"Não foi possível encontrar o comando para a requisição:"
					+ requestCommand);
		}
		
		try {
			AbstractCommand cmd = (AbstractCommand) Class.forName(commandClass)
			.newInstance();
			cmd.init(request, response);
			String target = cmd.execute();
			
			String jsp = (String) forwards.get(target); 
			
			RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(jsp);
			dispatcher.forward(request, response);
			
		} catch (ClassNotFoundException ex) {
			throw new ServletException(
					"Não foi possível encontrar a classe de comando:"
					+ commandClass);
		} catch (IllegalAccessException ex) {
			throw new ServletException(
					"Não foi possível instanciar a classe de comando:"
					+ commandClass);
		} catch (InstantiationException ex) {
			throw new ServletException(
					"Não foi possível instanciar a classe de comando:"
					+ commandClass);
		}
	}
}

Melhor… você pode usar Tiles com Struts.

não vou utilizar struts. pode me ajudar no exemplo acima?

JSP (paginaPadrao.jsp):

SUA PAGINA PADRAO ... &lt;!-- aqui vai o miolo com os dados --&gt; &lt;jsp:include page="&lt;%=request.getAttribute("MIOLO")%&gt;&quot;/&gt; ...

FrontController

String jsp = (String) forwards.get(target); request.setAttribute(&quot;MIOLO&quot;,jsp); getServletContext().getRequestDispatcher(&quot;/paginaPadrao.jsp&quot;).forward(request, response);

Soh uma ideia!

EasyTemplates (http://easytemplates.codigolivre.org.br) :smiley: :lol:

¬¬

tanto o tiles quanto o easytemplates são ferramentas pra gerenciar seus templates dinamicamente…sem precisar repetir o código do seu layout toda hora…

eu uso o sitemesh…é super simples…e tem o mesmo propósito…

http://www.opensymphony.com/sitemesh

[]'s

[quote=zelopes]tanto o tiles quanto o easytemplates são ferramentas pra gerenciar seus templates dinamicamente…sem precisar repetir o código do seu layout toda hora…

eu uso o sitemesh…é super simples…e tem o mesmo propósito…

http://www.opensymphony.com/sitemesh

[]'s[/quote]

bom, percebi isto no exemplo deles:

<page:applyDecorator name=“panel” page=“index.html” />

ele chama diretamente um .html ou um .jsp…

mas no meu caso as paginas são chamadas desta forma: action/cadastrar

isso funciona para meu caso?

é só colocar um asterisco (*) e aplicar o decorator para todo o sistema.

Última dúvida prometo !

Estou gostando muito do sitemesh já apliquei em todo site… estou colocando os já coloquei todos, mas como faço para dar excludes nesse tipo de link que tem querystring: action/detalhesLocacoes?cliente=Thomas

já tentei de todas as maneiras e não consegui…

já tentei colocando o arquivo .jsp e colocando toda url, não consegui, o que está faltando?