在web應用中經常需要判斷用戶是否已經登錄,如果沒有登錄,那麼跳轉到登錄頁面。一般我們在後臺頁面中都會使用frame來劃分功能區。這種方法比較實用,但是隨之而來就有一個小問題,就是當用戶session超時之後,當用戶再在後臺進行操作時,我們需要重新讓用戶登錄。一般我會選擇使用一個Filter來控制用戶的訪問權限,當用戶沒有登錄的時候重定向到login.jsp。那麼我們可以直接使用request.sendRedirect()方法來實現。但是由於是在frame中,所以這種方式會將login.jsp顯示在當前的frame中,這並不是我們想要的效果。sendRedirect放方法中並沒有能<A>中的target屬性。這裏我們可以採用javascript來實現這一功能。
PrintWriter out =resp.getWriter();
out.write("<html>");
out.write("<script>");
out.write("window.open ('login.jsp','_top')");
out.write("</script>");
out.write("</html>");
return;
當然,如果瀏覽器禁用了javascript,那麼這種方法就沒用了。不過有多少人沒事將javascript禁用調用呢。如果有更好的方案(不使用js),麻煩告知我一下..
還有一個問題就是,當用戶登錄失敗或者操作執行之後總是需要給出一些提示信息吧。如果總是使用js彈窗來做提示的話,用戶體驗不好。最好還是專門做一個提示頁面,當需要顯示提示信息的時候,我們可以呈現該頁面,並將一些參數傳遞過來,比如提示內容,要調轉的頁面等。在使用struts2時,我不太喜歡使用自帶的一些提示功能(也不喜歡用它的標籤),小的網站應用根本不用考慮國際化之類的問題,直接把提示硬編碼在代碼中效率更高,誰沒事三天兩頭的去修改代碼…
message.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath()
+ request.getAttribute("url");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>提示信息</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="Refresh" content="4; url=<%=path%>" />
</head>
<body>
<table border="0" align="center" cellpadding="5" cellspacing="1"
style="font-size: 14px; color: #333333; margin-top: 100px; background: #70afd3">
<tr style="color: #FFFFFF">
<th>
提示信息
</th>
</tr>
<tr>
<td height="100" style="font-size: 12px; background: #FFFFFF">
<div style="font-size: 14px; font-weight: bold; margin: 10px;">
${message}
</div>
<div style="margin: 10px;">
系統將在
<span id="countDownSec" style="color: blue; font-weight: bold"></span> 秒後自動跳轉,如果不想等待,直接
<a href=<%=path%> style="color: #069;">點擊這裏</a>
</div>
</td>
</tr>
</table>
<script language="javascript" type="text/javascript">
var countDown = function(timer,eleId,interType){
document.getElementById(eleId).innerHTML = timer;
var interval = interType=='s'?1000:(interType=='m'?1000*60:1000*60*60);
window.setInterval(function(){
timer--;
if (timer > 0) {
document.getElementById(eleId).innerHTML = timer;
}
},interval);
};
countDown(4,'countDownSec','s');
</script>
</body>
</html>
Action呈現提示頁面:
setMessage("登錄失敗:用戶名或密碼不正確!","/admin/login.jsp");
return MESSAGE;
效果圖:
以上是小弟個人看法,如有不妥之處還望前輩指正!