Bom dia galera…
Estou com um pequeno problema, acredito que seja pequeno. Mas como sempre trabalhei com frameworks não tenho experiencia com servlets.
Preciso redirecionar o usuario para pagina de login em determinadas situações. Estou usando o RequestDispatcher, ele redireciona certo. Porem perde os css no jsp. Vou colocar partes do codigo pra quem possa analizar.
login.jsp
<head>
<title>Login</title>
<jsp:include page="/includes/imports.jsp" />
</head>
.......
Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String login = null, password = null;
if(request.getParameter("login") != null && request.getParameter("login").trim().length() > 0) {
login = request.getParameter("login").trim().toUpperCase();
}
if(request.getParameter("password") != null && request.getParameter("password").trim().length() > 0) {
password = request.getParameter("password").trim().toUpperCase();
}
Usuario usuario = UsuarioDelegate.newInstance().autenticar(login, password);
if(usuario != null) {
session.setAttribute("usuario", usuario);
response.sendRedirect("welcome");
}
else {
request.setAttribute("ERROR", USER_OR_PASS_INVALID);
RequestDispatcher dispatcher = request.getRequestDispatcher("usuario/login.jsp");
dispatcher.forward(request, response);
//response.sendRedirect("usuario/login.jsp");
}
}
Como pedem ver tambem tentei usar o response.sendRedirect(“usuario/login.jsp”); Nesse até que rola tudo bem. Mas ai não acha a variavel “ERROR” que teria que estar no request.
Caio coloque ai a estrutura dos seus diretorios, no caso do css ele pode estar em uma pasta diferente e não esta conseguindo acha-lo.
E quanto a varíavel ERROR mostre como você esta tentando usa-la.
Abraços.
Marciano.
O seu css tem que estar declarado no mesmo nivel que a pasta usuário, no caso.
<link type="text/css" rel="stylesheet" href="/css/seuCSS.css">
Marciano.
Então amigo. Meus css esta assim.
<link rel="stylesheet" type="text/css" href="../css/style.css">
<link rel="stylesheet" type="text/css" href="../css/form.css">
<link rel="stylesheet" type="text/css" href="../css/buttons.css">
isso em um arquivo de nome includes.jsp numa pasta no mesmo nivel da pasta css e de usuario.
Ai no jsp de login ei faço isso <jsp:include page="/includes/imports.jsp" />
Então ao chamar o login.jsp pelo menu. Ocorre tudo maravilha css e tudo mas.
Mas o problema é quando eu dou um redirect la do servlet assim.
RequestDispatcher dispatcher = request.getRequestDispatcher("usuario/login.jsp");
dispatcher.forward(request, response);
ai ele perde os css.
extranho que quando eu uso o response.sendRedirect(“usuario/login.jsp”) não perde o css.
Então no caso do “…/” ele vai subir um nivel e procurar em uma pasta acima, e como as duas pastas estão no mesmo nivel por isso que ele não encontra.
Marciano.
Marciano. se eu retirar os …/ ai ele não enxerga o css de nenhuma forma.
Consegui resolver o problema… rsrsrs
o problema esta no web.xml
antes
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/getLogin</url-pattern>
</servlet-mapping>
agora
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/usuario/getLogin</url-pattern>
</servlet-mapping>
Servlet antes
RequestDispatcher dispatcher = request.getRequestDispatcher("usuario/login.jsp");
dispatcher.forward(request, response);
servlet agora
RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
dispatcher.forward(request, response);
Muito obrigado Marciano
Então estava ai, hehe, realmente era problema de mapeamento.
Abraço.
Marciano.