Loop infinito urlPatterns

4 respostas
saulo.bsi

Olá pessoal, estou estudando Java EE e estou fazendo uma aplicação para aprender. Estou com o seguinte problema.

Mapeei uma um Servlet que estou chamando ele de frontController. Ele recebe todas as requisições ela está com o annotation @WebServlet(urlPatterns = {"*.jsp"}).

Segue um trecho do código abaixo.

public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {

		displayPage = request.getParameter("display_page"); 
		action = request.getParameter("action");

		if(action == null) {
			action = "formGenerate";
		}
		
		if(displayPage == null) {
			displayPage = "home";
			request.setAttribute("display_page", "ticket");
		}
		
		if(displayPage.equals("home")) {
			HomeServlet homeServlet = new HomeServlet();
			homeServlet.formGenerate(request, response);
		}
		
		if(displayPage.equals("user")) {
			
			UserServlet userServlet = new UserServlet();
			
			if(action.equals("formGenerate")) {
				userServlet.formGenerate(request, response);
			}
			
			if(action.equals("alter")) {
				userServlet.alter(request, response);
			}
			
			if(action.equals("delete")) {
				userServlet.delete(request, response);
			}
		}

Pelo parâmetro ele sabe qual servlet eu devo chamar se por exemplo eu mandar a url da seguinte forma:

http://apli/index.jsp?display_page=user

Ira cair no if no trecho de código acima if(displayPage.equals(“user”)) que ira chamar o método abaixo:

public void formGenerate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
		request.setAttribute("screenName", "Usuários");
		request.setAttribute("display_page", "user");
		datagrid(request, response);
		RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
		dispatcher.forward(request, response);
	}

No final do método acima eu executo um dispatcher.forward(request, response) o que está ocasionando um loop infinito pois acaba indo para o frontController.

Quem pode me ajudar?

Obrigado

4 Respostas

jaboot

Cara, tudo o que é .jsp vai para o frontController. Então se ele mesmo manda você ir para outra página, ele mesmo vai receber a requisição!

Eu sugiro você alterar esse pattern!

saulo.bsi

Alterar de que forma? Você pode me passar um exemplo?

jaboot

Cara, pelo mínimo que pesquisei, dá pra fazer chamadas REST nesse seu @WebServlet. Tipo, dá para colocar um “/chamadaRest”, ou “/formUsuario” que ele vai.

saulo.bsi

Na verdade, o que eu quero fazer é o seguinte.

Eu tenho um index.jsp. Dentro deste index.jsp tem um include para outro .jsp

O que eu quero fazer é simples, mais parece impossível de se fazer em java, em php é muito simples.

Quando eu passar a seguinte url: http://appli/index.jsp/home/formGenerate

Eu quero que a pagina solicitada que é o index.jsp inclua o jsp da home e chame o método formGenerate que está dentro da HomeServlet.

Traduzindo, eu quero ter somente um index.jsp com os includes de topo, rodapé, e o conteúdo seja incluido dinamicamente conforme a URL.

O que eu quero com isso?

Reduzir includes de topo, rodapé e tudo quanto é tipo de template estático em cada jsp o que é extremamente desnecessário.

Deu pra entender?

Criado 27 de março de 2012
Ultima resposta 27 de mar. de 2012
Respostas 4
Participantes 2