① jsp 中設置session中 某一值的過期時間
jsp中設置session的超時時間是固定的,不能針對某一變數設置。
方法一:在web.xml中配置超時時內間:
<web-app ...>
容<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
方法二:在應用程序中用setMaxInactiveInterval()方法設置:
HttpSession session = request.getSession();
session.setMaxInactiveInterval(20*60);
② java:怎麼在jsp頁面實現超時退出
在頁頭部分判斷session是否已經為空或這session中包含的用戶屬性是否為空,如果為空則跳轉至首頁或登錄頁。
For example:
====================
<%
StringonlySession=(String)request.getParameter("user");
%>
<scripttype="text/javascript">
varonlySession="<%=user%>";
if(onlySession=="null"||onlySession==""){
alert("用戶超時,請重新登錄!");
}
varindexPath="<c:urlvalue='/index.jsp'/>";//indexpageURL
if(window.parent){
if(window.parent.parent){
if(window.parent.parent.parent){
window.parent.parent.parent.location=indexPath;
}else{
window.parent.parent.location=indexPath;
}
}else{
window.parent.location=indexPath;
}
}else{
window.location=indexPath;
}
</script>
如whatismvc 所述一般的項目會添加過濾器,判斷是session是否為空。但如果只單純測試JSP的寫法,上面的即可。
③ 鎻愬崌JSP欏甸潰鍝嶅簲閫熷害鐨勪竷澶х樼睄緇濇嫑
鏂規硶涓錛氬湪servlet鐨剗nit()鏂規硶涓緙撳瓨鏁版嵁
褰撳簲鐢ㄦ湇鍔″櫒鍒濆嬪寲servlet瀹炰緥涔嬪悗錛屼負瀹㈡埛絝璇鋒眰鎻愪緵鏈嶅姟涔嬪墠錛屽畠浼氳皟鐢ㄨ繖涓猻ervlet鐨剗nit()鏂規硶銆傚湪涓涓猻ervlet鐨勭敓鍛藉懆鏈熶腑錛宨nit()鏂規硶鍙浼氳璋冪敤涓嬈°傞氳繃鍦╥nit()鏂規硶涓緙撳瓨涓浜涢潤鎬佺殑鏁版嵁鎴栧畬鎴愪竴浜涘彧闇瑕佹墽琛屼竴嬈$殑銆佽楁椂鐨勬搷浣滐紝灝卞彲澶уぇ鍦版彁楂樼郴緇熸ц兘銆
渚嬪傦紝閫氳繃鍦╥nit()鏂規硶涓寤虹珛涓涓狫DBC榪炴帴奼犳槸涓涓鏈浣充緥瀛愶紝鍋囪炬垜浠鏄鐢╦dbc2.0鐨凞ataSource鎺ュ彛鏉ュ彇寰楁暟鎹搴撹繛鎺ワ紝鍦ㄩ氬父鐨勬儏鍐典笅錛屾垜浠闇瑕侀氳繃JNDI鏉ュ彇寰楀叿浣撶殑鏁版嵁婧愩傛垜浠鍙浠ユ兂璞″湪涓涓鍏蜂綋鐨勫簲鐢ㄤ腑錛屽傛灉姣忔SQL璇鋒眰閮借佹墽琛屼竴嬈JNDI鏌ヨ㈢殑璇濓紝閭g郴緇熸ц兘灝嗕細鎬ュ墽涓嬮檷銆傝В鍐蟲柟娉曟槸濡備笅浠g爜錛屽畠閫氳繃緙撳瓨DataSource錛屼嬌寰椾笅涓嬈SQL璋冪敤鏃朵粛鐒跺彲浠ョ戶緇鍒╃敤瀹冿細
浠ヤ笅鏄寮曠敤鐗囨碉細
public class ControllerServlet extends HttpServlet{
private javax.sql.DataSource testDS = null;
public void init(ServletConfig config) throws ServletException銆{
super.init(config);
Context ctx = null;
try{
ctx = new InitialContext();
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}catch(NamingException ne){ne.printStackTrace();}
}catch(Exception e){e.printStackTrace();}
}銆
public javax.sql.DataSource getTestDS(){銆
return testDS;銆
}銆
...
...
}
鏂規硶 2:紱佹servlet鍜孞SP 鑷鍔ㄩ噸杞(auto-reloading)
Servlet/JSP鎻愪緵浜嗕竴涓瀹炵敤鐨勬妧鏈錛屽嵆鑷鍔ㄩ噸杞芥妧鏈錛屽畠涓哄紑鍙戜漢鍛樻彁渚涗簡涓涓濂界殑寮鍙戠幆澧冿紝褰撲綘鏀瑰彉servlet鍜孞SP欏甸潰鍚庤屼笉蹇呴噸鍚搴旂敤鏈嶅姟鍣ㄣ傜劧鑰岋紝榪欑嶆妧鏈鍦ㄤ駭鍝佽繍琛岄樁孌靛圭郴緇熺殑璧勬簮鏄涓涓鏋佸ぇ鐨勬崯鑰楋紝鍥犱負瀹冧細緇橨SP寮曟搸鐨勭被瑁呰澆鍣(classloader)甯︽潵鏋佸ぇ鐨勮礋鎷呫傚洜姝ゅ叧闂鑷鍔ㄩ噸杞藉姛鑳藉圭郴緇熸ц兘鐨勬彁鍗囨槸涓涓鏋佸ぇ鐨勫府鍔┿
鏂規硶 3: 涓嶈佹互鐢℉ttpSession
鍦ㄥ緢澶氬簲鐢ㄤ腑錛屾垜浠鐨勭▼搴忛渶瑕佷繚鎸佸㈡埛絝鐨勭姸鎬侊紝浠ヤ究欏甸潰涔嬮棿鍙浠ョ浉浜掕仈緋匯備絾涓嶅垢鐨勬槸鐢變簬HTTP鍏鋒湁澶╃敓鏃犵姸鎬佹э紝浠庤屾棤娉曚繚瀛樺㈡埛絝鐨勭姸鎬併傚洜姝や竴鑸鐨勫簲鐢ㄦ湇鍔″櫒閮芥彁渚涗簡session鏉ヤ繚瀛樺㈡埛鐨勭姸鎬併傚湪JSP搴旂敤鏈嶅姟鍣ㄤ腑錛屾槸閫氳繃HttpSession瀵瑰儚鏉ュ疄鐜皊ession鐨勫姛鑳界殑錛屼絾鍦ㄦ柟渚跨殑鍚屾椂錛屽畠涔熺粰緋葷粺甯︽潵浜嗕笉灝忕殑璐熸媴銆傚洜涓烘瘡褰撲綘鑾峰緱鎴栨洿鏂皊ession鏃訛紝緋葷粺鑰呰佸瑰畠榪涜岃垂鏃剁殑搴忓垪鍖栨搷浣溿備綘鍙浠ラ氳繃瀵笻ttpSession鐨勪互涓嬪嚑縐嶅勭悊鏂瑰紡鏉ユ彁鍗囩郴緇熺殑鎬ц兘銆
濡傛灉娌℃湁蹇呰侊紝灝卞簲璇ュ叧闂璊SP欏甸潰涓瀵笻ttpSession鐨勭己鐪佽劇疆銆 濡傛灉浣犳病鏈夋槑紜鎸囧畾鐨勮瘽錛屾瘡涓狫SP欏甸潰閮戒細緙虹渷鍦板壋寤轟竴涓狧ttpSession銆傚傛灉浣犵殑JSP涓涓嶉渶瑕佷嬌鐢╯ession鐨勮瘽錛岄偅鍙浠ラ氳繃濡備笅鐨凧SP欏甸潰鎸囩ず絎︽潵紱佹㈠畠錛
浠ヤ笅鏄寮曠敤鐗囨碉細
錛%@ page session="false"%錛
涓嶈佸湪HttpSession涓瀛樻斁澶х殑鏁版嵁瀵瑰儚錛氬傛灉浣犲湪HttpSession涓瀛樻斁澶х殑鏁版嵁瀵瑰儚鐨勮瘽錛屾瘡褰撳瑰畠榪涜岃誨啓鏃訛紝搴旂敤鏈嶅姟鍣ㄩ兘灝嗗瑰叾榪涜屽簭鍒楀寲錛屼粠鑰屽炲姞浜嗙郴緇熺殑棰濆栬礋鎷呫備綘鍦℉ttpSession涓瀛樻斁鐨勬暟鎹瀵瑰儚瓚婂ぇ錛岄偅緋葷粺鐨勬ц兘灝變笅闄嶅緱瓚婂揩銆
褰撲綘涓嶉渶瑕丠ttpSession鏃訛紝灝藉揩鍦伴噴鏀懼畠錛氬綋浣犱笉鍐嶉渶瑕乻ession鏃訛紝浣犲彲浠ラ氳繃璋冪敤HttpSession.invalidate()鏂規硶鏉ラ噴鏀懼畠銆傚敖閲忓皢session鐨勮秴鏃舵椂闂磋懼緱鐭涓鐐癸細鍦↗SP搴旂敤鏈嶅姟鍣ㄤ腑錛屾湁涓涓緙虹渷鐨剆ession鐨勮秴鏃舵椂闂淬傚綋瀹㈡埛鍦ㄨ繖涓鏃墮棿涔嬪悗娌℃湁榪涜屼換浣曟搷浣滅殑璇濓紝緋葷粺浼氬皢鐩稿叧鐨剆ession鑷鍔ㄤ粠鍐呭瓨涓閲婃斁銆傝秴鏃舵椂闂磋懼緱瓚婂ぇ錛岀郴緇熺殑鎬ц兘灝變細瓚婁綆錛屽洜姝ゆ渶濂界殑鏂規硶灝辨槸灝介噺浣垮緱瀹冪殑鍊間繚鎸佸湪涓涓杈冧綆鐨勬按騫熾
鏂規硶 4: 灝嗛〉闈㈣緭鍑鴻繘琛屽帇緙
鍘嬬緝鏄瑙e喅鏁版嵁鍐椾綑鐨勪竴涓濂界殑鏂規硶錛岀壒鍒鏄鍦ㄧ綉緇滃甫瀹戒笉澶熷彂杈劇殑浠婂ぉ銆傛湁鐨勬祻瑙堝櫒鏀鎸乬zip(GNU zip)榪涜屾潵瀵笻TML鏂囦歡榪涜屽帇緙╋紝榪欑嶆柟娉曞彲浠ユ垙鍓фу湴鍑忓皯HTML鏂囦歡鐨勪笅杞芥椂闂淬傚洜姝わ紝濡傛灉浣犲皢servlet鎴朖SP欏甸潰鐢熸垚鐨凥TML欏甸潰榪涜屽帇緙╃殑璇濓紝閭g敤鎴峰氨浼氳夊緱欏甸潰嫻忚堥熷害浼氶潪甯稿揩銆備絾涓嶅垢鐨勬槸錛屼笉鏄鎵鏈夌殑嫻忚堝櫒閮芥敮鎸乬zip鍘嬬緝錛屼絾浣犲彲浠ラ氳繃鍦ㄤ綘鐨勭▼搴忎腑媯鏌ュ㈡埛鐨勬祻瑙堝櫒鏄鍚︽敮鎸佸畠銆備笅闈㈠氨鏄鍏充簬榪欑嶆柟娉曞疄鐜扮殑涓涓浠g爜鐗囨碉細
浠ヤ笅鏄寮曠敤鐗囨碉細
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream out = null;
String encoding = request.getHeader("Accept-Encoding");
if (encoding != null
encoding.indexOf("gzip") != -1){
request.setHeader("Content-Encoding" , "gzip");
out = new GZIPOutputStream(request.getOutputStream());
}銆
else if (encoding != null
encoding.indexOf("comdivss") != -1){
request.setHeader("Content-Encoding" , "comdivss");
out = new ZIPOutputStream(request.getOutputStream());
}else{
out = request.getOutputStream();
}銆
...銆
...
}
鏂規硶 5: 浣跨敤綰跨▼奼
搴旂敤鏈嶅姟鍣ㄧ己鐪佸湴涓烘瘡涓涓嶅悓鐨勫㈡埛絝璇鋒眰鍒涘緩涓涓綰跨▼榪涜屽勭悊錛屽苟涓哄畠浠鍒嗘淳service()鏂規硶錛屽綋service()鏂規硶璋冪敤瀹屾垚鍚庯紝涓庝箣鐩稿簲鐨勭嚎紼嬩篃闅忎箣鎾ゆ秷銆傜敱浜庡壋寤哄拰鎾ゆ秷綰跨▼浼氳楄垂涓瀹氱殑緋葷粺璧勬簮錛岃繖縐嶇己鐪佹ā寮忛檷浣庝簡緋葷粺鐨勬ц兘銆備絾鎵騫哥殑鏄鎴戜滑鍙浠ラ氳繃鍒涘緩涓涓綰跨▼奼犳潵鏀瑰彉榪欑嶇姸鍐點
鍙﹀栵紝鎴戜滑榪樿佷負榪欎釜綰跨▼奼犺劇疆涓涓鏈灝忕嚎紼嬫暟鍜屼竴涓鏈澶х嚎紼嬫暟銆傚湪搴旂敤鏈嶅姟鍣ㄥ惎鍔ㄦ椂錛屽畠浼氬壋寤烘暟閲忕瓑浜庢渶灝忕嚎紼嬫暟鐨勪竴涓綰跨▼奼狅紝褰撳㈡埛鏈夎鋒眰鏃訛紝鐩稿簲鍦頒粠奼犱粠鍙栧嚭涓涓綰跨▼鏉ヨ繘琛屽勭悊錛屽綋澶勭悊瀹屾垚鍚庯紝鍐嶅皢綰跨▼閲嶆柊鏀懼叆鍒版睜涓銆傚傛灉奼犱腑鐨勭嚎紼嬩笉澶熷湴璇濓紝緋葷粺浼氳嚜鍔ㄥ湴澧炲姞奼犱腑綰跨▼鐨勬暟閲忥紝浣嗘婚噺涓嶈兘瓚呰繃鏈澶х嚎紼嬫暟銆傞氳繃浣跨敤綰跨▼奼狅紝褰撳㈡埛絝璇鋒眰鎬ュ墽澧炲姞鏃訛紝緋葷粺鐨勮礋杞藉氨浼氬憟鐜扮殑騫蟲粦鐨勪笂鍗囨洸綰匡紝浠庤屾彁楂樼殑緋葷粺鐨勫彲浼哥緝鎬с
鏂規硶 6: 閫夋嫨姝g『鐨勯〉闈㈠寘鍚鏈哄埗
鍦↗SP涓鏈変袱縐嶆柟娉曞彲浠ョ敤鏉ュ寘鍚鍙︿竴涓欏甸潰錛
1銆佷嬌鐢╥nclude鎸囩ず絎
浠ヤ笅鏄寮曠敤鐗囨碉細
錛%@ includee file=鈥漷est.jsp鈥 %錛
2銆佷嬌鐢╦sp鎸囩ず絎
浠ヤ笅鏄寮曠敤鐗囨碉細
錛渏sp:includee page=鈥漷est.jsp鈥 flush=鈥漷rue鈥/錛
鍦ㄥ疄闄呬腑鍙戠幇錛屽傛灉浣跨敤絎涓縐嶆柟娉曠殑璇濓紝鍙浠ヤ嬌寰楃郴緇熸ц兘鏇撮珮銆
鏂規硶 7:姝g『鍦扮『瀹歫avabean鐨勭敓鍛藉懆鏈
JSP鐨勪竴涓寮哄ぇ鐨勫湴鏂瑰氨鏄瀵筳avabean鐨勬敮鎸併傞氳繃鍦↗SP欏甸潰涓浣跨敤jsp:useBean鏍囩撅紝鍙浠ュ皢javabean鐩存帴鎻掑叆鍒頒竴涓狫SP欏甸潰涓銆傚畠鐨勪嬌鐢ㄦ柟娉曞備笅錛
浠ヤ笅鏄寮曠敤鐗囨碉細
錛渏sp:useBean id="name" scope="page|request|session|application"
class="package.className" type="typeName"錛
錛/jsp:useBean錛
鍏朵腑scope灞炴ф寚鍑轟簡榪欎釜bean鐨勭敓鍛藉懆鏈熴傜己鐪佺殑鐢熷懡鍛ㄦ湡涓簆age銆傚傛灉浣犳病鏈夋g『鍦伴夋嫨bean鐨勭敓鍛藉懆鏈熺殑璇濓紝瀹冨皢褰卞搷緋葷粺鐨勬ц兘銆
涓句緥鏉ヨ達紝濡傛灉浣犲彧鎯沖湪涓嬈¤鋒眰涓浣跨敤鏌愪釜bean錛屼絾浣犲嵈灝嗚繖涓猙ean鐨勭敓鍛藉懆鏈熻劇疆鎴愪簡session錛岄偅褰撹繖嬈¤鋒眰緇撴潫鍚庯紝榪欎釜bean灝嗕粛鐒朵繚鐣欏湪鍐呭瓨涓錛岄櫎闈瀞ession瓚呮椂鎴栫敤鎴峰叧闂嫻忚堝櫒銆傝繖鏍蜂細鑰楄垂涓瀹氱殑鍐呭瓨錛屽苟鏃犺皳鐨勫炲姞浜咼VM鍨冨溇鏀墮泦鍣ㄧ殑宸ヤ綔閲忋傚洜姝や負bean璁劇疆姝g『鐨勭敓鍛藉懆鏈燂紝騫跺湪bean鐨勪嬌鍛界粨鏉熷悗灝藉揩鍦版竻鐞嗗畠浠錛屼細浣跨敤緋葷粺鎬ц兘鏈変竴涓鎻愰珮銆
鍏跺畠涓浜涙湁鐢ㄧ殑鏂規硶
1銆佸湪瀛楃︿覆榪炴帴鎿嶄綔涓灝介噺涓嶄嬌鐢ㄢ+鈥濇搷浣滅︼細鍦╦ava緙栫▼涓錛屾垜浠甯稿父浣跨敤鈥+鈥濇搷浣滅︽潵灝嗗嚑涓瀛楃︿覆榪炴帴璧鋒潵錛屼絾浣犳垨璁鎬粠鏉ユ病鏈夋兂鍒拌繃瀹冨眳鐒朵細瀵圭郴緇熸ц兘閫犳垚褰卞搷鍚?鐢變簬瀛楃︿覆鏄甯擱噺錛屽洜姝JVM浼氫駭鐢熶竴浜涗復鏃剁殑瀵瑰儚銆備綘浣跨敤鐨勨+鈥濊秺澶氾紝鐢熸垚鐨勪復鏃跺瑰儚灝辮秺澶氾紝榪欐牱涔熶細緇欑郴緇熸ц兘甯︽潵涓浜涘獎鍝嶃傝В鍐崇殑鏂規硶鏄鐢⊿tringBuffer瀵瑰儚鏉ヤ唬鏇庫+鈥濇搷浣滅︺
2銆侀伩鍏嶄嬌鐢⊿ystem.out.println()鏂規硶錛氱敱浜嶴ystem.out.println()鏄涓縐嶅悓姝ヨ皟鐢錛屽嵆鍦ㄨ皟鐢ㄥ畠鏃訛紝紓佺洏I/O鎿嶄綔蹇呴』絳夊緟瀹冪殑瀹屾垚錛屽洜姝ゆ垜浠瑕佸敖閲忛伩鍏嶅瑰畠鐨勮皟鐢ㄣ備絾鎴戜滑鍦ㄨ皟璇曠▼搴忔椂瀹冨張鏄涓涓蹇呬笉鍙灝戠殑鏂逛究宸ュ叿錛屼負浜嗚В鍐寵繖涓鐭涚浘錛屾垜寤鴻浣犳渶濂戒嬌鐢↙og4j宸ュ叿( )錛屽畠鏃㈠彲浠ユ柟渚胯皟璇曪紝鑰屼笉浼氫駭鐢烻ystem.out.println()榪欐牱鐨勬柟娉曘
3銆丼ervletOutputStream 涓 PrintWriter鐨勬潈琛★細浣跨敤PrintWriter鍙鑳戒細甯︽潵涓浜涘皬鐨勫紑閿錛屽洜涓哄畠灝嗘墍鏈夌殑鍘熷嬭緭鍑洪兘杞鎹涓哄瓧絎︽祦鏉ヨ緭鍑猴紝鍥犳ゅ傛灉浣跨敤瀹冩潵浣滀負欏甸潰杈撳嚭鐨勮瘽錛岀郴緇熻佽礋鎷呬竴涓杞鎹㈣繃紼嬨傝屼嬌鐢⊿ervletOutputStream浣滀負欏甸潰杈撳嚭鐨勮瘽灝變笉瀛樺湪涓涓闂棰橈紝浣嗗畠鏄浠ヤ簩榪涘埗榪涜岃緭鍑虹殑銆傚洜姝ゅ湪瀹為檯搴旂敤涓瑕佹潈琛′袱鑰呯殑鍒╁紛銆
鎬葷粨
鏈鏂囩殑鐩鐨勬槸閫氳繃瀵箂ervlet鍜孞SP鐨勪竴浜涜皟浼樻妧鏈鏉ユ瀬澶у湴鎻愰珮浣犵殑搴旂敤紼嬪簭鐨勬ц兘錛屽苟鍥犳ゆ彁鍗囨暣涓狫2EE搴旂敤鐨勬ц兘銆傞氳繃榪欎簺璋冧紭鎶鏈錛屼綘鍙浠ュ彂鐜板叾瀹炲苟涓嶆槸鏌愮嶆妧鏈騫沖彴(姣斿侸2EE鍜.NET涔嬩簤)鍐沖畾浜嗕綘鐨勫簲鐢ㄧ▼搴忕殑鎬ц兘錛岄噸瑕佹槸浣犺佸硅繖縐嶅鉤鍙版湁涓涓杈冧負娣卞叆鐨勪簡瑙o紝榪欐牱浣犳墠鑳戒粠鏍規湰涓婂硅嚜宸辯殑搴旂敤紼嬪簭鍋氫竴涓浼樺寲銆
④ 怎麼設置頁面會話超時返回登錄頁面
首先需要在web.xml中設置項目中session超時時間,通常都是半小時:
<session-config><session-timeout>30</session-timeout></session-config>;
之後設置監聽器回(Linstener),用來監聽登錄時候的用戶答名和密碼session是否還存活,如果不存活的話,直接跳轉到登錄頁面。
1、不變地址欄:request.getRequestDispatcher("url").forward(request, response);
2、改變地址欄:response.sendRedirect("url");