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>??绱??ㄦ?ュ??涔?涓?涓?杩?婊ゅ???璇ュ??绱???灞??ф??锛?
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??浜?浠跺?涓?琛??
????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>");?? ? ????%>? ?? ?? ?? ?? ?? ? ? | ||||||||||||||||||||||||||||||||||
?