Servlet Controller

1 resposta
hitcurst

E ae, estou tentando fazer um Servlet que controle todo o meu site…
porém, há requisições que não preciso tratar
Por exemplo.

sobreescrevi o método doGet, e dependendo da url que o usuário requisitar eu
sei qual classe executar e que página retornar com o freemarker…

até ai funciona legal, porém começei a colocar estilos CSS no meu site,
e o carregamento da imagem no CSS também chama meu servlet, só que como
nessa url nao tem algo que eu precise tratar eu queria apenas deixar passar a requisição e fazer
a imagem carregar…porém não está funcionando.

meu método doGet está assim

@SuppressWarnings("unchecked")
	@Override
	protected void doGet( HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException 
	{
		try 
		{
			// Seta a url
			URLParser parser = new URLParser();
			parser.setPath( req.getServletPath() );
			
			// Analisa a URL para saber a classe que será chamada
			ClasseModulo modulo = parser.getUrlModulo();
			
			//Carrega a classe
			Object clazz = modulo.getClassModule().newInstance();
			((ModuloTemplate)clazz).setRequest(req);
			((ModuloTemplate)clazz).setResponse(resp);
			
			Map<String,Object> params = null;
			
			if (modulo.getAction() != null) {
				Object[] args = {};
				// Executa o método
				params = (Map<String,Object>)modulo.getAction().invoke( clazz , args );
			}
			
			// Exibie a página correta
			FreemarkerUtils.parseTemplate( params , ((ModuloTemplate)clazz).getTemplate()  , resp );
			
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}

Esperam que alguem possa me ajudar…
to achando que é algo ridiculo que estou deixando passar…
porém ja tentei de tudo e não funciona.

Abraços ! :smiley:

1 Resposta

hitcurst

Bom, ainda aguardo ajuda ^^
porém escrevi um código “horrivel na minha opinião” que resolveu o problema,
como disse antes, tudo que é solicitado, passa pelo servlet.

@SuppressWarnings("unchecked")
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException 
	{
		try 
		{
			// Seta a url 
			URLParser parser = new URLParser();
			parser.setPath( req.getServletPath() );
			
			// Caso não seja uma solicitação da pasta de arquivos diversos
			// como images, css, javascript, etc..
			if( !parser.getPath().contains("protected") ) {
			
				// Analisa a URL para saber a classe que será chamada  
				ClasseModulo modulo = parser.getUrlModulo();
				Object clazz = modulo.getClassModule().newInstance();
				((ModuloTemplate)clazz).setRequest(req);
				((ModuloTemplate)clazz).setResponse(resp);
				
				Map<String,Object> params = null;
				
				if (modulo.getAction() != null) {
					Object[] args = {};
					//Carrega a classe
					params = (Map<String,Object>)modulo.getAction().invoke( clazz , args );
				}
				
				// Exibie a página correta 
				FreemarkerUtils.parseTemplate( params , ((ModuloTemplate)clazz).getTemplate()  , resp );
			}
			else {
				// Recupera o arquivo solicitado, e envia para o client
		        File arquivo = new File("D:\\Workspace\\Project\\web" + req.getServletPath() );
		        FileInputStream reader = new FileInputStream(arquivo);
		        byte[] b = new byte[(int)arquivo.length()];
		        reader.read(b);
		        OutputStream out = resp.getOutputStream();
		        out.write(b);
		        out.flush();
		        out.close();
			}
			
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}

Agora uma dúvida, só da para fazer assim ??
Fazer com que todas as requisições passem pelo mesmo servlet, prejudica o desempenho do meu site ?
A intenção é que o site possua muitos acessos simultaneos, pois é um destes Web Browser Games…

Será que haverá problema com muita gente ao mesmo tempo, e tudo passando pelo mesmo servlet ?
Aceito sugestões =)

Criado 7 de fevereiro de 2009
Ultima resposta 7 de fev. de 2009
Respostas 1
Participantes 1