Jsessionid impede carregamento correto da página

8 respostas
asclows

Sempre no primeiro acesso ao site que estou desenvolvendo é incluido a informação jsessionid em todas as URLs presentes no retorno html seja ela link para CSS, hyperlink, atributo action dos forms e etc.

Isto por exemplo tem feito com que a formatação e imagens da página não sejam carregadas e caso o usuario insista em clicar em algum link lhe é retornado o erro 404 (not found).

Recortes do fonte:
<script language="javascript" src="/teste/;jsessionid=18638635363D913C00D125D3D4DDEA81jscript/admin/jquery.js"type="text/javascript"></script>
<link href="/teste/;jsessionid=18638635363D913C00D125D3D4DDEA81css/admin/chaus.css" rel="stylesheet" type="text/css" media="screen"/>
<form name="formLogin" action="/teste/;jsessionid=18638635363D913C00D125D3D4DDEA81admin/administrador.chaus" method="post" enctype="multipart/form-data" accept-charset="utf-8">

Como resolvo isso?

8 Respostas

leofernandesmo

jsessionid é o número da sessão do usuário.
Não entendi pq vc está passando ele no caminho da sua aplicação ??

Vc só precisa passar o caminho relativo…

asclows

Amigo não foi eu quem colocou este jsesssionid…isto foi colocado pelo tomcat. Por exemplo, se vc chamar o endereço:

http://www.chaus.com.br que é a raiz do website ele não vai apresentar o erro que estou dizendo pois na raiz há um arquivo index.jsp que redireciona para a /home.chaus

Se você acessar outra página para as quais não existem redirecionamentos logo após abrir browser por exemplo: /expertise.chaus apresentará todas as URLs alteradas com a inclusão de jsessionid. Com isso os recursos Javascript, CSS e links não são carregados corretamente.

leofernandesmo

Ah blz…mas então cola o código do seu JSP??

faelcavalcanti

Colega, analise o tipo de método que é setado pelo form. Quando GET é formulado a leitura de parâmetros a partir da url, o que implica a solicitação de um serviço. Já o POST encapsula todas as informações no header do formulário para enviá-los ao servidor.

Neste caso você pode interceptar as chamadas para o caso do cliente estar bloqueando cookies a partir dos métodos encodeUrl() ou sendRedirect().

asclows

Peraí gente, o que tem haver formulários aqui? Não estou com problemas no meu formulário.

Vou tentar ser mais claro desta vez....

Passo-a-passo:
1 - Abro o browser, digito uma URL para o website http://www.chaus.com.br/teste/expertise.chaus
2 - A página requisitidada é carregada, porém o browser não conseguiu carregar a formatação definida por arquivos CSS e JavaScript através das respectivas tags.

<link href="/teste/;jsessionid=860F732E7B6557623F927448967EC510css/chaus.css" rel="stylesheet" type="text/css" media="screen"/>
<script type="text/javascript" src="/teste/;jsessionid=860F732E7B6557623F927448967EC510jscript/mtools.js"></script>
Onde o correto seria:
<link href="/teste/css/chaus.css" rel="stylesheet" type="text/css" media="screen"/>
<script type="text/javascript" src="/teste/jscript/mtools.js"></script>

Havendo este tipo de alteração para qualquer URL contida no meu fonte jsp.

3 - Caso eu venha preencher e submeter algum form nesta situação, simplesmente recebo uma página de erro 404 (Not found), lógico, porque a URL do atributo action do form também foi alterada resultando em um endereço não existente, daí a origem do 'Not Found'.

4 - Se eu nesta situação de a página ser carregada der um simples F5 (reload) o browser passa a exibir a página de forma correta e com todos os links na forma correta.

Buscando informações sobre isso na internet entendi que a inclusão de jsessionid na primeira requisição é uma forma que container tem de garantir a passagem do id da sessão e se precaver de uma possível situação na qual o usuário tenha desabilitado cookies.

Após o reload (vulgo F5) não há a inclusão do session id de forma explícita pois já terá sido detectado que o recurso de cookie está habilitado não sendo mais necessário explicitar tal informação, daí o fato de a página ser carregada de forma correta.

a) Então minha dúvida continua....pq todas as URLs são alteradas?
b) Não bastaria que apenas a URL de requisição contivesse o jsessionid?
c) Como exibir minha página corretamente no primeiro acesso?

P.S.: redirecionamento não é possivel pois teria eu que fazer isso para todas as requisições válidas possíveis.

leofernandesmo


Eu entendi seu problema…mas como eu falei. Cola aqui o código do seu JSP. Não o código gerado.

asclows

Aí vai então parte do código...

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<% pageContext.setAttribute("linefeed", "\n"); %>

<c:url var="context" value="/" />

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="resource-type" content="document" />
<meta http-equiv="pragma" content="no-cache" />
<meta name="classification" content="Compras" />
<meta name="description" content="Solu&ccedil;&otilde;es Integradas com Tecnologia - ERP, CRM, e-business, DataWarehouse, Banco de Dados, Business Inteligence, Data Mining, Outsourcing, Linux e solu&ccedil;&otilde;es de softwares open source(de c&oacute;digo aberto / uso livre" />
<meta name="keywords" content="Sistema Microsiga, ERP, CRM, e-business, DataWarehouse, Banco de Dados, Business Inteligence, Data Mining, Outsourcing, Linux" />
<meta name="robots" content="ALL" />
<meta name="distribution" content="Global" />
<meta name="rating" content="General" />
<meta name="author" content="Junio Kaminice, Willie Moraes" />
<meta name="language" content="pt-br" />
<meta name="doc-class" content="Completed" />
<meta name="DC.title" content="chaus.com.br" />
<title>Chaus - Solu&ccedil;&otilde;es Integradas com Tecnologia</title>
<link rel="shortcut icon" href="images/favicon.png" />
<link href="${context}css/chaus.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="${context}css/complement.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="${context}css/styleMenu.css" rel="stylesheet" type="text/css" media="screen"/>
<script type="text/javascript" src="${context}jscript/mtools.js"></script>
<script type="text/javascript" src="${context}jscript/mtools2.js"></script>
<script language="javascript" src="${context}jscript/jquery.js"type="text/javascript"></script>
<script language="javascript" src="${context}jscript/corners.js" type="text/javascript"></script>
</head>

Descobri meu problema...foi o modo como concatenei ${context} com as demais URLs. Ou seja quando a variável context é inicializada o path atribuido a ele recebe a concatenação do jsessionid no final da URL pois é padrão de toda URL receber parâmetros após o caminho separado apenas por ';' (ponto e vírgula). Assim quando nos demais links há a concatenação com ${context} ele já estará com session id o que acaba gerando o valor incorreto.

a) Eu teria que ter criado uma URL utilizando a tag para todo e qualquer link da página?
b) Não teria eu como minimizar esta utilização da tag ?
c) Teria como eu desabilitar esta passagem de jsessionid, obrigando a utilização de cookies. Sei que o usuário que desabilita cookies não conseguiria se logar no site. Mas hoje em dia quem desabilita cookies?

leofernandesmo

Ummmm… Eu nao sei como esta a estrutura de diretorios da sua aplicação, mas se vc só usar:

<link href="css/chaus.css" rel="stylesheet" type="text/css" media="screen"/>

em vez de:

<link href="${context}css/chaus.css" rel="stylesheet" type="text/css" media="screen"/>

Não da certo??
É assim que eu uso em todas as aplicações …

<link rel="icon" href="imagens/consultar.ico" type="image/x-icon" />
Criado 8 de agosto de 2007
Ultima resposta 11 de ago. de 2007
Respostas 8
Participantes 3