天天看點

Servlet過濾器和監聽器(轉)

Servlet杩?婊ゅ?ㄦ?? Servlet 绋?搴???涓?绉??規???ㄦ?锛?涓昏??ㄦ?ュ????涓?浜????ㄧ????浣?锛?濡?缂?????杩?婊ゃ???ゆ???ㄦ?風???誨??舵????杩?婊ゅ?ㄤ嬌寰?Servlet寮??????藉??ㄥ?㈡?風??璇鋒??拌揪 Servlet璧?婧?涔???琚????鳳??ㄥ???涔?????????缁?琚?璇鋒???Servlet璧?婧?锛?骞朵?杩???浠ユ???峰??搴?锛?淇??逛?????????缁??ㄦ?楓????Servlet?????ㄥ??浠ヂ? ????瀹㈡?風?????虹??璇鋒??????″?ㄧ??????浣?锛???杩??????????浠ヨ???ㄦ???涓?浜???浣?锛?濡??????ㄧ嚎浜烘?般??

? Servlet杩?婊ゅ?ㄧ??浠?缁?

? ????Servlet杩?婊ゅ?ㄦ????ava Servlet 2.3 瑙???涓?瀹?涔???锛?瀹???涓?绉???浠ユ???ョ??Web缁?浠訛?瀹??藉?瀵?ervlet 瀹瑰?ㄧ???ユ?跺?扮??瀹㈡?風??璇鋒?????瀹㈡?風?????虹????搴?瀵矽薄杩?琛????鳳?杩?婊ゅ?ㄦ????瀵?ervlet绋?搴???JSP椤甸?㈢???烘??璇鋒?澶??????斤?濡??ュ????ц?姐??瀹??ㄣ??浼?璇?? 澶?????XSLT杞??㈢????

??

? ????Servlet杩?婊ゅ?ㄦ??韬?涓?浜х??璇鋒?????搴?锛?瀹?????渚?杩?婊や????Servlet杩?婊ゅ?ㄨ?藉???ervlet绋?搴?(JSP椤甸??琚?璋??ㄤ???妫??ヂ? request瀵矽薄锛?淇??矽?鋒?澶村??璇鋒???瀹癸???ervlet绋?搴?(JSP椤甸??琚?璋??ㄤ???锛?妫???esponse瀵矽薄锛?淇??瑰??搴?澶村????搴???瀹廣??

Servlet杩?婊ゅ?ㄧ???圭??? ????1.Servlet杩?婊ゅ?ㄥ??浠ユ??ュ??淇???equest??response瀵矽薄???

??

? ????2.Servlet杩?婊ゅ?ㄥ??浠ヨ???瀹?涓??瑰????URL?寵??锛?????褰?瀹㈡?瘋?鋒?璁塊??璇ョ?瑰????URL?訛???浼?瑙???杩?婊ゅ?ㄣ??

??

? ????3.Servlet杩?婊ゅ?ㄥ??浠ヨ?涓茶????涓詫?褰㈡??杩?婊ら?撅?????淇??矽?鋒?????搴???

? ?Servlet杩?婊ゅ?ㄧ??浣??ㄥ?涓?锛?

??

? ????1.?ヨ?㈣?鋒?骞朵??虹?稿???琛??ㄣ??

? ????2.?誨?璇鋒?--??搴?瀵癸?浣垮?朵??借?涓?姝ヤ?????

? ????3.淇??矽?鋒?澶村????瀹癸??ㄦ?峰??浠ユ??渚???瀹?涔???璇鋒???

? ????4.淇??瑰??搴?澶村????瀹癸??ㄦ?峰??浠ラ??杩???渚?瀹??剁????搴?????瀹??般??

? ????5.涓?澶??ㄨ?婧?杩?琛?浜や???

? 2 Servlet杩?婊ゅ?ㄧ??浣?绯葷???

? ????Servlet杩?婊ゅ?ㄧ?ㄤ?????浼??ョ??璇鋒???浼??虹????搴?锛?骞剁??瑙???淇??規??浠ユ??绉??瑰?澶??? 姝e?ㄩ??杩????版??娴???Servlet杩?婊ゅ?ㄦ??????????妯″??????缁?浠訛???浠ュ?瀹?浠?娣誨???拌?鋒?/??搴?杩?婊ら?句腑锛??????ㄤ?褰卞??搴??ㄧ?搴?涓??跺??Web缁?浠剁?????典??? ?ゅ??浠???Servlet杩?婊ゅ?ㄥ???ㄦ?瑰?ㄨ?鋒?????搴???杩?琛??跺???锛?????涓?搴?璇ュ?瀹?浠?涔??村??ュ??eb搴??ㄧ?搴?妗??訛??ら??????杩?Servlet API涓???濂藉??涔????????ュ?f?ュ???般??

??

? ????Web璧?婧???浠ラ??缃???涓烘病??杩?婊ゅ?ㄤ?涔??寵??(榛?璁ゆ??????涓???涓?杩?婊ゅ?ㄥ?寵??(?稿??????锛????蟲??涓?涓?涓?杩?婊ゅ?ㄩ?懼?寵?????跺???戒?Servlet涓? ?鳳?涓昏????ユ?惰?鋒?????搴?瀵矽薄锛??跺??杩?婊ゅ?ㄤ?妫??ヨ?鋒?瀵矽薄锛?骞跺?沖????灏?璇ヨ?鋒?杞???缁??句腑??涓?涓?涓?杩?婊ゅ???杩???缁?姝㈣?ヨ?鋒?骞剁?存?ュ??瀹㈡?風????浼?涓?涓???搴?锛?濡???? 璇鋒?琚?杞???浜?锛?瀹?灏?琚?浼???缁?杩?婊ら?句腑??涓?涓?涓?杩?婊ゅ???????Servlet绋?搴?(JSP椤甸??锛??ㄨ?涓?璇鋒???杩?杩?婊ゅ?ㄩ?懼苟琚????″?ㄥ?????锛?涓?涓???搴?灏?浠ョ?稿?? ??椤哄???杩?璇ヨ?婊ら?懼???????夥?杩??峰氨缁?姣?涓?Servlet杩?婊ゅ?ㄦ??渚?浜??規????瑕?澶?????搴?瀵矽薄???轟???

??

? ????褰?杩?婊ゅ?ㄥ??ervlet 2.3瑙???涓?棣?娆″??ユ?訛????借?婊ゅ?㈡?風????瀹㈡?風????璁塊??????瀹?Web璧?婧?涔??寸????瀹?璇鋒?/??搴?)锛?濡???璇?eb璧?婧?灏?璇鋒?杞???缁??跺??Web璧?婧??訛??e氨? 涓??藉??骞???濮?????浠諱?璇鋒?搴??ㄨ?婊ゅ?ㄣ??Servlet 2.4 瑙???娑??や?杩?涓????訛?Servlet杩?婊ゅ?ㄧ?闆?ㄥ??浠ュ??ㄤ?J2EE Web??澧?涓?瀛??ㄨ?鋒?????搴???浠諱??版?廣????瑙?锛?Servlet杩?婊ゅ?ㄥ??浠ュ??ㄥ?ㄥ?㈡?風????Servlet绋?搴?涔??淬??Servlet绋?搴???Servlet绋?搴? 涔??淬??Servlet绋?搴???JSP椤甸????淬??JSP椤甸?㈠??JSP椤甸????達??鋒??寮哄ぇ???藉?????墊椿?с??

??

???????????????????????????????????????????????????????????????????

??

? 2.1 Servlet杩?婊ゅ?ㄥ?矽?鋒???杩?婊?? ????Servlet杩?婊ゅ?ㄥ?矽?鋒???杩?婊よ?绋?濡?涓?锛?

??

? ????1.Servlet瀹瑰?ㄥ??寤轟?涓?Servlet杩?婊ゅ?ㄥ??渚???

? ????2.Servlet杩?婊ゅ?ㄥ??渚?璋???nit()?規?寰??闆??濮??????般??

? ????3.Servlet杩?婊ゅ?ㄥ??渚?璋???oFilter()?規?锛??規????濮??????扮???煎?ゆ??璇ヨ?鋒???????娉?锛?濡???璇ヨ?鋒?涓???娉?锛????誨?璇ヨ?鋒?锛?濡???????娉?璇鋒?锛???璋???hain.doFilter(request,response)?規?灏?璇ヨ?鋒?????杞?????

??

? 13.2.2 Servlet杩?婊ゅ?ㄥ?瑰??搴???杩?婊?? ????Servlet杩?婊ゅ?ㄥ?瑰??搴???杩?婊よ?绋?濡?涓?锛?

? ????1.杩?婊ゅ?ㄦ???峰?㈡?風????璇鋒???

? ????2.???闆?瑁?ServletResponse锛??ㄥ?瑁?????ServletResponse涓???渚?瀹㈡?風????瀹?涔???杈??烘???

? ????3.灏?璇鋒?????杞?????

? ????4.Web缁?浠朵駭????搴???

? ????5.杩?婊ゅ?ㄤ?琚?灏?瑁???ServletResponse涓??峰??瀹㈡?瘋??瀹?涔???杈??烘???

? ????6.灏???搴???瀹歸??杩?瀹㈡?瘋??瀹?涔???杈??烘????ョ??叉???

? ????7.?ㄧ??叉?涓?淇??瑰??搴???瀹瑰??娓?绌虹??叉?锛?杈??哄??搴???瀹廣??

??

? 2.3 Servlet杩?婊ゅ?ㄧ????甯??

? ????Seevlet杩?婊ゅ?ㄨ?捐?″??姣?涔???锛?蹇?椤誨?矽?ヨ?婊ゅ?ㄨ?琛???甯?(??缃?)锛? ??甯?涓?涓?Servlet杩?婊ゅ?ㄦ?訛?蹇?椤誨?ㄩ」????web.xml??浠朵腑????lt;filter>??绱???<filter- mapping>??绱?锛?<filter>??绱??ㄦ?ュ??涔?涓?涓?杩?婊ゅ???璇ュ??绱???灞??ф??锛?

灞??? ??杩?
filter-name ??瀹?杩?婊ゅ?ㄧ????瀛?
filter-class ??瀹?杩?婊ゅ?ㄧ被
init-param ??瀹?杩?婊ゅ?ㄧ????濮???????
????<filter-mapping>??绱??ㄤ?灏?杩?婊ゅ?ㄤ?URL?寵??锛??跺??ф??锛?
灞??? ??杩?
filter-name ??瀹?杩?婊ゅ?ㄧ????瀛?
url-pattern ??瀹?涓?杩?婊ゅ?ㄥ?寵????URL

3 瀹??頒?涓?Servlet杩?婊ゅ??? 3.1 Servlet杩?婊ゅ?ㄦ?ュ?g??????

? ??????????Servlet杩?婊ゅ?ㄩ?藉?椤誨????avax.servlet.filter?ュ?o?璇ユ?ュ?d腑瀹?涔?浜?3涓?杩?婊ゅ?ㄥ?椤誨???扮???規?锛?

??

? ????1.void? init(FilterConfig)锛?杩?婊ゅ?ㄧ????濮????規?锛?Servlet瀹瑰?ㄥ?ㄥ??寤鴻?婊ゅ?ㄥ??渚??惰??ㄨ?涓??規?锛??ㄨ?涓??規?涓???浠ヨ?誨?哄??eb.xml??浠朵腑涓鴻?ヨ?婊ゅ?ㄩ??缃?????濮??????般??

??

? ????2.voiddoFilter(ServletRequest,ServletResponse,FilterChain)锛??ㄤ?瀹???瀹?????杩?婊ゆ??浣?锛?褰?瀹㈡?瘋?鋒?璁塊??涓?杩?婊ゅ?ㄧ?稿?寵????URL?訛?Servlet瀹瑰?ㄥ???璋??ㄨ?婊ゅ?ㄧ??杩?涓??規?锛?FilterChain???扮?ㄤ?璁塊????缁?杩?婊ゅ?ㄣ??

??

? ????3.voiddestroy()锛?杩?婊ゅ?ㄥ?ㄨ???娑????ц?杩?涓??規?锛????捐?婊ゅ?ㄧ?寵?風??璧?婧???

??

? 3.2 Servlet杩?婊ゅ?ㄧ????寤烘?ラ??? ??????寤轟?涓?Servlet杩?婊ゅ?ㄩ??瑕?涓??㈢??姝ラ?わ?

? ????

? ??? 1.??寤轟?涓?瀹??頒?javax.servlet.Filter?ュ?g??绫彙??

??

? ????2.????init(FilterConfig)?規?锛?璇誨?ヤ負杩?婊ゅ?ㄩ??缃?????濮??????幫??寵?瘋?婊ゅ?ㄩ??瑕???璧?婧???

??

? ????3.?????規?doFilter(ServletRequest,ServletResponse,FilterChain)锛?瀹???杩?婊ゆ??浣?锛???浠ヂ? 浠?ServletRequest???頒腑寰??闆?ㄩ?ㄧ??璇鋒?淇℃??锛?浠?ServletResponse???頒腑寰??闆?ㄩ?ㄧ????搴?淇℃????

??

? ????4.??oFilter()?規???????锛?浣跨??ilterChain???扮??doFilter()?規?灏?璇鋒?????搴???浼???

??

? ????5.瀵瑰??搴???Servlet绋?搴???JSP椤甸?㈡敞??杩?婊ゅ????ㄩ?ㄧ講??杩版??浠?web.xml)涓?浣跨??lt;filter-apping>??<filter>??绱?瀵矽?婊ゅ?ㄨ?琛???缃???

??

? 3.3 缂???杩?婊ゅ?ㄧ被

? ?????ㄨ?婊ゅ?ㄤ腑锛???瑕?浣跨??涓?绠??????ュ?o?瀹?浠???锛???????Filter??FilterChain??FilterConfig锛??ㄩ?ㄥ??????avax.servlet??涓???浠?缂?绋???瑙?搴???锛?杩?婊ゅ?ㄧ被瑕?瀹???ilter?ュ?o??跺??浣跨?ㄥ???頒?FilterChain??FilterConfig?ュ?g??瀵矽薄?ュ伐浣?锛?FilterChain瀵矽薄璐?璐e?璇鋒?????搴???浼?锛?FilterConfig瀵矽薄璐?璐d負杩?婊ゅ?ㄨ?誨??濮??????般??

??

? ????涓轟?涓?杩?婊ゅ?ㄧ??涓?姝ユā寮?(??寤恒??宸ヤ????ゆ?)淇???涓??達?杩?婊ゅ?ㄥ?椤婚????Filter?ュ?d腑??涓?涓??規?锛?

??

? ????init()锛??ㄥ?瑰?ㄥ??渚???杩?婊ゅ?ㄥ??惰?璋????涓昏?涓鴻?婊ゅ?ㄥ????濮???锛?璇ユ?規???涓?涓?FilterConfig绫誨????褰㈠????

??

? ????doFilter()锛?杩?涓??規??ㄦ?ュ??????姝g??杩?婊ゆ??浣?锛?瀹???3涓?褰㈠????幫?ServletRequest???闆????璇鋒?淇℃??锛?ServletResponse???闆??????搴?淇℃??锛?FilterChain???扮?ㄦ?ュ?璇鋒?????搴?????浼?????

??

? ????destroy()锛?杩?婊ゅ?ㄨ??ゆ??惰??ㄨ?涓??規?锛????捐?婊ゅ?ㄦ?? ??????璧?婧???

??

? ?????ㄤ??㈢??渚?瀛?涓?瀹??頒?涓?涓?绠?????Servlet杩?婊ゅ??SessionFilter.java)锛?瀹?瀹??扮?????芥???ゆ??瀹㈡?鋒?????????誨?锛?濡????????誨?锛?杞???姝g‘椤甸???????杩???涓?涓???璇?椤甸?????绀哄?㈡?峰?璇ヨ?琛??誨???璇ヨ?婊ゅ?ㄤ唬??濡?涓?锛?

??

? ????//includeList:?扮?锛???淇??ょ??璧?婧???

? ????//logonList锛??扮?锛??誨?椤甸????

? ????package ch13;

? ????import javax.servlet.*;

? ????import javax.servlet.http.*;

? ????import java.io.*;

? ????public class SessionFilter implements?Filter{

? ????????String? logonStrings,includeStrings,redirectPath,disabletestfilter;

? ????????String[]? logonList,includeList;

??

? ????????private boolean? isContains(String containers,String[] regx) {

? ????????????boolean? result=false;

? ????????????for(int? i=0;i<regx.length;i++) {

? ????????????????if? (containers.indexOf(regx[i])!=-1)

? ????????????????????return? true;

? ????????????}

? ????????????return? result;

? ????????}

??

? ????????public FilterConfig config;

? ????????private void? setFilterConfig(FilterConfig config) {

? ????????????this.config=config;

? ????????}

??

? ????????private FilterConfig? getFilterConfig(){

? ????????????return? config;

? ????????}

??

? ????????//蹇?椤婚????

? ????????public void init(FilterConfig?filterConfig) throws ServletException{

? ????????????this.config=filterConfig;

? ????????????logonStrings=config.getInitParameter("logonStrings");

? ???????????? includeStrings=config.getInitParameter("includeStrings");

? ???????????? redirectPath=config.getInitParameter("redirectPath");

? ???????????? disabletestfilter=config.getInitParameter("disabletestfilter");

? ????????????logonList=logonStrings.split(";");//???蹭負?扮?

? ???????????? includeList=includeStrings.split(";");//???蹭負?扮?

? ????????}

? ????????//蹇?椤婚????

? ????????public void? doFilter(ServletRequest request,ServletResponse response,FilterChain?

? ????????????????????????????????????chain)? throws ServletException, IOException {

? ????????????HttpServletRequest? httpreq=(HttpServletRequest)request;

? ????????????HttpServletResponse? httpres=(HttpServletResponse)response;

? ????????????HttpServletResponseWrapper? wrapper=new HttpServletResponseWrapper(

? (HttpServletResponse)response);

? ????????????if? (disabletestfilter.toUpperCase().equals("Y")){

? ????????????????chain.doFilter(request,response);//濡???涓?杩?婊?? ????????????????return;

? ????????????}

? ????????????Object? user=httpreq.getSession().getAttribute("userinfo");

? ????????????if? (user==null){//璇ョ?ㄦ?鋒病???誨?

? ????????????????if? (!isContains(httpreq.getRequestURI(),includeList)){

? ????????????????????chain.doFilter(request,response);

? ????????????????????return;//璁塊??????涓???淇??ょ??椤甸?????浠?? ????????????????}

? ????????????????if? (isContains(httpreq.getRequestURI(),logonList)){

? ????????????????????chain.doFilter(request,response);

? ????????????????????return;? //璁塊???????誨?椤甸?????浠?? ????????????????}

? ????????????????wrapper.sendRedirect(redirectPath);? //杞????婚〉?⒙?

? ????????????}else? {//璇ョ?ㄦ?峰凡缁??誨?

? ????????????????chain.doFilter(request,response);

? ????????????}

? ????????}

? ????????//蹇?椤婚????

? ????????public void destroy() {

? ????????????config=null;

? ????????}

? ????}

??

? ?????ㄤ??㈢??杩?涓?Servlet杩?婊ゅ?ㄧ?搴?涓?锛??規???ㄦ??ession瀵矽薄涓?????userinfo杩?涓?灞??ф?ョ‘瀹?璇ョ?ㄦ?鋒????凡缁??誨???

??

? 3.4 ??缃??ㄧ講杩?婊ゅ??? ??????EB-INF/web.xml??浠朵腑?ㄤ互涓?浠g????缃?杩?婊ゅ???

??

? ????<filter>

? ????????<filter-name>SessionFilter</filter-name>

? ????????????<filter-class>ch13.SessionFilter</filter-class>??

? ????????<init-param>

? ????????????<param-name>logonStrings</param-name>

? ????????????<param-value>Login.jsp</param-value>??

? ????????</init-param>?

? ????????<init-param>

? ????????????<param-name>includeStrings</param-name>

? ????????????<param-value>.jsp;.html;.htm</param-value>?

? ????????</init-param>?

? ????????<init-param>

? ????????????<param-name>redirectPath</param-name>

? ????????????<param-value>./Login.jsp</param-value>??

? ????????</init-param>?

? ????????<init-param>

? ????????????<param-name>disabletestfilter</param-name>

? ????????????<param-value>n</param-value>??

? ????????</init-param>?

? ????</filter>?

? ????<filter-mapping>

? ????????<filter-name>SessionFilter</filter-name>

? ????????<url-pattern>/*</url-pattern>

? ????</filter-mapping>

??

? ?????ㄤ??㈢????缃?涓?锛?????ogonStrings??瀹???浠ヨ?塊?????誨?椤甸???????ncludeStrings??瀹???淇??ょ??璧?婧?????缂?锛?????edirectPath琛ㄧず娌℃???誨??惰漿?????誨?椤甸???????isabletestfilter琛ㄧず杩?婊ゅ?ㄦ???????????? /* 琛ㄧず杩?婊ゅ?ㄤ???????URL?藉?寵??(瀵規??????璁塊??璇鋒??借?琛?杩?婊????ㄦ?瑙??ㄤ腑璁塊??浠繪????璧?婧??訛??借???杩?杩?涓?杩?婊ゅ?ㄧ??杩?婊ゃ??

??

? 4 杩?婊ゅ?ㄧ??搴??ㄦ?渚?.4.1 ????杩?婊ゅ?ㄧ??搴??ㄦ?渚?

? ?????ㄤ?涓?Web搴??ㄤ腑??????椤甸?㈢??涓??㈡坊??涓?????淇℃??锛???甯哥????娉???????lt;%@ include>??浠ゆ??<c:import> ??绛撅?浣跨?ㄨ?婊ゅ?ㄤ???涓?涓?濂藉??娉???

??

? ????1.缂???杩?婊ゅ?ㄧ被CopyrightFilter.java

? ????package ch13;

? ????import javax.servlet.*;

? ????import javax.servlet.http.*;

? ????import java.io.*;

? ????public class CopyrightFilter implements?Filter{

? ????????private String date;

? ????????public FilterConfig config;

? ????????//蹇?椤婚????

? ????????public void init(FilterConfig?filterConfig) throws ServletException{

? ????????????this.config=filterConfig;

? ????????????date=config.getInitParameter("date");

? ????????}

? ????????//蹇?椤婚????

? ????????public void?doFilter(ServletRequest request,ServletResponse response,FilterChain?

? ????????????????????????????????????????????chain)? throws ServletException, IOException {

? ????????????chain.doFilter(request,response);

? ????????????PrintWriter? out=response.getWriter();

? ????????????out.print("<br><center><font? size='3' color='red'>????????锛???浜?宸ヤ?澶у??? ????????????????????????????????????????????????????????????</center></font>");

? ????????????if? (date!=null)?

? ????????????????out.print("<br><center><font? color='blue'>"+date+"</center></font>");

? ????????????out.flush();

? ????????}

? ????????//蹇?椤婚????

? ????????public void?destroy() {

? ????????????config=null;

? ????????}

? ????}

??

? ?????ㄨ?涓?杩?婊ゅ?ㄤ腑锛???oFilter()?規???????锛???杩?response瀵矽薄寰??頒?涓?杈??烘?out锛??跺????杩?杈??烘???瀹㈡?風??杈??虹????淇℃??锛?杩??鳳?姣?涓?椤甸?㈢???????戒??虹?拌?婊ゅ?ㄦ坊????????淇℃????

??

? ????2.淇???eb.xml锛???缃?璇ヨ?婊ゅ??? ????<filter>

? ????????<filter-name>CopyrightFilter</filter-name>

? ????????????<filter-class>ch13.CopyrightFilter</filter-class>??

? ????????<init-param>

? ????????????<param-name>date</param-name>

? ????????????<param-value>2010-9</param-value>??

? ????????</init-param>?

? ????</filter>?

? ????<filter-mapping>

? ????????<filter-name>CopyrightFilter</filter-name>

? ????????<url-pattern>/*</url-pattern>

? ????</filter-mapping>

??

? ????3.娴?璇?

???????ㄦ?瑙??ㄤ腑浠繪??璁塊??涓?涓?椤甸????藉??浠ュ?ㄧ???闆?ㄩ〉?㈢??涓??ㄥ?虹?拌?婊ゅ?ㄦ坊????????淇℃????

??

? 4.2 绂?姝㈡????????IP璁塊??绔??矽?婊ゅ?ㄧ??搴??ㄦ?渚?

? ????浣跨?ㄨ?婊ゅ?ㄧ?姝㈡????????IP璁塊??绔??規??杩?婊ゅ?ㄥ父瑙???搴??????渚?婕?绀轟?濡?浣??╃?ㄨ?婊ゅ?ㄥ???扮?姝㈡????????IP璁塊??绔??廣??

??

? ????1.缂???杩?婊ゅ?ㄧ被FilterIP.java

? ????package ch13;

? ????import javax.servlet.*;

? ????import javax.servlet.http.*;

? ????import java.io.*;

? ????public class FilterIP implements?Filter{

? ????????private String? filterIP,error;

? ????????public FilterConfig config;

? ????????//蹇?椤婚????

? ????????public void?init(FilterConfig?filterConfig) throws? ServletException{

? ????????????this.config=filterConfig;

? ????????????filterIP=config.getInitParameter("FilterIP");

? ????????????if? (filterIP==null) filterIP="";

? ????????????error=config.getInitParameter("ERROR");

? ????????????if? (error==null) error="error.jsp";

? ????????}

? ????????//蹇?椤婚????

? ????????public void?doFilter(ServletRequest request,ServletResponse response,FilterChain?

? ????????????????????????????????????????????chain)? throws ServletException, IOException {

? ????????????RequestDispatcher? dispatcher=request.getRequestDispatcher("ErrorInfo.jsp");

? ????????????String remoteIP=request.getRemoteAddr();//寰??闆?㈡?風??IP?闆??

? ????????????if? (remoteIP.equals(filterIP)) {

? ????????????????dispatcher.forward(request,response);

? ????????????????return;

? ????????????}? else

? ????????????????chain.doFilter(request,response);

? ????????}

? ????????//蹇?椤婚????

? ????????public void?destroy() {

? ????????????config=null;

? ????????}

? ????}

??

? ?????ㄨ?涓?杩?婊ゅ?ㄤ腑锛???oFilter()?規???锛???杩?request瀵矽薄寰??闆?㈡?風????IP?闆??锛?濡???瀹㈡?風????IP??琚?绂?姝㈢??IP锛???浣跨??equest瀵矽薄灏?璇鋒?杞???缁?涓?涓??洪??椤甸????

??

? ????2.淇???eb.xml锛???缃?杩?婊ゅ??? <filter>

? ????????<filter-name>FilterIP</filter-name>

? ????????????<filter-class>ch13.FilterIP</filter-class>??

? ????????<init-param>

? ????????????<param-name>FilterIP</param-name>

? ????????????<param-value>192.168.1.1</param-value>??

? ????????</init-param>?

? ????????<init-param>

? ????????????<param-name>ERROR</param-name>

? ????????????<param-value>error.jsp</param-value>??

? ????????</init-param>

? ????</filter>?

? ????<filter-mapping>

? ????????<filter-name>FilterIP</filter-name>

? ????????<url-pattern>/*</url-pattern>

? ????</filter-mapping>

??

? ????瀵規?ヨ??192.168.1.1??瀹㈡?風??????璇鋒?(/*)?借?琛?杩?婊わ?杞?绉誨??rror.jsp椤甸????

??

? ????3.缂????洪??椤甸??rror.jsp

??????<%@? page contentType="text/html;charset=gb2312" %>

? ????缃?绔?涓???璁?P?闆??涓?92.168.1.1??璁$???鴻?塊????

??

? ??????P?闆??涓郝? 192.168.1.1 ??璁$???轟?璁塊??缃?绔???浠諱?涓?涓?璧?婧?锛??戒?杞?绉誨??rror.jsp椤甸????

??

? 4.3 杩?婊ら〉?㈠??瀹???搴???瀹?

????????杩?婊ゅ?ㄤ嬌??ttpServletResponseWrapper绫宦? ?ュ???伴〉?㈠??瀹圭??杩?婊わ?瀹?????????璁?eb璧?婧???灏?椤甸?㈠??瀹???搴???瀹????ュ??ttpServletResponseWrapper瀵矽薄涓?锛??跺?????ㄨ?? 婊ゅ?ㄤ腑澶???HttpServletResponseWrapper瀵矽薄涓???椤甸?㈠??瀹???搴???瀹?锛???????灏?澶???濂界??椤甸?㈠??瀹???搴???瀹?????缁?瀹㈡?楓??

??

? ????1.缂???HttpServletResponseWrapper绫葷??瀛?绫?java

? ????package ch13;

? ????import java.io.ByteArrayOutputStream;?

? ????import java.io.OutputStreamWriter;?

? ????import java.io.IOException;?

? ????import java.io.PrintWriter;?

? ????import java.io.UnsupportedEncodingException;?

? ????import javax.servlet.http.HttpServletResponse;?

? ????import javax.servlet.http.HttpServletResponseWrapper;

? ????import javax.servlet.ServletOutputStream;

? ????public class?WrapperResponse?extends? HttpServletResponseWrapper {?

? ????????public static final int? OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;?

? ????????private int outputType =? OT_NONE;?

? ????????private ServletOutputStream? output = null;?

? ????????private PrintWriter writer =? null;?

? ????????private ByteArrayOutputStream? buffer = null;?

??

? ????????//?????芥?奧?

? ????????public? WrapperResponse(HttpServletResponse resp) throws IOException {?

? ????????????super(resp);??

? ????????????buffer? = new ByteArrayOutputStream();?

? ????????}?

??

? ????????//寰??闆??绗???烘?

? ????????public PrintWriter?getWriter()?throws IOException {?

? ????????????if? (outputType == OT_STREAM)?

? ????????????????throw? new IllegalStateException(); //宸茬??ㄤ?OutputStream娴?

? ????????????else? if (outputType == OT_WRITER)?

? ????????????????return? writer;?

? ????????????else? {?

? ????????????????outputType? = OT_WRITER;?

? ????????????????writer? = new PrintWriter(new? OutputStreamWriter(buffer,?getCharacterEncoding()));?

? ????????????????return? writer;?

? ????????????}?

? ????????}

??

? ????????//寰??闆????杈??烘?

? ????????public ServletOutputStream?getOutputStream()?throws IOException {?

? ????????????if? (outputType == OT_WRITER)?

? ????????????????throw? new IllegalStateException(); //宸茬??ㄤ?Writer娴?

? ????????????else? if (outputType == OT_STREAM)?

? ????????????????return? output;?

? ????????????else? {?

? ????????????????outputType? = OT_STREAM;?

? ????????????????output? = new?WrappedOutputStream(buffer);?

? ????????????????return? output;?

? ????????????}?

? ????????}?

??

? ????????//?鋒?拌??哄??瀹?? ????????public void?flushBuffer()?throws IOException {?

? ????????????if? (outputType == OT_WRITER)?

? ????????????????writer.flush();??

? ????????????if? (outputType == OT_STREAM)?

? ????????????????output.flush();??

? ????????}?

??

? ????????//杈??虹??插?哄?浣?

? ????????public void?reset()?{?

? ????????????outputType? = OT_NONE;?

? ????????????buffer.reset();??

? ????????}?

? ????????public String? getResponseData() throws IOException {?

? ????????????flushBuffer();??

? ????????????return? new String(buffer.toByteArray());?

? ????????}?

??

? ????????//???ㄧ被锛?灏??版?????ヨ??宸辯??瀹?涔???缂??插??? ????????class?WrappedOutputStream?extends ServletOutputStream {?

? ????????????????private? ByteArrayOutputStream buffer;?

? ????????????????public? WrappedOutputStream(ByteArrayOutputStream buffer) {?

? ????????????????????this.buffer? = buffer;?

? ????????????????}??

? ????????????????public? void write(int b) throws IOException {?

? ????????????????????buffer.write(b);??

? ????????????????}??

? ????????????????public? byte[] toByteArray() {?

? ????????????????????return? buffer.toByteArray();?

? ????????????????}??

? ????????}?

? ????}?

??

? ?????ㄨ?涓?绫諱腑锛?涓?瀹?瑕?????response瀵矽薄???充?杈??烘?锛?outputStream??writer锛???浣????規?锛?getOutputStream()??getWriter()??flushBuffer()??reset()??

??

? ????2.缂???杩?婊ゅ??avinFilter.java

? ????package ch13;

? ????import java.io.IOException;?

? ????import javax.servlet.*;?

? ????import javax.servlet.http.HttpServletRequest;?

? ????import javax.servlet.http.HttpServletResponse;?

? ????public class?GavinFilter?implements?Filter?{?

? ????????private String? oldword="%" , newword="?懼????;?

? ????????public void destroy(){}

? ????????public void? doFilter(ServletRequest request, ServletResponse response,?FilterChain

? ????????????????????????????????????????????????chain)? throws IOException, ServletException {?

? ????????????HttpServletResponse? oldresponse = (HttpServletResponse)response;?

? ????????????WrapperResponse??wrapperResponse?= new WrapperResponse(oldresponse);?

? ????????????chain.doFilter(request,??wrapperResponse); //璁╂???″?ㄥ???搴???瀹瑰????rapper涓?

? ????????????String? html = wrapperResponse.getResponseData(); //???哄??搴???瀹?? ????????????oldresponse.getWriter().print(html.replaceAll(oldword,? newword)); //?挎?㈤〉??腑????瀛?锛??跺??????缁?瀹㈡??? ????????}?

? ????????public void init(FilterConfig?config) throws ServletException {

? ????????????oldword=config.getInitParameter("oldword");

? ????????????newword=config.getInitParameter("newword");

? ????????}?

? ????}

??

? ????璇ヨ?婊ゅ?ㄥ?椤甸?㈠??瀹???搴???瀹?涓???瀛?绗β?%??挎??負?懼???蜂?涓?姹?瀛?锛??辨?ゅ??瑙?锛?瀹??頒?瀵瑰??搴???瀹圭??杩?婊ゃ???

??

? ????3.瀵矽?ヨ?婊ゅ?ㄧ????缃?

? ????<filter>?

? ????????<filter-name>gavinFilter</filter-name>??

? ????????<filter-class>ch13.GavinFilter</filter-class>??

? ????????<init-param>?

? ????????????<param-name>oldword</param-name>??

? ????????????<param-value>%</param-value>?

? ????????</init-param>?

? ????????<init-param>?

? ????????????<param-name>newword</param-name>??

? ????????????<param-value>?懼????lt;/param-value>?

? ????????</init-param>?

? ????</filter>

? ????<filter-mapping>?

? ????????<filter-name>gavinFilter</filter-name>??

? ????????<url-pattern>/*</url-pattern>??

? ????</filter-mapping>?

??

? 5 Servlet??????? ????Servlet?????ㄤ????? listener锛???杩?瀹???浠ョ????Web搴??ㄧ??涓?涓???(??澧?)淇℃????Servlet璇鋒?淇℃????Servlet浼?璇?淇℃??锛?骞惰???ㄦ?規??涓??????碉??ㄥ???拌??ㄧ?嘎? 搴???澶???绋?搴?????杩??????????浠ヨ???ㄦ???涓?浜???浣?锛?姣?濡??????ㄧ嚎浜烘?幫?褰?澧???涓?涓?HttpSession?跺氨婵??? sessionCreated(HttpSessionEvent)?規?锛?杩??峰氨??浠ョ??ㄧ嚎浜烘?闆??1??

??

? 13.5.1 ?????ㄧ??????

? ????Servlet?????ㄦ??Web搴??ㄥ?????涓?涓???瑕?缁?????? ??锛?Servlet?????ㄦ????ervlet2.3瑙???涓???Servlet杩?婊ゅ?ㄤ?璧峰??ョ??????Servlet2.4 瑙???涓?瀵瑰?惰?琛?浜?姣?杈?澶х???矽???涓昏?灏辨???ㄦ?ュ??eb搴??ㄨ?琛????e???у?訛???澶у?闆?寮轟?Web搴??ㄧ??浜?浠跺????藉????

??

? ????Servlet?????ㄧ?????芥??杈?绫諱技浜?Java涓???GUI绋?搴????????????浠ョ?????變?Web搴??ㄤ腑???舵???瑰????寮?璧風??Servlet瀹瑰?ㄤ駭?????稿?浜?浠訛??跺???ユ?跺苟澶???杩?浜?浜?浠躲??

??

? 5.2 ?????ㄧ??绫誨??

? ??????Servlet 2.4 瑙???涓?锛??規??????瀵矽薄??绫誨???????達?灏??????ㄥ??涓?绫夥?ServletRequest??????璇鋒?????????HttpSession??????浼?璇?????????ServletContext??????涓?涓?????????锛??朵腑璇鋒???????ServletRequest????????? Servlet 2.4 瑙???涓??闆??????????????浠ョ?ㄦ?ョ????瀹㈡?風??绔?璇鋒?锛???ervlet 2.4 瑙???涓?????浜?8涓??????ㄦ?ュ?e??6涓??????ㄤ?浠剁被锛??蜂????????ㄦ?ュ?e??浜?浠跺?涓?琛??

????瀵矽薄 ?????ュ?? ????浜?浠?
ServletRequest ServletRequestListener????(2涓??規?) ServletRequestEvent
ServletRequestAttributeListener????(3涓??規?) ServletRequestAttributeEvent
HttpSession HttpSessionListener????(2涓??規?) HttpSessionEvent
HttpSessionActivationListener????(2涓??規?)
HttpSessionAttributeListener????(3涓??規?) HttpSessionBindingEvent
HttpSessionBindingListener????(2涓??規?)
ServletContext ServletContextListener????(2涓??規?) ServletContextEvent
ServletContextAttributeListener????(3涓??規?) ServletContextAttributeEvent

????1.琚?????瀵矽薄ServletContext

? ????瀵?ervletContext瀵矽薄(JSP椤甸??腑绉頒負application瀵矽薄)瀹??扮????娑???2涓??ュ?o?

??

? ????(1)ServletContextListener?ュ?o??ㄤ?????ServletContext瀵矽薄????寤哄?????わ??ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????褰???寤轟?涓?ServletContext瀵矽薄?訛?婵?????contextInitialzed(ServletContextEvent)?規???

? ????????褰??ゆ?涓?涓?ServletContext瀵矽薄?訛?婵?????contextDestroyed(ServletContextEvent)?規???

??

? ????(2)ServletContextAttributeListener?ュ?o??ㄤ?????ServletContext瀵矽薄??灞??ф??浣????ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????澧???灞??ф?訛?婵????attributeAdded(ServletContextAttributeEvent)

? ???????????ゅ??ф?訛?婵????attributeRemoved(ServletContextAttributeEvent)?

? ????????淇??瑰??ф?訛?婵????attributeReplaced(ServletContextAttributeEvent)?

??

? ????2.琚?????瀵矽薄HttpSession

? ????瀵?ttpSession瀵矽薄(session)瀹??扮????娑???4涓??ュ?o?

??

? ????(1)HttpSessionListener?ュ?o?杩?涓??ュ?g????Http浼?璇?????寤哄???ゆ?锛?骞跺?ㄦ??涓?session瀵矽薄寤虹??????姣?涔???璋??ㄦ??涓??規????ュ?d腑瀹?涔?????璋??規???锛?

??

? ??????????寤轟?涓?session瀵矽薄?訛?婵?????sessionCreated(HttpSessionEvent)

? ???????????や?涓?session瀵矽薄?訛?婵????sessionDestroyed(HttpSessionEvent)

??

? ????(2)HttpSessionActivationListener?ュ?o?????Http浼?璇???active??passivate?舵?????ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????session瀵矽薄琚?淇?瀛??扮????訛?婵????sessionWillPassivate(HttpSessionEvent)

? ????????session瀵矽薄琚?璋??ュ??瀛??訛?婵????sessionDidActivate(HttpSessionEvent)

??

? ????Activate涓?Passivate???ㄤ?缃???ession瀵矽薄???ㄤ?锛?褰?Web???″?ㄥ??涓鴻?婧??╃?ㄦ??璐?杞藉鈎琛$??????瑕?灏???瀛?涓??? session瀵矽薄???跺?ㄥ???崇‖?????跺???ㄥ???ㄦ????杩?瀵矽薄搴?????)锛???浣????ㄤ?绉頒?涓?assivate锛???纭??????ㄥ???ㄤ???session瀵矽薄???闆?? 杞藉??VM涓??舵???????ㄤ?绉頒?涓?ctivate??sessionDidActivate()?規?涓? sessionWillPassivate()?規?????浜?Activeate??涓?Passivate??琚?璋??ㄣ???

??

? ????(3)HttpSessionAttributeListener?ュ?o?????Http浼?璇?涓?灞??х??璁劇疆淇℃?????ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????????涓?session瀵矽薄涓?澧????闆??ф?訛?婵?????attributeAdded(HttpSessionBindingEvent)

? ???????????ゆ??涓?session瀵矽薄涓???灞??ф?訛?婵????attributeRemoved(HttpSessionBindingEvent)

? ????????淇??規??涓?session瀵矽薄涓???灞??ф?訛?婵????attributeReplaced(HttpSessionBindingEvent)

??

? ????浣跨??ttpSessionBindingEvent浜?浠剁被瀵矽薄??getSession()?規???浠ュ??拌?涓?session瀵矽薄锛?浣跨??HttpSessionBindingEvent瀵矽薄??getName()?規?寰??闆??х????瀛?锛?浣跨??etValue()?規?寰??闆??х???箋??

??

? ?????ユ??灞??у???ュ?版??涓?浼?璇?锛?HttpSession锛?瀵矽薄锛???浼?璋???ttributeAdded()锛??????ㄦ?挎?㈠??т?绉婚?ゅ??ф?訛?浼?????璋???ttributeReplaced()??attributeRemoved()??

????(4)HttpSessionBindingListener?ュ?o?杩?????涓?涓?涓?涓???瑕???eb.xml涓?杩?琛???缃????????ㄦ?ュ?o?????Http浼?璇?涓?灞??х?????????點???ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????灞??ц????ュ??ession涓??訛?婵???灞??х???valueBound(HttpSessionBindingEvent)

? ????????灞??ц?浠?session涓????ゆ?訛?婵???灞??х???valueUnbound(HttpSessionBindingEvent)

??

? ????浣跨??ttpSessionBindingEvent浜?浠剁被瀵矽薄??getSession()?規???浠ュ??拌?涓?session瀵矽薄锛?浣跨??HttpSessionBindingEvent瀵矽薄??getName()?規?寰??闆??х????瀛?锛?浣跨??etValue()?規?寰??闆??х???箋??

??

? ????濡???涓?涓?瀵矽薄object瀹??頒?HttpSessionBindingListener?ュ?f?訛?褰???object瀵矽薄淇?瀛???ession涓??訛? 灏變????ㄨ???bject瀵矽薄??valueBound()?規?锛?濡???瀵矽薄object琚?浠?session锛?HttpSession锛?绉婚?ゆ?訛???浼?璋???object瀵矽薄??valueUnbound()?規???浣跨?ㄨ?涓??ュ?o???浠ヨ?╀?涓?瀵矽薄??宸辯?ラ??瀹???宸辨??琚?淇?瀛??頒?session涓?锛?杩???浠?session 涓?琚????や??? ????

? ????

? ????3.琚?????瀵矽薄ServletRequest

? ????瀵?ervletRequest瀵矽薄(request)瀹??扮????娑???2涓??ュ?o?

??

? ????(1)ServletRequestListener?ュ?o?????璇鋒?????寤哄???ゆ?锛?璇ユ?ュ?g?ㄦ?ョ????璇鋒??拌揪??缁???锛???姝ゅ??浠ュ?ㄨ?鋒?杈懼?闆????璇鋒?缁??????ц?涓?浜??ㄦ?瘋?涓恒??? ?ュ?d腑瀹?涔?????璋??規???锛??

??

? ????璇鋒?瀵矽薄??濮????訛?婵????requestInitialized(ServletRequestEvent)

? ????璇鋒?瀵矽薄琚??ゆ??訛?婵?????requestDestroyed(ServletRequestEvent)

??

? ??????equest锛?HttpServletRequest锛?瀵矽薄寤虹????琚?娑????訛?浼?????璋???equestInitialized()??requestDestroyed()?規???

??

? ????(2)ServletRequestAttributeListener?ュ?o?????璇鋒?涓?(request瀵矽薄涓?)??灞??у???????ュ?d腑瀹?涔?????璋??規???锛?

??

? ????????涓?request瀵矽薄涓?澧???灞??ф?惰?璋???ttributeAdded(ServletRequestAttributeEvent)?規???

? ????浠???涓?request瀵矽薄涓????ゅ??ф?惰?璋???ttributeRemoved(ServletRequestAttributeEvent)?規???

? ????淇??規??涓?request涓???灞??ф?惰?璋???ttributeReplaced(ServletRequestAttributeEvent)?規???

??

? ????浣跨??ervletRequestEvent绫葷??getServletRequest()?規???浠ュ??拌?涓?琚???????璇鋒?瀵矽薄锛?浣跨??? ServletRequestAttributeEvent绫葷??getName()?規???浠ュ??闆??у??锛?getValue()?規???浠ュ??闆??х???箋??

??

? ?????ユ??灞??у???ュ?版??涓?request瀵矽薄涓??跺??浼?璋???ttributeAdded()锛??????ㄦ?挎?㈠??т????ゅ??ф?訛?浼?????璋???ttributeReplaced()?? attributeRemoved()???

??

? ????褰?Web搴??ㄧ?搴????ㄥ??锛??ㄥ???浠諱?璇鋒?涔???锛?璋???ontextInitialzed()?規???getInitParamter()?規?锛?杩???? ?ㄩ??缃???浠朵腑涓哄??涔?????澧???濮???淇℃????涓?????缁?浠訛?濡?Servlet??JSP???????ㄥ??杩?婊ゅ?ㄧ??锛???杩?ServletRequest?? HttpSession ?? ServletContext杈懼?版?版???變韓锛?杩?浜?绫婚?芥??渚?浜?涓??㈢??涓?缁??規?锛???浠ヤ嬌?ㄨ?缁??規??ヨ?劇疆???峰???????ゅ??э?

??

? ????????public void? setAttribute("灞??у??",灞??у??;

? ????????public Object? getAttribute("灞??у??");

? ????????public void? removeAttribute("灞??у??");

? ?????

? 5.3 ?????ㄧ?$???變韓?版??搴?杩???? ??????eb.xml涓?锛?浣跨??lt;listener>?ラ??缃????????璇?娉???锛?

??

? ????????<listener>

? ????????????<listener-class>????.绫誨??</listener-class>

? ????????</listener>

??

? ????姣?濡?锛???寤轟?涓?ServletContext瀵矽薄????????ㄤ?涓?Web椤圭??涓????ㄥ氨??寤轟?涓?涓??版??搴???杩??ワ?淇?瀛???pplication瀵矽薄涓?锛?杩?涓?杩??ヤ??翠?瀛???eb椤圭???抽???朵負姝???绋?搴?浠g??濡?涓?锛?

??

? ????package ch13;

? ????import javax.servlet.ServletContextEvent;

? ????import javax.servlet.ServletContextListener;

? ????import java.sql.*;

? ????//import ch7.db.*;?

? ????public final class MyConnectionManager implements?ServletContextListener?{

? ????????Connection con=null;

? ????????public void? contextInitialized(ServletContextEvent e) {//?????ュ?e??涔????規?锛?椤圭?????ㄦ??璋??ㄨ?ユ?規?

? ????????????ConnectDB?db=new ConnectDB();

? ????????????con=db.getConnection();? //浣跨?ㄥ?矽薄db??寤烘?版??搴?杩???? ????????????e.getServletContext().setAttribute("con",con);//涓??版??搴???杩??ヤ?瀛???pplication瀵矽薄涓?

? ????????}

? ????????public void contextDestroyed(ServletContextEvent? e) {//?????ュ?e??涔????規?锛?椤圭???抽???惰??ㄨ?ユ?規?

? ????????????try {

? ????????????????con.close();

? ????????????}

? ????????????catch(Exception? e1){}

? ????????}

? ????}

??

? ??????eb.xml??浠跺?矽?涓?ServletContext绫誨?????????ㄨ?琛???缃?锛?

??

? ????????<listener>

? ????????????<listener-class>ch13.MyConnectionManager</listener-class>

? ????????</listener>?

??

? ????杩?涓??????ㄨ?戒?璇?姣??闆??寤轟?涓?ServletContext瀵矽薄??涓?涓?Web椤圭??????涓?涓? ServletContext瀵矽薄)锛?璇?eb椤圭???戒???涓?涓???浠ヤ嬌?ㄧ???版??搴?杩??ワ?骞朵?杩?涓??版??搴?杩??ヤ??ㄨ??ervletContext瀵矽薄?抽??(缁? ??)???跺????涔??抽????

??

? ????娴?璇?椤甸??estcon.jsp锛?

? ????<%@ page contentType="text/html" pageEncoding="GB18030"%>

? ????<br><%= "寰??扮???版??搴?杩??ワ?"+application.getAttribute("con") %>

? ????<br><h1>璇鋒敞??瀹?瑁??版??搴???椹卞?ㄧ?搴?</h1>

??

??

? 5.4 ?????ㄧ??搴??ㄦ?渚?

? ????涓??㈡??涓?涓??ㄧ嚎?ㄦ?鋒?伴?????????杩?涓??????ㄥ??浠ュ???剁?璁″?ㄧ嚎浜烘?幫???ServletContext??濮??????ゆ??訛??ㄦ???″?ㄦ?у?跺?版???闆?哄?瑰?淇℃??锛?褰?ServletContext瀵矽薄????灞??у?????淇??廣?????ゆ?訛??ㄦ???″??? ?у?跺?版???扮?稿???淇℃????瑕?瀹???涓??㈢?????????斤???瑕?浣跨??涓??ュ?o?

??

? ????HttpSessionListener锛?????ttpSession瀵矽薄????寤哄???ゆ?锛?缁?璁′漢?般??

? ????ServletContextListener锛?????ervletContext瀵矽薄????寤哄???ゆ???

? ????ServletContextAttributeListener锛?????ervletContext??灞??у??????

??

? ????1.?????ㄧ?搴?浠g??OnLineCountListener.java

? ????package ch13;

? ????import javax.servlet.*;

? ????import javax.servlet.http.*;

? ????public final class?OnLineCountListener?implements? HttpSessionListener,

? ????????????????????????????????ServletContextAttributeListener,? ServletContextListener {

? ????????private int count;

? ????????private ServletContext? context=null;

??

? ????????//?????芥?奧?

? ????????public OnLineCountListener()? {

? ????????????count=0;//浜烘??? ????????}

??

? ????????//????HttpSessionListener?ュ?d腑??2涓??規?,瀹???瀵?ession瀵矽薄??寤哄???ゆ?????瑙?

? ????????public void? sessionCreated(HttpSessionEvent se) {//??寤轟?涓?涓?session瀵矽薄

? ????????????count++;//浜烘?闆??1

? ????????????setContext(se);

? ????????}

? ????????public void? sessionDestroyed(HttpSessionEvent se){//?ゆ?浜?涓?涓?session瀵矽薄

? ????????????count--;//浜烘?闆??1

? ????????????setContext(se);

? ????????}

??

? ????????private void? setContext(HttpSessionEvent se){

? ????????????se.getSession().getServletContext().setAttribute("onLine",new? Integer(count));

? ????????}

??

? ????????//????ServletContextAttributeListener?ュ?d腑??3涓??規?

? ????????public void? attributeAdded(ServletContextAttributeEvent event) {//娣誨??浜?灞???? ????????????log("attributeAdded("+event.getName()+","+event.getValue()+")");

? ????????}

? ????????public void? attributeRemoved(ServletContextAttributeEvent event) {//???や?灞???? ????????????log("attributeRemove("+event.getName()+","+event.getValue()+")");

? ????????}

? ????????public void attributeReplaced(ServletContextAttributeEvent? event) {//?挎?????????灞???? ????????????log("attributeReplaced("+event.getName()+","+event.getValue()+")");

? ????????}

??

? ????????//????ServletContextListener?ュ?d腑??2涓??規?

? ????????public void? contextDestroyed(ServletContextEvent event) {//Web椤圭???抽??

? ????????????log("contextDestroyed()");

? ????????????context=null;

? ????????}

? ????????public void? contextInitialized(ServletContextEvent event) {//Web椤圭??????? ????????????this.context=event.getServletContext();

? ????????????log("contextInitialized()");

? ????????}

??

? ????????//?劇ず淇℃??

? ????????private void log(String? message){

? ????????????System.out.println("ContextListener:"+message);

? ????????}

? ????}

??

? ??????nLineCountListener绫諱腑锛???ount淇?瀛??????ㄧ嚎浜烘?幫?姣?澧???涓?涓?session瀵矽薄锛?浜烘?闆??1锛?姣??ゆ?涓?涓?session瀵矽薄锛?浜烘?闆??1??浜烘?頒?瀛???ervletContext瀵矽薄涓?锛?浣垮?浠諱?椤甸?㈤?藉??浠ヤ嬌?ㄣ??

??

? ????2.??eb.xml??浠朵腑??缃?????????

? ????????<listener>

? ????????????<listener-class>ch13.OnLineCountListener</listener-class>

? ????????</listener>?

??

? ????3.缂???娴?璇?椤甸??2涓?)

? ????????????????????????????listener.jsp------>exit.jsp

??

? ????????????????????????????listener.jsp椤甸?㈠??瀹孤?

? ????<%@ page? contentType="text/html;charset=gb2312" %>

? ?????????ㄧ嚎浜烘?幫?<font? color="red"><%=application.getAttribute("onLine")%></font><br>

? ???????轟?璇?:

? ????<form action="exit.jsp"? method="post">

? ????<input type="submit"? value="exit">

? ????</form>?

??

? ????????????????????????????exit.jsp椤甸?㈠??瀹?? ????<%@ page? contentType="text/html;charset=gb2312" %>

? ????浣?宸茬????轟?璇?<%? session.invalidate(); %>?

??

? ??????浠ュ????????涓?娴?瑙??ㄧ???o?姣?涓?绐??d唬琛ㄤ?涓?瀹㈡?鳳???姝ゅ?ㄧ嚎浜烘?版??5???

??

? 5.5 HttpSessionBindingListener ?ュ?g??浣跨??? ????璁捐?′?涓?瀛???瀵矽薄Student锛?褰?灏?璇ュ????瀵矽薄瀛???session涓??訛?浠???骞撮?澧???10宀?锛?褰?灏?杩?涓?瀛???瀵矽薄浠?session涓????ゆ?訛?浠???骞撮???灏?5宀???

??

? ????瀛???绫?tudent.java

? ????package ch13;

? ????import javax.servlet.*;

? ????import javax.servlet.http.*;

? ????public class?Student?implements? HttpSessionBindingListener {

? ????????private int age=30;

? ????????public void valueBound(HttpSessionBindingEvent? arg0) {//瀛???ession?惰???ㄨ???? ????????????age+=10;

? ????????}

? ????????public void? valueUnbound(HttpSessionBindingEvent arg0) {//浠?session涓????ゆ?惰???ㄨ???? ????????????age-=5;

? ????????}

? ????????public int getAge() {return? age;}

? ????}?

??

? ????娴?璇?椤甸??ind.jsp

? ????<%@ page? contentType="text/html;charset=gb2312"? import="ch13.Student"%>

? ????<%

? ????????Student student=new? Student();

? ????????out.println("瀛???骞撮?锛?"+student.getAge()+"<br>");?

? ????????session.setAttribute("st",student);

? ????????out.println("瀛???ession??锛?璇ュ????骞撮?锛?"+student.getAge()+"<br>");

? ????????session.removeAttribute("st");??

? ????????out.println("浠?session???わ?璇ュ????骞撮?锛?"+student.getAge()+"<br>");??

? ????%>?

??

??

??

??

??

?

?

?