在jsp中怎么實(shí)現登錄后,自動(dòng)跳轉到登錄前正瀏覽的頁(yè)面?就像csdn的一樣,
不管你從哪能個(gè)頁(yè)面登錄,成功登錄后會(huì )自動(dòng)跳轉回那個(gè)頁(yè)面。
解決方法一:
登錄處理后,返回如下內容:
2 PrintWriter out = response.getWriter();
3
4 out.println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");
7
8 out.println("<HTML>");
9
11
12 out.println(" <BODY>");
13
16 out.println("<script>history.go(-1);history.go(0);</script>");
19
20 out.println(" </BODY>");
21
22 out.println("</HTML>");
23
24 out.flush();
25
26 out.close();
27
28 return null;
29
解決方法二:
1 String referer = req.getHeader("Referer");
2 resp.sendRedirect(referer);
3 return;
4
5
上面兩種方法不可取是因為,如果用戶(hù)登錄失敗,再次登錄的話(huà)就會(huì )出現登錄后返回到登錄的錯誤。
第三種:把你要在跳轉時(shí)需要保存的信息存放在session變量中,登錄后清除這個(gè)session??尚?。
需要登錄操作的頁(yè)面上面添加:
1 <%
2 if(session.getAttribute("party")== null){
3 if(null != request.getQueryString())
4 session.setAttribute("redirectUrl", request.getRequestURL().append("?").append(request.getQueryString()).toString());
5 else
6 session.setAttribute("redirectUrl", request.getRequestURL().toString());
7 response.sendRedirect(request.getContextPath() + "/loginto");
8 }
9 %>
在登錄處理頁(yè)面:
1 String redirectUrl = (String)req.getSession().getAttribute("redirectUrl");
2 if(StringUtils.isValid(redirectUrl)){
3 req.getSession().removeAttribute("redirectUrl");
4 resp.sendRedirect(redirectUrl);
5 }
第四種方法:寫(xiě)一個(gè)servlet會(huì )話(huà)判斷類(lèi),如果在線(xiàn)就繼續執行,不在線(xiàn)則提示登錄。所有的需要在線(xiàn)操作的servlet都集成此類(lèi),這樣就不需要上面那么在每個(gè)頁(yè)面寫(xiě)上這些代碼了,可以集中控制。這種方式比較完整。
HttpSession session = request.getSession();
if (session.getAttribute("person") == null)
{
if (null != request.getQueryString())
session.setAttribute("redirectUrl", request.getRequestURL().append("?").append(request.getQueryString()).toString());
else
session.setAttribute("redirectUrl", request.getRequestURL()
.toString());
response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;
}
return process(config, request, response);